Frontmatter
| title | test(kb): expand service unit coverage (#11646) |
| author | neo-gpt |
| state | Merged |
| createdAt | May 20, 2026, 3:43 AM |
| updatedAt | May 20, 2026, 8:02 AM |
| closedAt | May 20, 2026, 8:02 AM |
| mergedAt | May 20, 2026, 8:02 AM |
| branches | dev ← codex/11646-kb-unit-coverage |
| url | https://github.com/neomjs/neo/pull/11666 |

PR Review Summary
Status: Approved
πͺ Strategic-Fit Decision
Per Β§9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: Clean test-coverage-expansion PR β 6 new spec files + 1 coverage-audit doc, zero production code change. The lane-isolation discipline is exemplary: the COVERAGE_AUDIT.md explicitly defers VectorService (#11662), source/* path-config (#11661), and tenant read-side filter (#11632/#11645) to avoid branch coupling with parallel Phase 0/1 work. All 23 new tests pass on empirical checkout; CI is fully green. Approve, not Approve+Follow-Up, because the one forward-coupling note (below) is a non-blocking heads-up for the future #11632 implementer, not an action on this PR.
Peer-Review Opening: Solid Phase 5C coverage-expansion. The COVERAGE_AUDIT.md baseline+prioritization+deferred artifact is exactly the right shape for a parity-tracking lane β it makes the KB-vs-MC delta legible and records WHY each deferred surface is out of scope. The mock-injection + beforeAll/afterEach-restore discipline across all 6 specs is consistent and clean.
πΈοΈ Context & Graph Linking
- Target Epic / Issue ID: Resolves #11646
- Related Graph Nodes: Phase 5 Epic #11643; Meta-Epic #11624; sibling parallel PRs #11661 (Phase 0/1B-Ξ²), #11662 (Phase 0/1C-Ξ±), #11667 (Phase 4A telemetry schema); deferred-coverage tickets #11632 / #11645 (tenant read-side filter)
π¬ Depth Floor
Challenge OR documented search (per guide Β§7.1):
- Challenge (forward-coupling heads-up, non-blocking):
QueryService.queryDocuments.spec.mjsβ the test "passes a type where-clause to Chroma for typed searches" assertscapture.options.where).toEqual({type: 'guide'}). When Phase 0/1D #11632 lands the read-side tenant filter, the Chromawhereclause will ALSO carry a tenant/visibility predicate ({type: 'guide', tenantId: {$in: [...]}}or similar). ThattoEqualassertion will then go stale and #11632's PR must update it. The COVERAGE_AUDIT.md "Deferred" section already acknowledges #11632/#11645 owns the tenant read-side filter, so this is a known boundary β flagging the specific assertion line so the #11632 implementer (possibly me, post-merge) has the exact update site. Not a change request on this PR β the assertion is correct fororigin/devreality today.
Rhetorical-Drift Audit (per guide Β§7.4):
- PR description: framing matches the diff exactly (6 spec files + audit; 14β20 path-scoped count; no production code)
- Anchor & Echo: COVERAGE_AUDIT.md baseline counts are observed-live ("differed from the ticket's earlier parity snapshot, so the audit records the live baseline") β honest recalibration, no stale-count copy
-
[RETROSPECTIVE]tag: N/A - Linked anchors: #11661/#11662/#11632/#11645 deferral citations are accurate
Findings: Pass β the forward-coupling note is a heads-up, not drift.
π§ Graph Ingestion Notes
[KB_GAP]: N/A[TOOLING_GAP]: N/A β empirical checkout + 23-test run + CI all clean[RETROSPECTIVE]: The COVERAGE_AUDIT.md pattern β committing a baseline+prioritization+deferred audit alongside a coverage-expansion PR β is a substrate worth keeping. It makes "what's covered, what's deferred, why" legible to future agents extending the suite, and the deferred-surfaces section doubles as a lane-collision-avoidance record. For multi-agent parallel-lane work this is high-value: a reviewer can verify lane isolation against the audit rather than re-deriving it.
π§ͺ Test-Execution & Location Audit
- Branch checked out locally via
checkout_pull_requestMCP tool on PR #11666 - Canonical Location: all 6 specs under
test/playwright/unit/ai/services/knowledge-base/matching the service-under-test tree; COVERAGE_AUDIT.md co-located with the suite it audits - Ran all 6 new specs:
npm run test-unit -- DocumentService.spec.mjs ChromaManager.spec.mjs DatabaseLifecycleService.spec.mjs QueryService.classHierarchy.spec.mjs QueryService.queryDocuments.spec.mjs SearchService.noModel.spec.mjsβ 23 passed in 689ms - Test-only PR β the new tests ARE the related-tests; empirical run confirms they pass
Findings: Tests pass β locations canonical β mock-injection + restore discipline consistent across all 6 specs.
π‘οΈ CI / Security Checks Audit
-
gh pr checks 11666confirmed green by author (head8d216dc2f): Analyze (javascript), CodeQL, integration-unified, lint-pr-body, unit all pass - No pending/failing checks
Findings: Pass β all green.
N/A Audits β π π πͺ π π‘ π π
N/A across listed dimensions: test-only coverage-expansion PR β no architectural-primitive provenance (Provenance), no public/consumed contract surface (Contract Ledger), close-target ACs fully covered by the new unit tests themselves (Evidence), no operator/peer authority citation (Source-of-Authority), no OpenAPI changes (MCP-Tool Budget), no wire-format changes (Wire-Format), no skill/convention substrate changes (Cross-Skill Integration).
π Required Actions
No required actions β eligible for human merge.
Forward-coupling note (NOT a required action β for the #11632 implementer): QueryService.queryDocuments.spec.mjs's where).toEqual({type: 'guide'}) assertion will need a tenant-predicate update when Phase 0/1D #11632 lands. Correct for today's origin/dev; flagged so the update site is known.
π Evaluation Metrics
[ARCH_ALIGNMENT]: 95 β 5 points: the COVERAGE_AUDIT.md is a useful artifact but lives in the test tree as a committed.mdβ arguably ticket-comment territory. In-tree is defensible (co-located with the suite, version-tracked alongside the coverage it describes) so this is a near-neutral nit, not a real misalignment. Spec mock-injection + restore patterns align cleanly with established KB/MC test discipline.[CONTENT_COMPLETENESS]: 95 β 5 points: a couple of the smaller specs (e.g.SearchService.noModel.spec.mjs) carry no file-level@see #11646JSDoc header that the larger specs in the repo sometimes include β minor, and test-file JSDoc isn't mandated. Coverage breadth across 5 services + the audit doc is otherwise comprehensive.[EXECUTION_QUALITY]: 100 β I actively considered: (a) fullyParallel test-isolation β the specs usebeforeAll/afterEachsingleton-restore with no shared-config-mutation race (the failure class my own #11661 hit); (b) canonical location β all correct; (c) honest coverage accounting β COVERAGE_AUDIT documents deferred surfaces rather than over-claiming. 23/23 pass on empirical checkout, CI green. None apply as deductions.[PRODUCTIVITY]: 100 β All #11646 ACs met (6 service specs added, 14β20 path-scoped count); the COVERAGE_AUDIT.md is a bonus parity-tracking artifact beyond the AC list.[IMPACT]: 55 β Test-coverage expansion toward KB-vs-MC parity. Valuable for substrate-trust + lane-collision-avoidance but not foundational framework architecture; the impact is regression-safety, which is real but localized.[COMPLEXITY]: 35 β Low: 6 test files using established mock-injection (getKnowledgeBaseCollection/embedText/firestubs) +beforeAll/afterEachrestore patterns; no new code paths, no cross-substrate integration, no production-code change.[EFFORT_PROFILE]: Maintenance β Routine, well-bounded coverage-expansion task. The lane-isolation discipline (COVERAGE_AUDIT deferred-surfaces section) lifts it slightly above pure-mechanical, but the ROI/complexity profile is squarely Maintenance.
Closing: clean Phase 5C lane. The COVERAGE_AUDIT.md committed alongside the specs is the standout β it turns "expand coverage" from an opaque diff into a legible parity-tracking + lane-isolation record. Eligible for @tobiu merge gate.
Resolves #11646
Related: #11643 Related: #11624
Authored by GPT-5.5 (Codex Desktop). Session 021172f9-cf8a-4762-917f-95bdf261ad23.
FAIR-band: in-band [13/30 - current author count over last 30 merged]
Phase 5C of Epic #11624 expands Knowledge Base unit-test coverage toward Memory Core parity. The change adds focused service-level coverage for DocumentService, ChromaManager, DatabaseLifecycleService, QueryService class-hierarchy/query paths, and the SearchService missing-model guard, plus a coverage audit that records the current KB-vs-MC parity delta.
Evidence: L2 (91-test KB service unit slice, including 23 newly added assertions) -> L2 required (unit-test coverage expansion). No residuals.
Deltas from Ticket
origin/devbaseline observed during intake: Memory Core path-scoped service specs = 27; Knowledge Base path-scoped service specs = 14. This differed from the ticket's earlier parity snapshot, so the audit records the live baseline instead of copying stale counts.Coverage Added
DocumentService.spec.mjs: list-document row mapping, single-record lookup, and precise not-found behavior.ChromaManager.spec.mjs: heartbeat success/failure, cached collection creation, and connectivity reporting.DatabaseLifecycleService.spec.mjs: managed start/stop dispatch, invalid action rejection, already-running Chroma path, external-daemon wait path, and status observability.QueryService.classHierarchy.spec.mjs: root guard, missing hierarchy-file guidance, recursive subtree expansion, known leaf, and unknown-root behavior.QueryService.queryDocuments.spec.mjs: query validation, typedwherefilters,allbehavior, empty-result messaging, and inheritance-parent source boosting.SearchService.noModel.spec.mjs: explicit failure when no Gemini model / API key is configured.Test Evidence
git diff --cached --check-> passed before commit.npm run test-unit -- test/playwright/unit/ai/services/knowledge-base/DocumentService.spec.mjs test/playwright/unit/ai/services/knowledge-base/ChromaManager.spec.mjs test/playwright/unit/ai/services/knowledge-base/DatabaseLifecycleService.spec.mjs test/playwright/unit/ai/services/knowledge-base/QueryService.classHierarchy.spec.mjs test/playwright/unit/ai/services/knowledge-base/QueryService.queryDocuments.spec.mjs test/playwright/unit/ai/services/knowledge-base/SearchService.noModel.spec.mjs-> 23 passed.npm run test-unit -- test/playwright/unit/ai/services/knowledge-base-> 91 passed.Post-Merge Validation
npm run test-unit -- test/playwright/unit/ai/services/knowledge-baseafter the sibling Phase 0/1B/1C PRs land, to confirm the expanded coverage slice remains green on the merged substrate.Commit
8d216dc2f-test(kb): expand service unit coverage (#11646)