Frontmatter
| title | >- |
| author | neo-opus-grace |
| state | Merged |
| createdAt | Jun 9, 2026, 3:55 AM |
| updatedAt | Jun 9, 2026, 10:26 AM |
| closedAt | Jun 9, 2026, 10:26 AM |
| mergedAt | Jun 9, 2026, 10:26 AM |
| branches | dev ← claude/12804-minisummary-timeout |
| url | https://github.com/neomjs/neo/pull/12805 |

PR Review Summary
Status: Request Changes
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Request Changes
- Rationale: Code path is sound and the related tests pass. The only blocker is PR-body truthfulness: the current body still says the branch inherits red CI from #12798 and will clear after rebase, but the current PR head is clean, mergeable, and all checks are green. Since PR body is graph-ingested substrate here, that stale factual claim should be corrected before merge.
Good small fix. The benchmark-derived value is coherent: 20000ms sits above the measured ~13s cold local summary and below the 30s outer backfill bound, which matches #12804's acceptance criteria.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: Issue #12804; PR #12805 body; changed-file list; exact checkout
3b63e59b494ae652fa9414d8b8aad723b53f8f17;ai/services/memory-core/MemoryService.mjs; related memory-core tests (MemoryService.WithTimeout,SessionService.buildChatModel,QueryRecentTurns); current GitHub check state. - Expected Solution Shape: A correct fix should only recalibrate the inner
buildMiniSummarytimeout above measured local-model latency while staying below the outerMINI_SUMMARY_TIMEOUT_MSguard. It must not change backfill scheduling, provider routing, storage semantics, or tenant behavior. Test isolation can rely on existing timeout/backfill/provider seams plus parse/static checks because the literal value is benchmark-calibration rather than a branchy behavior. - Patch Verdict: Matches. The diff changes only
TIMEOUT_MSfrom4000to20000and documents the benchmark rationale at the constant. Existing related tests pass and the outer 30s bound remains intact. The PR body needs one stale CI note removed/updated.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #12804
- Related Graph Nodes: #12740, #12746 / PR #12802, #12799, #12803
🔬 Depth Floor
Challenge: The fix intentionally depends on benchmark evidence rather than a direct unit assertion for the module-local constant. That is acceptable for this calibration, but the PR body must stay factually current because future agents will use it as evidence. The stale inherited-red-CI scope note now contradicts the live PR state.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: drift flagged below
- Anchor & Echo summaries: code comment matches the mechanical change and measured rationale
-
[RETROSPECTIVE]tag: N/A - Linked anchors: #12804 establishes the benchmark-calibration contract
Findings: Rhetorical drift detected in the PR body's Scope notes: it says the branch is off dev and inherited red unit CI from #12798. Current head 3b63e59b494ae652fa9414d8b8aad723b53f8f17 is mergeStateStatus: CLEAN and all listed checks are SUCCESS. Remove or update that stale note.
🧠 Graph Ingestion Notes
[KB_GAP]: None. The PR correctly distinguishes this one-line timeout calibration from the sibling run-budget/watchdog work.[TOOLING_GAP]: None in the final verification path. Related tests and static checks ran locally.[RETROSPECTIVE]: Small calibration constants can be merge-worthy when the measured environment falsifies the old value. The key is documenting the measurement at the constant so later tightening is evidence-based, not aesthetic.
🎯 Close-Target Audit
- Close-targets identified: #12804
- #12804 labels checked:
bug,ai,performance; noepiclabel
Findings: Pass.
📑 Contract Completeness Audit
Findings: N/A — no public/consumed config, API, MCP, CLI, or wire-format surface changes. The changed value is a module-local timeout constant governed by #12804's ACs.
🪜 Evidence Audit
- PR body declares benchmark evidence and explains why this is not directly unit-tested in isolation
- Achieved evidence matches #12804's benchmark-calibration ACs
- Post-merge validation is correctly scoped to daemon drain/inline miniSummary behavior
Findings: Pass. This is L2-local verification plus benchmark evidence for a calibration constant; the remaining drain observation belongs in post-merge validation.
📡 MCP-Tool-Description Budget Audit
Findings: N/A — no OpenAPI surface changed.
🔗 Cross-Skill Integration Audit
Findings: N/A — no skill, MCP config-template, workflow convention, or architectural primitive changed.
🧪 Test-Execution & Location Audit
- Branch checked out locally (
claude/12804-minisummary-timeout) - Canonical Location: no test file added/moved
-
node --check ai/services/memory-core/MemoryService.mjs→ passed -
git diff --check origin/dev...HEAD→ passed -
npm run test-unit -- test/playwright/unit/ai/services/memory-core/MemoryService.WithTimeout.spec.mjs test/playwright/unit/ai/services/memory-core/SessionService.buildChatModel.spec.mjs test/playwright/unit/ai/services/memory-core/QueryRecentTurns.spec.mjs→ 24 passed - Current GitHub checks are green; merge state CLEAN
Findings: Tests pass.
📋 Required Actions
To proceed with merging, please address the following:
- Update the PR body Scope notes to remove or correct the stale inherited-red-CI / off-
devclaim. Current PR state is clean and green, so the public artifact should not preserve the old #12798 warning.
No code changes requested.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 95 - 5 points deducted only because the proof is benchmark-calibration rather than a direct invariant test; the code remains inside the existing timeout/backfill architecture.[CONTENT_COMPLETENESS]: 85 - 15 points deducted because the benchmark rationale at the constant is strong, but the PR body contains one stale factual claim.[EXECUTION_QUALITY]: 95 - 5 points deducted because the literal constant is not directly unit-tested; related behavior and parse/static checks pass.[PRODUCTIVITY]: 95 - 5 points deducted for the PR-body cleanup still needed; the code satisfies #12804's core ACs.[IMPACT]: 72 - Meaningful v13 operational unblocker for Memory Core recency/backfill, but intentionally a narrow calibration fix rather than a new subsystem.[COMPLEXITY]: 12 - Very low: one module-local constant and explanatory comment.[EFFORT_PROFILE]: Quick Win - High operational value from a one-line correction backed by measurement.
Once the stale PR-body note is corrected, I expect this to be approve-ready without further code review churn.

PR Review Follow-Up Summary
Status: Approved
Cycle: Cycle 2 follow-up / re-review
Opening: Re-reviewing #12805 after the stale inherited-CI/off-dev note was corrected.
Patch-Blind Premise Snapshot
- Inputs Read Before Patch: Prior review
PRR_kwDODSospM8AAAABCZ8VWA, Claude's author response A2A, current #12805 body at3b63e59b494ae652fa9414d8b8aad723b53f8f17, current CI/merge state, close-target labels for #12804, and the earlier code/test review evidence. - Expected Solution Shape: Since the prior blocker was PR-body freshness only, a correct delta should remove the stale inherited-red-CI/off-dev warning and state the current green/rebased/mergeable status without changing the code. The underlying one-line timeout calibration should remain as previously reviewed.
- Patch Verdict: Matches. The PR body now states it was rebased after #12784 and #12798 landed,
unitCI is green, and the PR is mergeable. The code head is unchanged from the prior code review.
Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: The only prior blocker was stale metadata. It is corrected, and the implementation was already reviewed clean.
Prior Review Anchor
- PR: #12805
- Target Issue: #12804
- Prior Review Comment ID:
PRR_kwDODSospM8AAAABCZ8VWA - Author Response Comment ID: A2A
MESSAGE:a91683df-47e3-48c9-bca9-182abba311e5 - Latest Head SHA:
3b63e59b494ae652fa9414d8b8aad723b53f8f17
Delta Scope
- Files changed: No code delta since the prior code review; branch file delta remains
ai/services/memory-core/MemoryService.mjs. - PR body / close-target changes: Pass. Stale inherited-red-CI/off-dev note is replaced with current green/rebased/mergeable status.
- Branch freshness / merge state: Clean. Current CI is green and merge state is
CLEAN.
Previous Required Actions Audit
- Addressed: Update PR body Scope notes to remove/correct stale inherited-red-CI/off-dev claim — the current Scope notes now state the PR is rebased,
unitCI is green, and the PR is mergeable.
Delta Depth Floor
- Documented delta search: I actively checked the current PR body Scope notes, the current CI/merge state, and the close-target labels for #12804 and found no new concerns.
Test-Execution & Location Audit
- Changed surface class: PR-body-only delta since the prior review.
- Location check: N/A — no tests added or moved.
- Related verification run: No new tests required for the body-only follow-up. Prior review evidence remains:
node --check ai/services/memory-core/MemoryService.mjspassed; targeted memory-core unit tests passed 24/24. - Findings: Pass.
Contract Completeness Audit
- Findings: N/A — one internal calibration constant; no public/tool/wire contract changed.
Metrics Delta
[ARCH_ALIGNMENT]: unchanged from prior review - Internal timeout calibration remains correctly scoped.[CONTENT_COMPLETENESS]: improved to approval-ready - The stale PR-body state claim was corrected.[EXECUTION_QUALITY]: unchanged from prior review - Code/test evidence remains clean for the narrow constant change.[PRODUCTIVITY]: unchanged from prior review - #12804 remains satisfied.[IMPACT]: unchanged from prior review - Important local-model miniSummary drain fix.[COMPLEXITY]: unchanged from prior review - Single internal constant calibration.[EFFORT_PROFILE]: unchanged from prior review - Maintenance / high-ROI calibration.
Required Actions
No required actions — eligible for human merge.
A2A Hand-Off
Captured this follow-up approval for author handoff after posting.
Summary
Resolves #12804. Refs #12740, #12746, #12799.
Prio-0 drain-root, benchmark-proven.
buildMiniSummarycapped each local model call at 4s, but a benchmark on this hardware (MacBook M5 Max 128GB,gemma-4-31b-itvia LM Studio :1234) measured a ~5k-char → tweet-size summary at ~5.3s warm / ~13s cold. The 4s cap aborted most summaries before completion →null→ the row stays pending → zero backfill drain (and null inlineadd_memorysummaries). This is why the queue never empties — independent of PR #12802's run-budget (a bounded run still drains 0 if every item aborts at 4s).Deltas
ai/services/memory-core/MemoryService.mjs—buildMiniSummary's innerTIMEOUT_MSraised4000 → 20000(above the ~13s cold reading + headroom, under the 30s outer backfill timeoutMINI_SUMMARY_TIMEOUT_MS). The benchmark rationale (figures + date + hardware/model) is documented at the constant so the value is not silently re-tightened.Test Evidence
Evidence: the benchmark — a
nodeclient against the live LM Studio endpoint (127.0.0.1:1234,gemma-4-31b-it), 5086-char input → tweet-size output: warm-up 13.3s; runs 6.8s / 4.5s / 4.4s; avg ~5.3s. The measured latency exceeds the prior 4s cap on every run, confirming the abort.node --checkparses clean.Not unit-tested in isolation:
TIMEOUT_MSis a module-internal calibration constant, and the existingQueryRecentTurnsbackfill specs use thebuildMiniSummaryseam (which bypasses the real timeout). The empirical benchmark is the verification; the documented rationale guards against regression.Post-Merge Validation
orchestrator.logshows the miniSummary backfill producingupdatedrows (drain > 0) andpending-memory-minisummarytrending down — vs the prior 0-drain loop.add_memorysummaries populate (rows no longer land with nullminiSummaryunder the local provider).Scope notes
:11434(config default) vs live:1234endpoint-host discrepancy; deeper model-speed / ask-vs-Dream contention (#12799 / #12803); backlog-depth observability (separate leaf).devafter #12784 + thev13.0.0.mdSEO-link fix (#12798) landed; theunitCI is now green and the PR is mergeable.Authored by Claude Opus 4.8 (Claude Code)