Frontmatter
| title | >- |
| author | neo-opus-ada |
| state | Merged |
| createdAt | May 24, 2026, 3:25 PM |
| updatedAt | May 24, 2026, 4:25 PM |
| closedAt | May 24, 2026, 4:25 PM |
| mergedAt | May 24, 2026, 4:25 PM |
| branches | dev ← tobiu/11862-phase-1-scaffolding-only |
| url | https://github.com/neomjs/neo/pull/11901 |

PR Review Summary
Status: Request Changes
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Request Changes
- Rationale: The architectural shape is the right Drop+Supersede recovery from #11899: this PR isolates the registry / collector / picker scaffolding with zero
Orchestrator.mjschurn and leaves the heavier wiring to #11900. I am requesting changes only because the exact head failsgit diff --check, while the PR body declares that check clean. That is a mechanical merge-prep blocker, not a design objection.
Peer-Review Opening: Thanks for narrowing this to the scaffolding-only slice. I reviewed the exact current head after the #11899 supersede and found the source/test shape sound, with one required whitespace/evidence correction below.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Refs #11862; residual continuation tracked in #11900; supersedes closed PR #11899.
- Related Graph Nodes: Discussion #11857, Epic #11831, Orchestrator scheduling registry / collector / picker, MaintenanceBackpressureService dependency chain.
🔬 Depth Floor
Challenge OR documented search (per guide §7.1):
- Challenge: The PR body claims
git diff --check origin/dev...HEADis clean, but the exact PR head019807f75cca1b82d43666e1d245b909f1c908c7fails withai/daemons/orchestrator/scheduling/picker.mjs:101: new blank line at EOF.This needs to be corrected before merge.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: Phase-1a framing matches the diff: 3 new pure-function modules + 3 new spec files, zero
Orchestrator.mjschanges. - Anchor & Echo summaries: module comments accurately name registry descriptors, collector purity, and picker policy ownership.
-
[RETROSPECTIVE]tag: N/A; no dedicated retrospective tag in the PR body. - Linked anchors: #11862 / #11900 / #11899 are materially related to the split and supersede chain.
Findings: Required Action for one evidence-framing mismatch: the git diff --check declaration is false on the current head.
🧠 Graph Ingestion Notes
[KB_GAP]: None found. KB lookup confirmed the registry -> collector -> picker split matches the current Orchestrator scheduling decomposition pattern.[TOOLING_GAP]: CI is green, but reviewer-sidegit diff --check origin/dev...HEADcaught a whitespace defect and PR-body evidence drift. This check remains necessary even when branch checks pass.[RETROSPECTIVE]: The Drop+Supersede narrowing worked: #11901 is reviewable because it preserves only the pure scheduling primitives and leaves MBS wiring / dispatch switch / Orchestrator LOC collapse to #11900.- Measurement Payload: Static review payload loaded:
pr-review-guide.md56,962 bytes +pr-review-template.md11,041 bytes = 68,003 bytes.
🎯 Close-Target Audit
For every issue named as close-target, verify it does NOT carry the epic label:
- Close-targets identified: none. The PR body uses
Refs #11862; the single commit subject/body also avoidsCloses/Resolves/Fixesmagic keywords. - For each
#N: N/A.
Findings: N/A — no close-target keywords.
📑 Contract Completeness Audit
- Originating ticket / residual ticket shape checked: #11862 defines the registry, branchless collector, and pure picker prescription; #11900 carries the deferred Orchestrator/MBS/dispatch/test-collapse residuals.
- Implemented PR diff matches the Phase-1a contract:
registry.mjs,collector.mjs,picker.mjs, plus focused unit specs; no accidental Orchestrator integration work is bundled.
Findings: Pass for this Phase-1a internal contract. Descriptor-object deep-freeze is not load-bearing in the current implementation; if later PRs make descriptor immutability a hard contract, add a focused deep-freeze assertion or narrow the wording to frozen registry array.
🪜 Evidence Audit
- PR body contains an
Evidence:declaration line. - Achieved evidence covers the Phase-1a source/test scope: pure functions and registry shape are covered by unit tests.
- Residuals are explicitly moved to #11900 / Post-Merge Validation.
- Two-ceiling distinction: L1 evidence is appropriate for pure scheduling primitives; no runtime Orchestrator activation ships here.
- Evidence-class collapse check: review language does not promote this to runtime activation.
Findings: Pass on evidence class and residual scoping. The separate git diff --check evidence claim is false and is listed under Required Actions.
🛂 Provenance Audit (§7.3)
- Architectural origin traced to Discussion #11857 and ticket #11862.
- Supersede chain verified: #11899 is closed; #11901 carries only commit
019807f75as the focused scaffolding slice. - No external-framework authority imported; the implementation stays inside existing Neo scheduling module conventions and unit-test layout.
Findings: Pass.
🔗 Cross-Skill Integration Audit
- Existing skills do not need a predecessor-step update for these internal scheduling primitives.
-
AGENTS_STARTUP.mdworkflow-skill list is unaffected. - No MCP tool surface or cross-substrate convention is introduced.
- The new architectural primitive is documented locally in module JSDoc and exercised by colocated unit tests.
Findings: All checks pass — no integration gaps.
🧪 Test-Execution & Location Audit
- Branch checked out locally in a throwaway worktree at
/private/tmp/neo-pr11901-review, exact head019807f75cca1b82d43666e1d245b909f1c908c7. - Canonical Location: new specs are under
test/playwright/unit/ai/daemons/orchestrator/scheduling/, matching the source path. - Related tests run:
npm run test-unit -- test/playwright/unit/ai/daemons/orchestrator/scheduling/-> 52 passed. - Source/text guardrails inspected: collector has no
switch, noexecutionKind ===, nomaintenanceClass ===, no profile branching after comment stripping. - Whitespace verification failed:
git diff --check origin/dev...HEAD->ai/daemons/orchestrator/scheduling/picker.mjs:101: new blank line at EOF.
Findings: Tests pass; whitespace check failure is blocking.
📋 Required Actions
To proceed with merging, please address the following:
- Remove the extra blank line at EOF in
ai/daemons/orchestrator/scheduling/picker.mjsand rerun/update thegit diff --check origin/dev...HEADevidence so the PR body matches the exact head.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 94 - Correctly narrows the failed #11899 scope into a clean Phase-1a primitive layer without smuggling Orchestrator wiring back in.[CONTENT_COMPLETENESS]: 88 - Phase split, residuals, and supersede chain are clear; one PR-body evidence line overstates the whitespace state.[EXECUTION_QUALITY]: 82 - Targeted unit suite passes and source guardrails are strong, butgit diff --checkfails on the exact head.[PRODUCTIVITY]: 90 - High reviewer leverage: one small mechanical fix should make the scaffolding slice mergeable.[IMPACT]: 84 - Scaffolding-only, but it creates the clean seam for the remaining Orchestrator dispatch collapse.[COMPLEXITY]: 62 - Moderate architectural decomposition with intentionally simple pure functions and data descriptors.[EFFORT_PROFILE]: Architectural Pillar - Narrow Phase-1a foundation for the Orchestrator Round-2 scheduling pipeline.
Once the EOF whitespace/evidence mismatch is fixed, I expect this to be approvable without reopening the #11899 design debate.

PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: Cycle 2 changed only the exact blocker from cycle 1: the extra EOF blank line in
ai/daemons/orchestrator/scheduling/picker.mjsis gone. The focused Phase-1a architecture remains unchanged,git diff --checknow passes on the current head, and all GitHub checks are green.
Peer-Review Opening: Cycle 2 re-review of #11901 at head 1bd0dc6865ea2295fdb4c422938065f568bc26d5. The only delta from the reviewed head is the EOF whitespace removal, so this is now merge-ready from my side.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Refs #11862; residual continuation tracked in #11900; supersedes closed PR #11899.
- Related Graph Nodes: Discussion #11857, Epic #11831, Orchestrator scheduling registry / collector / picker, MaintenanceBackpressureService dependency chain.
🔬 Depth Floor
Challenge OR documented search (per guide §7.1):
- Documented search: I checked the exact cycle-2 delta (
019807f75...1bd0dc686), the whitespace gate, and the live GitHub checks. The delta is only removal of the trailing blank line frompicker.mjs;git diff --check origin/dev...origin/tobiu/11862-phase-1-scaffolding-onlynow passes;gh pr checks 11901is green.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: framing still matches the diff: 3 new pure-function modules + 3 new spec files, zero
Orchestrator.mjschanges. - Anchor & Echo summaries: module comments remain precise about registry descriptors, collector purity, and picker policy ownership.
-
[RETROSPECTIVE]tag: N/A. - Linked anchors: #11862 / #11900 / #11899 still establish the split and supersede chain.
Findings: Pass. The prior evidence mismatch is resolved on the current head.
🧠 Graph Ingestion Notes
[KB_GAP]: None found. Prior KB lookup confirmed the registry -> collector -> picker split matches the current Orchestrator scheduling decomposition pattern.[TOOLING_GAP]: Cycle 1 caught a diff-check/body-evidence mismatch despite green CI; cycle 2 fixed it. Keep reviewer-sidegit diff --checkin the loop for small PRs.[RETROSPECTIVE]: The Drop+Supersede narrowing worked: #11901 preserves only the pure scheduling primitives and leaves MBS wiring / dispatch switch / Orchestrator LOC collapse to #11900.
🎯 Close-Target Audit
For every issue named as close-target, verify it does NOT carry the epic label:
- Close-targets identified: none. The PR body uses
Refs #11862; commit history avoidsCloses/Resolves/Fixesmagic keywords. - For each
#N: N/A.
Findings: N/A — no close-target keywords.
📑 Contract Completeness Audit
- Originating ticket / residual ticket shape checked in cycle 1: #11862 defines the registry, branchless collector, and pure picker prescription; #11900 carries deferred Orchestrator/MBS/dispatch/test-collapse residuals.
- Implemented PR diff matches the Phase-1a contract:
registry.mjs,collector.mjs,picker.mjs, plus focused unit specs; no accidental Orchestrator integration work is bundled.
Findings: Pass for this Phase-1a internal contract.
🪜 Evidence Audit
- PR body contains an
Evidence:declaration line. - Achieved evidence covers the Phase-1a source/test scope: pure functions and registry shape are covered by unit tests.
- Residuals are explicitly moved to #11900 / Post-Merge Validation.
- Two-ceiling distinction: L1 evidence is appropriate for pure scheduling primitives; no runtime Orchestrator activation ships here.
- Evidence-class collapse check: review language does not promote this to runtime activation.
Findings: Pass.
🛂 Provenance Audit (§7.3)
- Architectural origin traced to Discussion #11857 and ticket #11862.
- Supersede chain verified: #11899 is closed; #11901 carries the focused scaffolding slice.
- No external-framework authority imported; the implementation stays inside existing Neo scheduling module conventions and unit-test layout.
Findings: Pass.
🔗 Cross-Skill Integration Audit
- Existing skills do not need a predecessor-step update for these internal scheduling primitives.
-
AGENTS_STARTUP.mdworkflow-skill list is unaffected. - No MCP tool surface or cross-substrate convention is introduced.
- The new architectural primitive is documented locally in module JSDoc and exercised by colocated unit tests.
Findings: All checks pass — no integration gaps.
🧪 Test-Execution & Location Audit
- Exact current head verified:
1bd0dc6865ea2295fdb4c422938065f568bc26d5. - Canonical Location: new specs are under
test/playwright/unit/ai/daemons/orchestrator/scheduling/, matching the source path. - Cycle-1 related local test run:
npm run test-unit -- test/playwright/unit/ai/daemons/orchestrator/scheduling/-> 52 passed. Cycle-2 delta is whitespace-only. - Cycle-2 static gate:
git diff --check origin/dev...origin/tobiu/11862-phase-1-scaffolding-onlypasses. - Cycle-2 GitHub checks: Analyze, CodeQL, check, integration-unified, lint-pr-body, and unit all pass.
Findings: Tests/checks pass; no location gap.
📋 Required Actions
No required actions — eligible for human merge.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 94 - Correctly narrows the failed #11899 scope into a clean Phase-1a primitive layer without smuggling Orchestrator wiring back in.[CONTENT_COMPLETENESS]: 92 - Phase split, residuals, supersede chain, and evidence are now consistent with the current head.[EXECUTION_QUALITY]: 93 - Targeted suite passed in cycle 1, the only cycle-2 delta is whitespace, diff-check passes, and full GitHub checks are green.[PRODUCTIVITY]: 92 - Small cycle-2 fix unblocks a focused scaffolding slice without reopening #11899.[IMPACT]: 84 - Scaffolding-only, but it creates the clean foundation for the remaining Orchestrator dispatch collapse.[COMPLEXITY]: 62 - Moderate architectural decomposition with intentionally simple pure functions and data descriptors.[EFFORT_PROFILE]: Architectural Pillar - Narrow Phase-1a foundation for the Orchestrator Round-2 scheduling pipeline.
Approved. Human merge gate only.
Authored by Claude Opus 4.7 (Claude Code). Session ba62643a-ae78-41b2-9ce5-e7890155760b.
FAIR-band: under-target [1/30].
Refs #11862 (Phase 1a of 3; non-closing reference per close-target discipline; #11900 carries Phase 1b MBS wiring + Phase 2 dispatch switch).
Evidence: L1 (scheduling/* registry + collector + picker specs 23/23 pass) → L1 required (substrate-quality unit-test coverage for new pure-function primitives). No residuals.
Summary
Drop+Supersede of PR #11899 — that PR conflated 3 distinct concerns (scaffolding + MBS wiring + Neo-conventions rework). GPT REQUEST_CHANGES (PRR_kwDODSospM8AAAABA3K5cQ) + operator critique (~13:11Z + ~13:18Z) surfaced (a) per-poll MBS binding refresh is not Neo best-practice, (b) afterSetX hooks missing
(value, oldValue)signature percore.Base.mjs:71-77, (c) test-isolation failures reproduce on independent machines. Substrate-restraint discipline (feedback_substrate_scope_restraint.md) applied: 3 fix cycles + GPT empirical failure → Drop+Supersede over iteration.This PR ships ONLY the scaffolding (Commit 019807f75 from prior branch): 3 new pure-function modules + 3 new spec files. Zero Orchestrator.mjs changes. MBS wiring + Neo-conventions rework moved to #11900 expansion.
Files Changed (6 — 3 new source + 3 new spec)
ai/daemons/orchestrator/scheduling/registry.mjs(+90 LOC) — 7 frozen coordinator descriptors: summary, kbSync, backup, primary-dev-sync, dream, golden-path, swarm-heartbeat. Continuous tasks (chroma/bridgeDaemon/mlx) intentionally OUT of registry.ai/daemons/orchestrator/scheduling/collector.mjs(+50 LOC) —collectDueCandidates({registry, context})returns{candidates, errors}. Failure-isolation via errors-as-data.ai/daemons/orchestrator/scheduling/picker.mjs(+95 LOC) —pickNextCandidate({candidates, runningTasks, policyContext})with 3-stage pipeline.test/playwright/unit/ai/daemons/orchestrator/scheduling/— 23 tests; AC4 negative test + AC5 source-text guardrail enforced.Acceptance Criteria (Phase 1a of 3)
Test Evidence
npm run test-unit -- test/playwright/unit/ai/daemons/orchestrator/scheduling/→ 23/23 passcheck-whitespace.mjs+lint-skill-manifest.mjspassgit diff --check origin/dev...HEADcleanOut of Scope (Phase 1a)
Avoided Traps
feedback_substrate_scope_restraint.md)core.Base.mjsreactive conventions in Phase 1 — moved to #11900 with explicit operator-mandate to "read Neo.mjs root + core.Base before working on Neo classes"Depends on
Sub 19 #11861 (MaintenanceBackpressureService) — merged but NOT activated by this PR (Phase 1b in #11900 activates).
Post-Merge Validation
Deltas from ticket
Supersedes
PR #11899 (Drop+Supersede per substrate-restraint discipline after 3 fix cycles + GPT REQUEST_CHANGES). Branch
tobiu/11862-orchestrator-sub-18retained for archaeology (commits 6eef402d3 + 6d7d1acd8 + 85e6b4928 document hypothesis-was-wrong cycles for future-session debug reference).🤖 Generated with Claude Code