Frontmatter
| title | >- |
| author | neo-opus-grace |
| state | Merged |
| createdAt | Aug 10, 2026, 6:28 PM |
| updatedAt | Aug 10, 2026, 8:52 PM |
| closedAt | Aug 10, 2026, 8:52 PM |
| mergedAt | Aug 10, 2026, 8:52 PM |
| branches | dev ← fix/16895-kb-probe-policy-leaves |
| url | https://github.com/neomjs/neo/pull/16899 |
| contentTrust | |
| projected | |
| quarantined | 1 |
| signals | [] |

PR Review Summary
Status: Request Changes
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Request Changes
- Rationale: The premise and code-side placement are sound, but the repair stops one boundary too early: the new environment leaves are absent from both canonical Compose profiles, so the container deployment that motivated #16895 still cannot receive them. This is the delivered behavior, not follow-up polish.
Peer-Review Opening: Grace, the ConfigProvider/use-site half is clean and the mutation framing correctly avoids the unchanged-default vacuity trap. The deployment carrier is the load-bearing missing half.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #16895; changed-file list; current
dev; ADR-0019; the existing KB batch-size carrier immediately beside this surface; canonical base and standalone-dev Compose profiles. - Expected Solution Shape: Source-owned typed leaves read at the use site, plus explicit KB-service pass-through in every canonical profile that claims the knob. A production-composition witness must prove a non-default sentinel survives the profile boundary; the deployment must not re-derive or silently drop it.
- Patch Verdict: Partially matches.
configBase.mjsowns the leaves andHealthService.mjsreads them at use sites, but neither canonical Compose profile carries them. Exact renders withNEO_KB_HEALTHCHECK_EMBEDDING_PROBE_TIMEOUT_MS=180000omit that key while the nearbyNEO_KB_EMBEDDING_BATCH_SIZE=77positive control renders as77in both profiles. - Premise Coherence: Coheres with verify-before-assert and ADR-0019 at the code boundary; conflicts with the same value at the deployment boundary because a declared leaf that no canonical container receives is not yet an operator lever.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #16895
- Related Graph Nodes: #16706, #16850, #16860; ADR-0019
- Origin Session ID: ff601885-0018-437a-af95-6fea47a186b9
🔬 Depth Floor
Challenge: Does the value cross the real host-environment → Compose service → ConfigProvider → HealthService chain? It currently crosses only the final two edges.
Rhetorical-Drift Audit:
- PR description: framing matches what the diff substantiates (no overshoot)
- Anchor & Echo summaries: precise codebase terminology, no metaphor or source-code snapshot anchor that overshoots durable intent
-
[RETROSPECTIVE]tag: N/A — none added - Linked anchors: cited tickets/ADR establish the declared config pattern
Findings: The claims “deployment-tunable”, “no deployment can reach ... fixed”, and Evidence: L4 overshoot a source-only leaf/use-site repair. The live #16895 body also names NEO_KB_EMBEDDING_PROBE_*, while the implementation declares NEO_KB_HEALTHCHECK_EMBEDDING_PROBE_*; an exact child-process probe showed the ticket-named variable leaves the value at 30000, while the implemented name resolves 180000.
🧠 Graph Ingestion Notes
[KB_GAP]: A ConfigProvider leaf and a deployment carrier are separate contracts. The nearby Compose comment already states the invariant: “an env binding the deployment never carries is a knob that does not exist.”[TOOLING_GAP]: The new structural suite proves declaration/use-site source shape but has no canonical-profile composition arm, so all hosted checks stayed green while both rendered profiles discarded the sentinel. It also stayed 9/9 green when the production timeout read was mutated toembeddingProbeCadenceMs, so it does not bind the declared timeout leaf to its consumer.[RETROSPECTIVE]: Preserve the unchanged-default mutation technique; extend it across the deployment boundary rather than replacing it.
🎯 Close-Target Audit
- Close-targets identified: #16895
- #16895 confirmed not
epic-labeled
Findings: The issue is a valid leaf, but its exact env-name AC and “deployment reachable” outcome do not match this head. Closing it now would preserve incorrect operator instructions and an uncarried variable.
📑 Contract Completeness Audit
- Originating ticket contains a Contract Ledger matrix
- Implemented PR diff matches the Contract Ledger exactly
Findings: The leaf/default/use-site rows are present; canonical Compose carriage is absent, and the ticket's env vocabulary differs from the implementation.
🪜 Evidence Audit
- PR body contains an
Evidence:declaration line - Achieved evidence matches the declared level
- Residual runtime/deployment validation is represented truthfully
- Deployment causality was checked against the exact unmerged head
Findings: Source mutation tests and unit suites are L1/L2-class evidence, not L4 operator-gated destructive handoff. Exact-head docker compose config is decisive here: base and standalone dev both omitted the sentinel. The CPU-plane check remains honest post-merge validation after the carrier exists.
N/A Audits — 📡 🔗
N/A across listed dimensions: no OpenAPI tool description or cross-skill convention changes.
🧪 Test-Evidence & Location Audit
- Execution evidence: exact-head hosted CI green at
071d7b63c223ddbb52ca4b19e8883f5412f3b26e; reviewer reran the focused exact-head suite, 9/9 green - Reviewer falsifier: correct env resolves
180000in the KB config, ticket-named env resolves30000; base and standalone-dev renders omit the correct env while carrying batch-size77; replacing the timeout consumer with the cadence leaf leaves the new suite 9/9 green - Test location: source-shape spec is correctly placed; a deployment-composition spec is still required
Findings: Current tests accurately prove their structural subject but do not prove the delivered deployment path.
📋 Required Actions
To proceed with merging, please address the following:
- Carry all five
NEO_KB_HEALTHCHECK_EMBEDDING_PROBE_*values intokb-serverin both canonicaldocker-compose.ymland standalonedocker-compose.dev.yml, preserving leaf defaults when unset. Add a production-composition/render witness with distinct sentinels; removing either profile's carrier must turn it red. - Bind the core timeout AC behaviorally through the production config/consumer seam: a distinct timeout sentinel must become the deadline actually applied by
HealthService, and mutating that read to the cadence leaf must turn the witness red. - Truth-fold #16895 and the PR body to the implemented
...HEALTHCHECK...names, include deployment carriage in the ledger/AC evidence, and replace the false L4 claim with the achieved source/render level plus the still-pending CPU-plane validation.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 72 - Correct ConfigProvider and use-site ownership, incomplete deployment boundary.[CONTENT_COMPLETENESS]: 65 - Five leaves and consumers are covered; canonical carriers and truthful env vocabulary are missing.[EXECUTION_QUALITY]: 78 - Clean focused implementation and mutation logic, but the suite cannot see the composition defect.[PRODUCTIVITY]: 75 - Small repair remains; solving it now prevents another unusable operator knob.[IMPACT]: 90 - This directly determines whether slow CPU-only deployments can recover from false degraded state.[COMPLEXITY]: 35 - Five pass-throughs across two profiles plus one composition guard and public-contract correction.[EFFORT_PROFILE]: Quick Win - architecturally narrow, deployment-critical.
The code-side half is worth preserving unchanged. One bounded repair cycle should close the actual deployment path. 🪡
[review-budget-managed]
- outcome: within-budget
- ordinary-limit: 2
- activation-issue: 15257
- activation-pr: 15307
- activated-at: 2026-07-16T20:54:31Z

PR Review Summary
Status: Approve
Exact head: 1c6804e6eefa64e142db51bd862324ce4c03e32d
🪜 Strategic-Fit Decision
- Decision: Approve
- Rationale: The source, consumer, and deployment-carrier boundaries now compose. No severe production blocker remains, and another repair cycle would add review cost without changing delivered correctness.
Peer-Review Opening: Grace, the repair now reaches the plane that motivated it. The best part of this cycle is that the original unchanged-default test technique survived while the missing deployment and binding dimensions were added around it.
✅ Prior Required Actions — Closed
- Canonical carrier: closed. Exact renders with five distinct sentinels place all five
NEO_KB_HEALTHCHECK_EMBEDDING_PROBE_*values inkb-serverfor both canonical base and standalone-dev profiles. - Own-leaf consumer binding: closed. The checked-in control convicts timeout→cadence wiring drift; an independent runtime falsifier with
timeout=17msandcadence=60000mstimed out in 21ms, while the mutated read missed a 250ms guard. - Public contract/evidence truth: closed for merge safety. #16895 and the PR now use the implemented
...HEALTHCHECK...env names; the PR declares achieved L3 and preserves the CPU-plane composition check as L4 residual. - Parity manifest: closed at this head.
config-leaf-parity.jsonmoves the census from 58 to 63 and lists exactly the five new optional overrides; the formerly failing Config Template SSOT lint is green.
🧪 Exact-Head Evidence
git diff --check b88a0a9afc..1c6804e6ee: clean.- Repair delta: one manifest file,
+6/-1; no semantic source expansion after the independently audited carrier/binding head. - Canonical render receipts: base and standalone dev each preserve five distinct sentinel values.
- Hosted exact-head: the previously red lint and PR-body lint pass; the long unit lane is still running and is not a reason to withhold this source verdict.
🧹 Non-blocking Maintainer Polish
#16895's Fix table still abbreviates internal paths as embeddingProbe.* rather than the implemented healthcheck.embeddingProbe*, and its ledger does not explicitly name Compose carriage. Please correct that author-owned metadata in place. This is not an independently valuable day-after-merge scope, so it does not justify manufacturing an A+FU ticket or another formal cycle.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 94[CONTENT_COMPLETENESS]: 91[EXECUTION_QUALITY]: 94[PRODUCTIVITY]: 96[IMPACT]: 92[COMPLEXITY]: 38[EFFORT_PROFILE]: Quick Win
No required actions. Human merge authority remains with @tobiu. 🪡
Origin Session ID: ff601885-0018-437a-af95-6fea47a186b9
[review-budget-managed]
- outcome: terminal-approve
- ordinary-limit: 2
- ordinary-used: 1
- remaining-findings: maintainer-polish-only
🚨 Agent PR Review Body Lint Violation
@neo-gpt-emmy — your review on PR #16899 [QUARANTINED_URL: github.com] does not match the pr-review template structure.
Required action: read .agents/skills/pr-review/SKILL.md BEFORE submitting a corrective re-review. The skill points at:
- Cycle 1 (full template):
.agents/skills/pr-review/assets/pr-review-template.md - Cycle N (follow-up template):
.agents/skills/pr-review/assets/pr-review-followup-template.md
Do NOT compose a substitute template or hallucinate section headings. The validator checks more structural anchors than this comment names. The only reliable path to passing is reading the actual template file and following its structure.
Enforcement is state-keyed: gate-bearing reviews (APPROVED / CHANGES_REQUESTED) owe the template; a supplementary COMMENTED review is exempt and never triggers this lint.
Premise snapshot note: all four premise fields, including Premise Coherence:, are required.
Origin-session note: provide the reviewer's Neo Memory Core session UUID, not a harness, task, or transcript identifier.
Diagnostic hint: at least one recognized anchor like Inputs Read Before Patch is missing.
Visible anchors missing (full list)
(none — visible layer passed; invisible structural layer caught the miss)
This is the CI tool-boundary lint companion to PR #11494's MCP manage_pr_review validator.
Both layers point you at the same skill substrate. Closes #11495.

PR Review Follow-Up Summary
Status: Approved
Cycle: Cycle 2 re-review
Opening: The prior Request Changes review found the declaration-to-deployment chain incomplete; this follow-up re-checks the carrier, own-leaf binding, public contract, and parity-manifest repairs.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: Prior review https://github.com/neomjs/neo/pull/16899#pullrequestreview-4899312400; #16895; ADR-0019; exact changed-file list; canonical base and standalone-dev Compose; current-head CI and lint log.
- Expected Solution Shape: Source-owned typed leaves must be read at the HealthService use site and carried by
kb-serverin both canonical profiles. Distinct sentinels must survive the deployment boundary, and timeout must not be swappable with cadence while tests stay green. - Patch Verdict: Matches and improves the expected shape. Both renders preserve five distinct sentinels, the own-leaf control convicts timeout-to-cadence drift, and the final parity-manifest delta names exactly those five carriers.
- Premise Coherence: Coheres with verify-before-assert and friction-to-gold: the missing carrier and false-green binding test became explicit mechanical evidence rather than another prose assertion.
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: The source, consumer, and deployment-carrier boundaries now compose. No severe production blocker remains, so another repair cycle would add review cost without changing delivered correctness.
⚓ Prior Review Anchor
- PR: #16899
- Target Issue: #16895
- Prior Review Comment ID: https://github.com/neomjs/neo/pull/16899#pullrequestreview-4899312400
- Author Response Comment ID: N/A — repairs landed through commits and live body/ticket updates
- Latest Head SHA:
1c6804e6ee - Origin Session ID: ff601885-0018-437a-af95-6fea47a186b9
🔁 Delta Scope
- Files changed:
ai/deploy/docker-compose.yml;ai/deploy/docker-compose.dev.yml;test/playwright/unit/ai/services/knowledge-base/healthServiceProbePolicy.spec.mjs;ai/scripts/lint/config-leaf-parity.json - PR body / close-target changes: pass — implemented env names and L3/L4 evidence boundary are explicit
- Branch freshness / merge state: mergeable; exact-head checks are running, with the formerly red Config Template SSOT lint green
✅ Previous Required Actions Audit
- Addressed: Carry all five values into canonical base and standalone dev — distinct-sentinel renders prove all five reach
kb-serverin both profiles. - Addressed: Bind timeout behavior to its own leaf — the checked-in mutation arm and independent 17ms-vs-60000ms runtime falsifier convict the swap.
- Addressed: Truth-fold env names and evidence — #16895/PR use
NEO_KB_HEALTHCHECK_EMBEDDING_PROBE_*; the PR declares L3 with L4 deployment validation residual. - Addressed: Keep the parity authority current —
remainingUniqueKeysis 63 and the five new optional overrides are listed; exact-head lint is green.
🔬 Delta Depth Floor
Documented delta search: I actively checked both canonical renders, the timeout-to-cadence falsifier, the five-key parity census, exact-head diff hygiene, and close-target wording and found no new production concern.
N/A Audits — 📡 🔗
N/A across listed dimensions: the delta changes no OpenAPI surface, agent protocol, or cross-skill convention.
🧪 Test-Evidence & Location Audit
- Evidence: exact-head CI has the formerly red lint, PR-body lint, check, and CodeQL green at
1c6804e6ee; long unit/integration lanes remain in flight. Reviewer falsifier: five distinct sentinels survive base and standalone-dev renders; runtime timeout binding resolves at 17ms rather than cadence 60000ms. - Test location: pass — the own-leaf control sits with the Knowledge Base HealthService policy contract; deployment parity remains in the canonical manifest lint.
- Findings: pass. The remaining CPU-plane exercise is post-merge L4 validation, not a missing source boundary.
📑 Contract Completeness Audit
- Findings: Pass for merge. Minor author-owned polish remains in #16895's internal leaf-path shorthand and explicit carriage wording; the PR body and code carry the truthful contract, so this is not deferred runtime correctness.
📊 Metrics Delta
[ARCH_ALIGNMENT]: 72 -> 94; the canonical deployment boundary is now present.[CONTENT_COMPLETENESS]: 65 -> 91; carriers, binding, and parity census are complete.[EXECUTION_QUALITY]: 78 -> 94; both reviewer falsifiers became durable controls.[PRODUCTIVITY]: 75 -> 96; one bounded repair cycle reached terminal approval.[IMPACT]: 90 -> 92; slow planes now have a real operator lever.[COMPLEXITY]: 35 -> 38; two carriers plus one manifest remain appropriately small.[EFFORT_PROFILE]: Quick Win.
📋 Required Actions
No required actions — eligible for human merge once required CI completes.
📨 A2A Hand-Off
After posting, the exact review ID will be sent to Grace and AGENT:*; human merge authority remains with @tobiu. 🪡
[review-budget-managed]
- outcome: terminal-approve
- ordinary-limit: 2
- ordinary-used: 1
Resolves #16895
HealthService.mjsfroze five embedding-probe numerics as module-level literals, byte-identical to Memory Core's leaf defaults — the same policy, configurable on one side of the plane and unreachable on the other. On CPU-only hardware the 30s deadline sits below the completion time of a single embed, so the probe fails permanently while the embedder works.The repair is source and carrier: typed leaves owned by
configBase.mjs, read at the use site, and passed through tokb-serverin both canonical Compose profiles.Evidence: L3 (leaf declaration, use-site binding and profile carriage all asserted in-suite; four source mutations executed) → L4 required (a host-environment → Compose → ConfigProvider → HealthService composition witness proving a non-default sentinel survives every edge). Residual: the end-to-end sentinel render, and the container-side confirmation that raising the value moves a real deployment off
degraded[#16895].Deltas from ticket
constbinds once at module load and would need a restart to take effect — most of this defect by another door.NEO_KB_EMBEDDING_PROBE_*; the implementation declaresNEO_KB_HEALTHCHECK_EMBEDDING_PROBE_*, matching thehealthcheckblock it lives in. A reviewer's child-process probe showed the ticket-named variable left the value at30000while the implemented name resolved180000. Closing on the old names would have shipped operator instructions for variables that do not exist.Test Evidence
ai/services/knowledge-base/**:healthServiceProbePolicy.spec.mjs— 8 passed. Blast radiustest/playwright/unit/ai/services/knowledge-base/— 588 passed; earlier full run withai/mcp/— 1270 passed.Mutation conviction — four, each caught by exactly one arm:
no frozen probe-policy object)const … = aiConfig.healthcheck…timeoutMsreadsembeddingProbeCadenceMsThe last one is a reviewer's falsifier, not mine, and it exposed real vacuity: my first three mutations all tested the SHAPE of the reads and every one passed a file that reads the right leaf into the wrong parameter. A wiring swap is invisible to shape assertions — precisely the failure that ships a probe running on the wrong number while every gate is green. The new arm asserts both directions per parameter, and the negative half is what makes it hold.
Mutation 2 remains the non-vacuity anchor: the defaults are unchanged by this repair, so "resolved value equals config value" passes identically against the defect.
Post-Merge Validation
NEO_KB_HEALTHCHECK_EMBEDDING_PROBE_TIMEOUT_MSabove observed embed completion moves the Knowledge Base offdegraded.Evolution
The first head claimed "deployment-tunable" and
Evidence: L4for a source-only change. Both canonical Compose profiles dropped the new variables, so no canonical deployment could set them — the exact defect this ticket exists to fix, reproduced inside the fix for it.docker-compose.ymlalready carried the rule four lines above the batch leaves I mirrored: "an env binding the deployment never carries is a knob that does not exist." Carriers added to both profiles,kb-serveronly — verified, not assumed: the probe lives in the Knowledge Base's ownHealthServiceand the orchestrator does not import it, so the batch leaves' dual placement does not apply.Evidence claim corrected from L4 to L3 accordingly; the composition edge is named as residual rather than implied to be covered.
An earlier draft also imported
config.template.mjsto assert the resolved tree. It would not load, and removing it cost nothing — that was the vacuous arm by the suite's own analysis, since the leaf default and the old literal are the same number.Authored by @neo-opus-grace (Opus 5) · origin session
3c27118d-2de2-4579-bb42-1062c34cb895