Context
Post-cutover, the containerized plane has NO ingestion feed: kb-config.yaml is mounted on neither orchestrator nor kb-server, the orchestrator logs no configured tenantRepos, and KB ingestion state reads never-attempted (live audit receipts on #16167). The gap-0 restore fixed the CORPUS (61,206 chunks as of the 07-30 bundle); without this leaf, ask_knowledge_base re-stales daily and the datasync pipeline's hourly artifacts (resources/content/, riding inside the repo) reach nobody.
Authority: the N=1 acceptance path amended onto #16167 (@neo-gpt), the boundary + PMV decisions on D#15605 (provider-neutral acquisition; tenant-scoped multi-tenant admission; whole-tree/zero-code PMV — TenantIngestionModel ingests the whole tracked tree today and a per-tenant include-manifest is explicitly a separate contract lane; the first-pull receipt must prove reconciliation against the restored seed, not duplication). Sequencing precondition SATISFIED: the Brain runs the exact merge (36a63b7e, deployed 13:46Z).
Operator mandate 2026-08-01: item 1 of 3 — "neo as a tenant repo for KB (ask tool without staleness, GP)". GP freshness is deliberately NOT this leaf (separate source + receipt per the D#15605 boundary pass).
Contract Ledger
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
kb-config.yaml (new, deployment-home) |
#16167 N=1 acceptance; the tiered resolver (TenantRepoSyncService → KnowledgeBaseIngestionService.listConfiguredTenantRepos) |
registers neomjs/neo as pull-mode tenant (neo-shared tier) |
absent file → aiConfig.tenantRepos default tier only (current behavior, unchanged) |
the compose comment block that already documents the mount |
resolver lists the tenant on boot |
| compose mounts (orchestrator + kb-server) |
the existing documented example in docker-compose.yml (./kb-config.yaml:/app/kb-config.yaml:ro) |
both services mount the file read-only |
without the orchestrator mount the sync silently falls back — the exact trap the compose comment names |
same comment |
docker inspect shows both mounts |
| First sanctioned sync |
whole-tree/zero-code PMV |
initial sync completes; receipt = per-path ingested/skipped counts proving RECONCILIATION against the restored 61,206 (idempotence, not duplication) |
sync failure fails loud (#16224's class is out of scope but observed) |
receipt on this ticket |
the reconciliation receipt |
| Recurring sync checkpoint |
#16167 acceptance |
the scheduler lane shows a second successful pass picking up a post-initial commit |
— |
receipt |
checkpoint receipt with the delta commit named |
ask freshness proof |
#16167 acceptance + the incident falsifier |
a known-hit citing content that exists ONLY post-07-30 (not a count) |
— |
receipt |
the cited answer |
Acceptance Criteria
Out of Scope
- Per-tenant include-manifests, membership models, multi-tenant admission — D#15605 (@neo-kimi-iris's half).
- GP/native-graph freshness — separate source + receipt (the D#15605 boundary pass, item 2).
- #16224 (TenantRepoSync suppression never retries) — pre-existing; observed, not fixed here.
- The deployment pipeline itself — D#16193 (operator item 3).
Related
- #16167 — the N=1 acceptance path (this leaf delivers it) · D#15605 — boundary + PMV authority · #16224, #16174 — adjacent known defects · D#16193 — deployment acceptance (sequencing satisfied)
Origin Session ID: 1021960a-ad70-4ea9-ba96-c0f5b4bb553d
Retrieval Hint: neo tenant repo N=1 kb-config.yaml pull mode ingestion whole tree reconcile ask freshness known-hit tenantRepos mount
Context
Post-cutover, the containerized plane has NO ingestion feed:
kb-config.yamlis mounted on neither orchestrator nor kb-server, the orchestrator logs no configuredtenantRepos, and KB ingestion state readsnever-attempted(live audit receipts on #16167). The gap-0 restore fixed the CORPUS (61,206 chunks as of the 07-30 bundle); without this leaf,ask_knowledge_basere-stales daily and the datasync pipeline's hourly artifacts (resources/content/, riding inside the repo) reach nobody.Authority: the N=1 acceptance path amended onto #16167 (@neo-gpt), the boundary + PMV decisions on D#15605 (provider-neutral acquisition; tenant-scoped multi-tenant admission; whole-tree/zero-code PMV —
TenantIngestionModelingests the whole tracked tree today and a per-tenant include-manifest is explicitly a separate contract lane; the first-pull receipt must prove reconciliation against the restored seed, not duplication). Sequencing precondition SATISFIED: the Brain runs the exact merge (36a63b7e, deployed 13:46Z).Operator mandate 2026-08-01: item 1 of 3 — "neo as a tenant repo for KB (ask tool without staleness, GP)". GP freshness is deliberately NOT this leaf (separate source + receipt per the D#15605 boundary pass).
Contract Ledger
kb-config.yaml(new, deployment-home)TenantRepoSyncService→KnowledgeBaseIngestionService.listConfiguredTenantRepos)neomjs/neoas pull-mode tenant (neo-shared tier)docker-compose.yml(./kb-config.yaml:/app/kb-config.yaml:ro)docker inspectshows both mountsaskfreshness proofAcceptance Criteria
kb-config.yamlregisters neomjs/neo (neo-shared tier) and both services mount it read-only; the resolver lists the tenant.ask_knowledge_basereturns a cited known-hit on content that exists only post-07-30.Out of Scope
Related
Origin Session ID: 1021960a-ad70-4ea9-ba96-c0f5b4bb553d
Retrieval Hint:
neo tenant repo N=1 kb-config.yaml pull mode ingestion whole tree reconcile ask freshness known-hit tenantRepos mount