LearnNewsExamplesServices
Frontmatter
id17046
titleREM heavy-maintenance cycles need a budget and breathing gaps on CPU-only planes
stateClosed
labels
enhancementaiagent-os
assigneesneo-opus-vega
createdAtAug 13, 2026, 1:25 PM
updatedAtAug 14, 2026, 10:57 AM
githubUrlhttps://github.com/neomjs/neo/issues/17046
authorneo-opus-vega
commentsCount1
parentIssue17072
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtAug 14, 2026, 10:57 AM

REM heavy-maintenance cycles need a budget and breathing gaps on CPU-only planes

Closed Backlog/active-chunk-15 enhancementaiagent-os
neo-opus-vega
neo-opus-vega commented on Aug 13, 2026, 1:25 PM

Context

Live external-plane evidence, 2026-08-13: on a CPU-only deployment the REM/dream pipeline ran back-to-back heavy cycles (tri-vector → topology → next cycle) for 5+ hours of sustained ~400% CPU on the chat lane — over a Memory Core holding 22 memories and 9 summaries. The work was legitimate and progressing (measured: one tri-vector stage = 849s), but the operational picture was indistinguishable, on any monitor, from the frozen-cores incident the deployment had just been fixed for. The client read it as "4 cores frozen again."

On GPU planes a full REM cycle is minutes and invisible. On CPU planes the same cadence produces hours of pinned cores — the GPU-calibration blind spot (cf. the timeout family) applied to scheduling.

The Problem

REM cycles have no per-cycle budget and no inter-cycle gap: while due, the pipeline runs stage after stage continuously, holding the heavy-maintenance lease throughout (see #16561 for the lease-fairness half — this ticket owns the workload shaping half). A maintenance process that saturates its lane for hours (a) starves every lease waiter for the whole span, (b) is visually indistinguishable from a wedge, and (c) delivers marginal value at that intensity on a plane whose corpus is 22 memories.

The Fix (shape)

  1. A per-cycle budget on cloud/container profiles: N stages or T minutes per lease hold, then release + re-queue — waiters (e.g., bootstrap tenant ingestion) interleave.
  2. An inter-cycle breathing gap (config leaf, CPU-plane profile default) so cores visibly return to idle between cycles — monitors and humans can distinguish "working in pulses" from "wedged."
  3. Cadence proportional to corpus size: a 22-memory graph does not need continuous consolidation; REM intensity should scale with undigested backlog.

Acceptance Criteria

  • A REM run on the container profile releases the heavy lease at its budget boundary; a registered waiter acquires before REM re-acquires (fixture, integrates with #16561's waiter semantics).
  • Between cycles the chat-lane provider receives no REM work for the configured gap (fixture on dispatch timestamps).
  • Cycle scheduling reads the undigested backlog; an idle-backlog plane runs at reduced cadence (fixture).
  • GPU/local profiles unchanged by default.

Related

#16561 (lease fairness — the other half) · #17042 (retrospective family) · the 2026-08-13 external-plane receipts

Origin Session ID: 37509548-6568-47fe-9e6c-2aabd27c2b11

tobiu referenced in commit e23e73a - "feat(ai): budget and pace REM cycles on constrained CPU planes (#17046) (#17097) on Aug 14, 2026, 10:57 AM
tobiu closed this issue on Aug 14, 2026, 10:57 AM