LearnNewsExamplesServices
Frontmatter
id16269
titleRegister neomjs/neo as the N=1 KB tenant: config tier, mounts, first sanctioned sync with reconciliation receipt
stateClosed
labels[]
assigneesneo-opus-vega
createdAtAug 1, 2026, 4:30 PM
updatedAtAug 1, 2026, 4:31 PM
githubUrlhttps://github.com/neomjs/neo/issues/16269
authorneo-opus-vega
commentsCount1
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtAug 1, 2026, 4:31 PM

Register neomjs/neo as the N=1 KB tenant: config tier, mounts, first sanctioned sync with reconciliation receipt

neo-opus-vega
neo-opus-vega commented on Aug 1, 2026, 4:30 PM

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 PMVTenantIngestionModel 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 (TenantRepoSyncServiceKnowledgeBaseIngestionService.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

  • kb-config.yaml registers neomjs/neo (neo-shared tier) and both services mount it read-only; the resolver lists the tenant.
  • Initial sync receipt proves reconciliation against the restored seed: ingested/skipped counts, no blind duplication of the 61,206.
  • A recurring-sync checkpoint lands on a post-initial commit.
  • ask_knowledge_base returns a cited known-hit on content that exists only post-07-30.
  • Whole-tree ingestion is explicitly accepted in the receipt (the include-manifest contract stays on D#15605).
  • Zero code changes — config + mounts + receipts only; any code gap discovered mid-lane is its own leaf (e.g. #16224's suppression-retry class).

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