Wire scheduler memory policy to real memory services

This commit is contained in:
thePR0M3TH3AN committed 2026-02-14 17:43:05 -05:00
1 parent e2cdc97ffe
commit ab933f8905
2 files changed
+34 -16

No files matched your search

+22 -8
View File
@@ -32,10 +32,16 @@ Every agent prompt invoked by the schedulers (daily/weekly) MUST enforce this co
- Record active unresolved reproducible items in `KNOWN_ISSUES.md`
4. **Execute memory retrieval before implementation begins**:
- Run configured memory retrieval workflow before prompt execution (for example via `scheduler.memoryPolicyByCadence.<cadence>.retrieveCommand`)
- For current scheduler enforcement, retrieval command MUST emit `MEMORY_RETRIEVED` and/or create the configured artifact (`.scheduler-memory/retrieve-daily.ok` or `.scheduler-memory/retrieve-weekly.ok`)
- Retrieval command MUST call real memory services (`src/services/memory/index.js#getRelevantMemories` with `ingestEvents` seeding) and MUST emit deterministic marker `MEMORY_RETRIEVED`.
- Retrieval command MUST write cadence-scoped evidence artifacts:
- `.scheduler-memory/retrieve-<cadence>.ok`
- `.scheduler-memory/retrieve-<cadence>.json` containing operation inputs/outputs (`agentId`, `query`, seeded event count, ingested count, retrieved count).
5. **Store memory after implementation and before completion publish**:
- Run configured memory storage workflow after prompt execution (for example via `scheduler.memoryPolicyByCadence.<cadence>.storeCommand`)
- For current scheduler enforcement, storage command MUST emit `MEMORY_STORED` and/or create the configured artifact (`.scheduler-memory/store-daily.ok` or `.scheduler-memory/store-weekly.ok`)
- Storage command MUST call real memory services (`src/services/memory/index.js#ingestEvents`, which uses ingestor/summarizer pipeline) and MUST emit deterministic marker `MEMORY_STORED`.
- Storage command MUST write cadence-scoped evidence artifacts:
- `.scheduler-memory/store-<cadence>.ok`
- `.scheduler-memory/store-<cadence>.json` containing operation inputs/outputs (`agentId`, input event count, stored count, generated summaries).
6. **Publish lock completion only after validation passes and before writing success logs**:
- Run `npm run lock:complete -- --agent <agent-name> --cadence <cadence>` (or equivalent `complete`) successfully
- If any validation command exits non-zero, do **not** call `lock:complete`; write `_failed.md` with the validation failure reason and stop
@@ -139,12 +145,20 @@ Every agent prompt invoked by the schedulers (daily/weekly) MUST enforce this co
- Memory retrieval evidence must exist for this run (output marker and/or artifact file).
- Memory storage evidence must exist for this run (output marker and/or artifact file).
- Enforced daily commands in `torch-config.json` currently run:
- `echo MEMORY_RETRIEVED && mkdir -p .scheduler-memory && : > .scheduler-memory/retrieve-daily.ok`
- `echo MEMORY_STORED && mkdir -p .scheduler-memory && : > .scheduler-memory/store-daily.ok`
- Enforced weekly commands in `torch-config.json` currently run:
- `echo MEMORY_RETRIEVED && mkdir -p .scheduler-memory && : > .scheduler-memory/retrieve-weekly.ok`
- `echo MEMORY_STORED && mkdir -p .scheduler-memory && : > .scheduler-memory/store-weekly.ok`
- Enforced daily/weekly commands in `torch-config.json` run `node --input-type=module` snippets that call `src/services/memory/index.js` APIs directly:
- Retrieval path: `ingestEvents(...)` seed + `getRelevantMemories(...)` retrieval.
- Storage path: `ingestEvents(...)` (ingestor + summarizer path).
- Input contract for retrieval evidence JSON:
- Required keys: `cadence`, `operation: "retrieve"`, `servicePath`, `inputs`, `outputs`, `status: "ok"`.
- `inputs` must include `agentId`, `query`, and seeded `events` count.
- `outputs` must include `ingestedCount` and `retrievedCount`.
- Input contract for storage evidence JSON:
- Required keys: `cadence`, `operation: "store"`, `servicePath`, `inputs`, `outputs`, `status: "ok"`.
- `inputs` must include `agentId` and input `events` count.
- `outputs` must include `storedCount` and generated `summaries`.
- Failure semantics for required mode:
- If retrieval/store command exits non-zero, scheduler writes `_failed.md` and stops.
- If command succeeds but markers/artifacts are missing, scheduler treats this as missing memory evidence.
- Prompt authors MUST keep any command changes aligned with configured markers/artifacts so scheduler evidence checks remain satisfiable.
- If `scheduler.memoryPolicyByCadence.<cadence>.mode = required`, missing evidence is a hard failure.
- If mode is `optional`, log warning context and continue.
+12 -8
View File
@@ -25,8 +25,8 @@
"memoryPolicyByCadence": {
"daily": {
"mode": "required",
"retrieveCommand": "echo MEMORY_RETRIEVED && mkdir -p .scheduler-memory && : > .scheduler-memory/retrieve-daily.ok",
"storeCommand": "echo MEMORY_STORED && mkdir -p .scheduler-memory && : > .scheduler-memory/store-daily.ok",
"retrieveCommand": "set -euo pipefail; mkdir -p .scheduler-memory; node --input-type=module -e \"import { ingestEvents, getRelevantMemories } from './src/services/memory/index.js'; import { writeFileSync } from 'node:fs'; const cadence='daily'; const agentId='scheduler-memory-daily'; const query='scheduler daily memory retrieval'; const timestamp=1700000000000; const events=[{ agent_id: agentId, content: 'Memory retrieval seed for ' + cadence, timestamp, tags:['scheduler', cadence], metadata:{ session_id:'scheduler-' + cadence, source:'scheduler-retrieve', importance:0.4 } }]; const ingested=await ingestEvents(events,{ agent_id: agentId }); const retrieved=await getRelevantMemories({ agent_id: agentId, query, k: 5 }); const artifact={ cadence, operation:'retrieve', servicePath:'src/services/memory/index.js#getRelevantMemories', inputs:{ agentId, query, events:events.length }, outputs:{ ingestedCount:ingested.length, retrievedCount:retrieved.length }, status:'ok' }; writeFileSync('.scheduler-memory/retrieve-daily.json', JSON.stringify(artifact, null, 2)); writeFileSync('.scheduler-memory/retrieve-daily.ok', 'MEMORY_RETRIEVED\\n');\"; echo MEMORY_RETRIEVED",
"storeCommand": "set -euo pipefail; mkdir -p .scheduler-memory; node --input-type=module -e \"import { ingestEvents } from './src/services/memory/index.js'; import { writeFileSync } from 'node:fs'; const cadence='daily'; const agentId='scheduler-memory-daily'; const baseTs=1700000100000; const events=[{ agent_id: agentId, content: 'Store memory event A for ' + cadence, timestamp: baseTs, tags:['scheduler', cadence, 'store'], metadata:{ session_id:'scheduler-' + cadence + '-store', source:'scheduler-store', importance:0.55 } },{ agent_id: agentId, content: 'Store memory event B for ' + cadence, timestamp: baseTs + 1, tags:['scheduler', cadence, 'store'], metadata:{ session_id:'scheduler-' + cadence + '-store', source:'scheduler-store', importance:0.55 } }]; const stored=await ingestEvents(events,{ agent_id: agentId }); const artifact={ cadence, operation:'store', servicePath:'src/services/memory/index.js#ingestEvents', inputs:{ agentId, events:events.length }, outputs:{ storedCount:stored.length, summaries:stored.map((m)=>m.summary) }, status:'ok' }; writeFileSync('.scheduler-memory/store-daily.json', JSON.stringify(artifact, null, 2)); writeFileSync('.scheduler-memory/store-daily.ok', 'MEMORY_STORED\\n');\"; echo MEMORY_STORED",
"retrieveSuccessMarkers": [
"MEMORY_RETRIEVED"
],
@@ -34,16 +34,18 @@
"MEMORY_STORED"
],
"retrieveArtifacts": [
".scheduler-memory/retrieve-daily.ok"
".scheduler-memory/retrieve-daily.ok",
".scheduler-memory/retrieve-daily.json"
],
"storeArtifacts": [
".scheduler-memory/store-daily.ok"
".scheduler-memory/store-daily.ok",
".scheduler-memory/store-daily.json"
]
},
"weekly": {
"mode": "required",
"retrieveCommand": "echo MEMORY_RETRIEVED && mkdir -p .scheduler-memory && : > .scheduler-memory/retrieve-weekly.ok",
"storeCommand": "echo MEMORY_STORED && mkdir -p .scheduler-memory && : > .scheduler-memory/store-weekly.ok",
"retrieveCommand": "set -euo pipefail; mkdir -p .scheduler-memory; node --input-type=module -e \"import { ingestEvents, getRelevantMemories } from './src/services/memory/index.js'; import { writeFileSync } from 'node:fs'; const cadence='weekly'; const agentId='scheduler-memory-weekly'; const query='scheduler weekly memory retrieval'; const timestamp=1700000000000; const events=[{ agent_id: agentId, content: 'Memory retrieval seed for ' + cadence, timestamp, tags:['scheduler', cadence], metadata:{ session_id:'scheduler-' + cadence, source:'scheduler-retrieve', importance:0.4 } }]; const ingested=await ingestEvents(events,{ agent_id: agentId }); const retrieved=await getRelevantMemories({ agent_id: agentId, query, k: 5 }); const artifact={ cadence, operation:'retrieve', servicePath:'src/services/memory/index.js#getRelevantMemories', inputs:{ agentId, query, events:events.length }, outputs:{ ingestedCount:ingested.length, retrievedCount:retrieved.length }, status:'ok' }; writeFileSync('.scheduler-memory/retrieve-weekly.json', JSON.stringify(artifact, null, 2)); writeFileSync('.scheduler-memory/retrieve-weekly.ok', 'MEMORY_RETRIEVED\\n');\"; echo MEMORY_RETRIEVED",
"storeCommand": "set -euo pipefail; mkdir -p .scheduler-memory; node --input-type=module -e \"import { ingestEvents } from './src/services/memory/index.js'; import { writeFileSync } from 'node:fs'; const cadence='weekly'; const agentId='scheduler-memory-weekly'; const baseTs=1700000100000; const events=[{ agent_id: agentId, content: 'Store memory event A for ' + cadence, timestamp: baseTs, tags:['scheduler', cadence, 'store'], metadata:{ session_id:'scheduler-' + cadence + '-store', source:'scheduler-store', importance:0.55 } },{ agent_id: agentId, content: 'Store memory event B for ' + cadence, timestamp: baseTs + 1, tags:['scheduler', cadence, 'store'], metadata:{ session_id:'scheduler-' + cadence + '-store', source:'scheduler-store', importance:0.55 } }]; const stored=await ingestEvents(events,{ agent_id: agentId }); const artifact={ cadence, operation:'store', servicePath:'src/services/memory/index.js#ingestEvents', inputs:{ agentId, events:events.length }, outputs:{ storedCount:stored.length, summaries:stored.map((m)=>m.summary) }, status:'ok' }; writeFileSync('.scheduler-memory/store-weekly.json', JSON.stringify(artifact, null, 2)); writeFileSync('.scheduler-memory/store-weekly.ok', 'MEMORY_STORED\\n');\"; echo MEMORY_STORED",
"retrieveSuccessMarkers": [
"MEMORY_RETRIEVED"
],
@@ -51,10 +53,12 @@
"MEMORY_STORED"
],
"retrieveArtifacts": [
".scheduler-memory/retrieve-weekly.ok"
".scheduler-memory/retrieve-weekly.ok",
".scheduler-memory/retrieve-weekly.json"
],
"storeArtifacts": [
".scheduler-memory/store-weekly.ok"
".scheduler-memory/store-weekly.ok",
".scheduler-memory/store-weekly.json"
]
}
}