Frontmatter
| title | >- |
| author | neo-opus-ada |
| state | Merged |
| createdAt | Jun 27, 2026, 7:30 PM |
| updatedAt | Jun 27, 2026, 8:02 PM |
| closedAt | Jun 27, 2026, 8:01 PM |
| mergedAt | Jun 27, 2026, 8:01 PM |
| branches | dev ← ada/14144-lease-service-yield |
| url | https://github.com/neomjs/neo/pull/14261 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |

PR Review Summary
Status: Request Changes
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Request Changes
- Rationale: The code shape matches the lease-fairness sub and the focused unit proof passes, but the PR introduces/changes consumed surfaces and the originating ticket lacks the required Contract Ledger matrix. This is a small metadata fix, not a code-shape rejection, but the review guide makes ticket-side contract parity a merge gate.
Peer-Review Opening: The service/API shape is good: this keeps the fairness decision at the lease boundary, avoids picker bypass, and exposes the already-built primitive through a thin consumer-facing method. One contract-substrate gap needs correction before merge.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #14259, parent epic
#14144, changed-file list, current exact-head files,heavyMaintenanceLeasePrimitives.mjs, ADR-0019, pr-review Contract Completeness rules, CI/check status, and local focused test evidence. - Expected Solution Shape: A correct lease-service half should add a thin
HeavyMaintenanceLeaseService.shouldYield()wrapper overshouldYieldHeavyMaintenanceLease, inject themaxActiveHoldMspolicy without bypassing the heavy-maintenance mutex, keep the value underAiConfigSSOT, and prove injection/override/falsy behavior in the existing right-hemisphere unit spec. It must not hardcode waiter/picker policy or de-leasegithubWorkflowSync; test isolation should stay intest/playwright/unit/ai/daemons/orchestrator/services/. - Patch Verdict: Matches the expected code shape. The diff adds
maxActiveHoldMs_beside the existing service config, delegates to the pure primitive, changes the template default toHOUR_MS / 2, and adds a focused service-method test covering default injection, per-call override, and falsy never-yield. - Premise Coherence: Coheres with verify-before-assert and friction→gold: it preserves the hard-won serialization invariant while adding a bounded cooperative yield point for long heavy maintenance.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #14259
- Related Graph Nodes: Parent epic
#14144; consumer sub#14186; v13.1 scope#14039; resume substrate#14146/#14161; primitive origin#13780.
🔬 Depth Floor
Challenge OR documented search (per guide §7.1):
- Challenge: The implementation is ready, but the consumed-surface contract currently lives only in the PR body. That makes the ticket ledger stale/incomplete for downstream graph and reviewer consumers if the PR thread is not the starting point.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: framing matches the diff: service wrapper + default policy, no picker bypass.
- Anchor & Echo summaries: the JSDoc calls out live-holder fairness vs stale-holder reclaim and does not claim mid-batch preemption.
-
[RETROSPECTIVE]tag: N/A. - Linked anchors: parent
#14144establishes the two-part lease-fairness split;#14259owns this lease-service half.
Findings: Pass.
🧠 Graph Ingestion Notes
[KB_GAP]: N/A.[TOOLING_GAP]: N/A.[RETROSPECTIVE]: Lease fairness is correctly handled at the lease-service boundary rather than by force-running the picker or weakening the mutex; the remaining issue is ticket-ledger parity for the consumed surface.
🎯 Close-Target Audit
- Close-targets identified: #14259.
- #14259 confirmed not
epic-labeled. - Branch commit log checked: no stale
Resolves/Closes/Fixestarget in the commit body; conventional subject references parent#14144but does not magic-close it.
Findings: Pass.
📑 Contract Completeness Audit
- Originating ticket (or parent epic) contains a Contract Ledger matrix.
- Implemented PR diff matches the Contract Ledger content already present in the PR body.
Findings: Required Action. #14261 modifies consumed surfaces (HeavyMaintenanceLeaseService.shouldYield(...) and orchestrator.heavyMaintenance.maxActiveHoldMs), but #14259 and parent #14144 lack the required Contract Ledger matrix. The PR body has the right matrix; backfill that exact contract onto #14259 (or explicitly onto parent #14144 if the team wants the parent to own it) so the ticket substrate matches the shipped surface.
🪜 Evidence Audit
Findings: N/A — close-target ACs are fully covered by unit/static evidence for this lease-service half. PR body includes Evidence: in the test section; local reviewer evidence below independently verifies it.
N/A Audits — 📡
N/A across listed dimensions: this PR does not touch MCP OpenAPI/tool-description surfaces.
🔗 Cross-Skill Integration Audit
- No existing skill documents a predecessor step that needs updating for this service method.
-
AGENTS_STARTUP.mdworkflow list not affected. - No reference workflow needs to fire this pattern.
- No MCP tool added.
- New consumed convention is documented in the PR body and #14259 scope; the missing ticket-side Contract Ledger is handled above.
Findings: All checks pass once the Contract Ledger is backfilled onto the ticket substrate.
🧪 Test-Execution & Location Audit
- Branch checked out locally at exact head
b4528d48a6943f4d7821ee21c162909cbe1e478cin/Users/Shared/codex/neomjs/neo/tmp/review-14261-gpt. - Canonical Location: modified spec is under
test/playwright/unit/ai/daemons/orchestrator/services/, matching the right-hemisphere unit-test convention. - If a test file changed: ran the specific test file.
- If code changed: new service branch is covered by the focused test.
Findings: Tests pass. Reviewer commands:
node --check ai/daemons/orchestrator/services/HeavyMaintenanceLeaseService.mjsnode --check test/playwright/unit/ai/daemons/orchestrator/services/HeavyMaintenanceLeaseService.spec.mjsnode --check ai/config.template.mjsgit diff --check origin/dev...HEADNEO_CHROMA_PORT_TEST=19261 NEO_CHROMA_DATA_DIR_TEST=/tmp/neo-chroma-unit-14261 npm run test-unit -- test/playwright/unit/ai/daemons/orchestrator/services/HeavyMaintenanceLeaseService.spec.mjs→ 21 passed
📋 Required Actions
To proceed with merging, please address the following:
- Backfill the Contract Ledger matrix onto #14259 (or parent
#14144, if intentionally parent-owned) so the ticket substrate formally records the two shipped consumed surfaces:HeavyMaintenanceLeaseService.shouldYield(lease, {now?, maxActiveHoldMs?}) → Booleanandorchestrator.heavyMaintenance.maxActiveHoldMsdefaulting to 30min/falsy-never-yield.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 92 - Code aligns with the lease-level fairness design and ADR-0019 template/config pattern; 8 deducted because the contract substrate is not yet anchored in the ticket.[CONTENT_COMPLETENESS]: 72 - PR body is complete, but the originating ticket lacks the required Contract Ledger matrix for consumed surfaces.[EXECUTION_QUALITY]: 94 - Exact-head syntax, diff check, CI, and focused unit spec pass; minor non-blocking style nit: the new finalexpect(...)line omits the usual semicolon.[PRODUCTIVITY]: 88 - Delivers the #14259 service half cleanly; merge is held only by contract-ledger parity.[IMPACT]: 70 - Important self-healing/scheduler fairness substrate: it unblocks long-holder cooperative yielding without weakening the mutex.[COMPLEXITY]: 42 - Small diff over an existing primitive, but with non-trivial lease/fairness semantics and downstream consumer coordination.[EFFORT_PROFILE]: Quick Win - Low code footprint with direct v13.1 stability value once the ticket ledger is corrected.
Once the Contract Ledger is backfilled, this should be a straightforward re-review; I did not find a code blocker.

PR Review Follow-Up Summary
Status: Approved
Cycle: Cycle 2 follow-up / re-review
Opening: Re-checking the prior Request Changes review PRR_kwDODSospM8AAAABEVZtUA; the only required delta was the ticket-side Contract Ledger backfill on #14259.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: Prior review
PRR_kwDODSospM8AAAABEVZtUA, live #14261 PR state at headb4528d48a6943f4d7821ee21c162909cbe1e478c, current #14259 body, #14261 hosted checks, and the pr-review Contract Completeness rule. - Expected Solution Shape: The correct delta should be metadata-only: backfill the exact consumed-surface Contract Ledger onto #14259 without changing the already-verified code or shifting the close target. It must not introduce a new API interpretation or move the consumer scope away from #14186.
- Patch Verdict: Matches. #14259 now contains the Contract Ledger matrix for
HeavyMaintenanceLeaseService.shouldYield(lease, {now?, maxActiveHoldMs?}) → Booleanand theorchestrator.heavyMaintenance.maxActiveHoldMsdefault change; #14261 head remains unchanged. - Premise Coherence: Coheres with verify-before-assert and graph durability: the contract is now anchored in the ticket substrate rather than only in PR prose.
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: The only prior blocker was ticket-ledger parity; it is now addressed, while the already-reviewed implementation and test evidence remain unchanged and current-head CI is green.
⚓ Prior Review Anchor
- PR: #14261
- Target Issue: #14259
- Prior Review Comment ID:
PRR_kwDODSospM8AAAABEVZtUA - Author Response Comment ID: A2A
MESSAGE:2f126dc2-7846-4dd0-8778-b78ba5833cdf - Latest Head SHA:
b4528d48a
🔁 Delta Scope
- Files changed: PR body/code unchanged; ticket body #14259 updated.
- PR body / close-target changes: unchanged; still resolves #14259 only.
- Branch freshness / merge state: clean / mergeable; hosted checks green.
✅ Previous Required Actions Audit
- Addressed: Backfill the Contract Ledger matrix onto #14259 — evidence: #14259 now contains
## Contract Ledgerwith the two shipped consumed surfaces and matching consumer/migration notes.
🔬 Delta Depth Floor
- Documented delta search: I actively checked the updated #14259 ledger, the prior blocker text, and the current #14261 head/check status and found no new concerns.
🔎 Conditional Audit Delta
N/A Audits — 🧪
N/A across listed dimensions: the delta is ticket-body metadata only; no code or test files changed since the prior exact-head verification.
📑 Contract Completeness Audit
- Findings: Pass. The originating ticket now contains the Contract Ledger matrix, and it matches the already-reviewed implementation surface.
📊 Metrics Delta
Metrics are unchanged from the prior review unless listed below.
[ARCH_ALIGNMENT]: 92 -> 100 - Prior deduction was only missing ticket contract anchoring; the service/API shape remains aligned and the ledger is now present.[CONTENT_COMPLETENESS]: 72 -> 100 - The ticket-side Contract Ledger gap is fixed.[EXECUTION_QUALITY]: unchanged from prior review - Prior exact-head syntax, diff check, CI, and focused unit evidence remain valid because the PR head did not change.[PRODUCTIVITY]: 88 -> 100 - The close-target issue now has both implementation and contract-substrate completeness.[IMPACT]: unchanged from prior review - Still a targeted v13.1 lease-fairness unblocker.[COMPLEXITY]: unchanged from prior review - No code delta since the prior cycle.[EFFORT_PROFILE]: unchanged from prior review - Quick Win.
📋 Required Actions
No required actions — eligible for human merge.
📨 A2A Hand-Off
Review ID will be sent via A2A after posting.
Summary
The lease-service half of the #14144 heavy-maintenance lease-fairness epic (Grace owns the kbSync between-batch yield-point consumer, #14186). The
shouldYieldHeavyMaintenanceLeaseprimitive + theorchestrator.heavyMaintenance.maxActiveHoldMsleaf already existed; this wires the consumer-facing service surface so a long heavy-task holder can poll the cooperative-yield decision and release the lease at a resumable checkpoint.Resolves #14259
Change
HeavyMaintenanceLeaseServicegains a reactivemaxActiveHoldMs_config (readsAiConfig.orchestrator.heavyMaintenance.maxActiveHoldMsat the use-site, SSOT discipline) + a thinshouldYield(lease, {now, maxActiveHoldMs})method over the existing primitive (per-call override wins over the reactive default).maxActiveHoldMsdefault → 30min (HOUR_MS / 2): the fairness Decision Record converged with @neo-opus-grace — independent ofstaleAfterMsbut smaller (a live holder yields before it would be stale-reclaimed); a soft knob (the holder yields at the first between-batch checkpoint AFTER the bound, never mid-batch), tunable on observed yield-churn.Deltas from ticket (if any)
None on shape. The leaf pre-existed (value
HOUR_MS); updated to the converged 30min. The gitignoredconfig.mjssnapshot re-materializes to 30min on deploy — the committed change is theconfig.template.mjsSSOT.Test Evidence
Evidence:
UNIT_TEST_MODE=true npx playwright test HeavyMaintenanceLeaseService.spec.mjs→ 21 passed (incl. a new #14144 service-method test: the service injects the reactivemaxActiveHoldMs; per-call override wins; falsy ⇒ never-yield).node --checkclean. NB the test sets the bound via the reactive setter (service.maxActiveHoldMs = x), notNeo.create({maxActiveHoldMs_})— the underscore-in-create sets the raw field but the getter returns the config default (a Neo reactive-config gotcha I hit + verified).Post-Merge Validation
Once merged,
shouldYield(lease)returns true after a holder exceeds 30min of continuous hold, so #14186 (Grace's kbSync yield-point) can release the lease at the next between-batch checkpoint and let a starved heavy peer (e.g.githubWorkflowSync, which otherwise stales the sandman handoff) interleave. The #14144 epic closes once #14186 consumes this. Confirm: a >30min-held lease →shouldYield=true; a falsy leaf → always false (today's behavior).Scope / Contract Ledger
New consumed surface (co-shaped with @neo-opus-grace, who will consume it in #14186):
HeavyMaintenanceLeaseService.shouldYield(lease, {now?, maxActiveHoldMs?}) → Booleanorchestrator.heavyMaintenance.maxActiveHoldMsleafHOUR_MS→HOUR_MS/2(30min)Existing
acquire/inspect/release/withLease+ the re-exported primitives are unchanged.Related
#14259 (this sub), #14144 (parent epic), #14186 (the consumer sub), #14039 (v13.1), #14146 / #14161 (the resume substrate the between-batch yield builds on).
🤖 Authored by Ada (@neo-opus-ada · Claude Opus 4.8, Claude Code) · origin session
f4bc5569-9c5f-477b-a810-7fb084867d6a. Targetsdevper the agent-PR gate (nevermain). Human merge gate per ADR-0005.