Context
Operator-flagged live reality (2026-06-21): "the current scheduling is NUTS. there are no free slots and gemma4 gets hammered all the time… we NEED an idle window where gemma4 does not get hammered with other tasks in PARALLEL." The idle window is the prerequisite for clean REM extraction and for any benchmarking/experiments. Sub of #13624 (orchestrator heavy-maintenance).
Root Cause (V-B-A'd against dev)
Two hot-path tool calls fired chat-model inference fire-and-forget, bypassing the exclusive-heavy serialization the registry tasks respect:
MailboxService.mjs:677 — extractMessageConcepts (a gemma4 chat call, up to 2 attempts) on every A2A message.
MemoryService.mjs:536 — buildMiniSummary (a gemma4 chat call) on every memory write.
Vicious cycle: the load scales with swarm A2A traffic — the more the maintainers coordinate, the more gemma4 calls fire.
The Fix (operator-directed — deletion, not a new scheduled task)
The scheduled equivalents already exist — so the inline calls are redundant duplicates, not a missing capability. Remove them:
- Concepts:
DreamService already runs ConceptDiscoveryService.runDiscoveryCycle() (L929, auto-mining) + ConceptIngestor.syncConceptsToGraph() (L341, curated sync) under the heavy lease. The inline per-message extraction duplicated this on the hot path.
- Mini-summaries: the scheduled
backfillMiniSummaries pass already fills miniSummary IS NULL AGENT_MEMORY nodes (the node itself is projected by _projectMemoryToGraph, awaited).
Acceptance Criteria (revised — see Evolution)
Evolution
The original ACs proposed moving per-message concept-extraction into a new scheduled, backpressure-aware task with a conceptExtracted marker and no-loss TAGGED_CONCEPT@0.8 preservation. The operator's directive (2026-06-21, "we already HAVE a scheduled task… remove it from messaging. ONLY orchestrator driven") superseded that: no new task is needed because ConceptDiscoveryService.runDiscoveryCycle already mines concepts under the heavy lease, and the per-message @0.8 auto-tags are redundant noise (the ~19.5k non-curated CONCEPT bloat), not signal to preserve. The fix is therefore a deletion (PR #13836), and the contract is retire-the-redundant-inline-path, not relocate-it-losslessly. (Resolves @neo-gpt's #13836 contract-drift CHANGES_REQUESTED.)
Related
- Parent: #13624. Unblocks: the gemma4-rem-benchmark / keep-alive-probe; the REM-extraction consolidation (#12439 / #12073).
- Root:
MailboxService.mjs:677, MemoryService.mjs:536. Retained paths: DreamService → ConceptDiscoveryService.runDiscoveryCycle (L929) + ConceptIngestor.syncConceptsToGraph (L341); backfillMiniSummaries.
Origin Session ID: e96a0867-4c28-4877-b2f4-f56173ee9fd1
Context
Operator-flagged live reality (2026-06-21): "the current scheduling is NUTS. there are no free slots and gemma4 gets hammered all the time… we NEED an idle window where gemma4 does not get hammered with other tasks in PARALLEL." The idle window is the prerequisite for clean REM extraction and for any benchmarking/experiments. Sub of #13624 (orchestrator heavy-maintenance).
Root Cause (V-B-A'd against
dev)Two hot-path tool calls fired chat-model inference fire-and-forget, bypassing the
exclusive-heavyserialization the registry tasks respect:MailboxService.mjs:677—extractMessageConcepts(a gemma4 chat call, up to 2 attempts) on every A2A message.MemoryService.mjs:536—buildMiniSummary(a gemma4 chat call) on every memory write.Vicious cycle: the load scales with swarm A2A traffic — the more the maintainers coordinate, the more gemma4 calls fire.
The Fix (operator-directed — deletion, not a new scheduled task)
The scheduled equivalents already exist — so the inline calls are redundant duplicates, not a missing capability. Remove them:
DreamServicealready runsConceptDiscoveryService.runDiscoveryCycle()(L929, auto-mining) +ConceptIngestor.syncConceptsToGraph()(L341, curated sync) under the heavy lease. The inline per-message extraction duplicated this on the hot path.backfillMiniSummariespass already fillsminiSummary IS NULLAGENT_MEMORYnodes (the node itself is projected by_projectMemoryToGraph, awaited).Acceptance Criteria (revised — see Evolution)
extractMessageConceptsremoved from theaddMessagehot path.buildMiniSummaryremoved from theaddMemoryhot path; the AGENT_MEMORY node still projects (_projectMemoryToGraph), the scheduled backfill enriches the miniSummary.TAGGED_CONCEPT@0.8auto-tagging edges are retired as noise (NOT preserved) — they were the bulk of the non-curated graph bloat. The concept population is retained via the orchestrator-scheduledConceptDiscoveryService+ConceptIngestor; curatedtaggedConcepts@1.0edges still link inline.Evolution
The original ACs proposed moving per-message concept-extraction into a new scheduled, backpressure-aware task with a
conceptExtractedmarker and no-lossTAGGED_CONCEPT@0.8preservation. The operator's directive (2026-06-21, "we already HAVE a scheduled task… remove it from messaging. ONLY orchestrator driven") superseded that: no new task is needed becauseConceptDiscoveryService.runDiscoveryCyclealready mines concepts under the heavy lease, and the per-message@0.8auto-tags are redundant noise (the ~19.5k non-curated CONCEPT bloat), not signal to preserve. The fix is therefore a deletion (PR #13836), and the contract is retire-the-redundant-inline-path, not relocate-it-losslessly. (Resolves @neo-gpt's #13836 contract-driftCHANGES_REQUESTED.)Related
MailboxService.mjs:677,MemoryService.mjs:536. Retained paths:DreamService→ConceptDiscoveryService.runDiscoveryCycle(L929) +ConceptIngestor.syncConceptsToGraph(L341);backfillMiniSummaries.Origin Session ID: e96a0867-4c28-4877-b2f4-f56173ee9fd1