LearnNewsExamplesServices
Frontmatter
id16278
titleRegister neomjs/neo as the N=1 KB tenant: config tier, mounts, first sanctioned sync with identity-classified reconciliation receipt
stateClosed
labels[]
assigneesneo-opus-vega
createdAtAug 1, 2026, 7:02 PM
updatedAtAug 2, 2026, 1:35 AM
githubUrlhttps://github.com/neomjs/neo/issues/16278
authorneo-opus-vega
commentsCount2
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtAug 1, 2026, 11:43 PM

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

neo-opus-vega
neo-opus-vega commented on Aug 1, 2026, 7:02 PM

Authority

GRADUATED: D#15605 body (fold 5, updatedAt 2026-08-01T16:05:54Z) §"Proposed partial graduation — the N=1 slice" — quorum complete per the consensus-mandate: [AUTHOR_SIGNAL] @neo-kimi-iris (kimi, Discussion author) + [GRADUATION_APPROVED] @neo-gpt-emmy (gpt, non-author family, replacing her deferral after both blockers closed). Operator mandate 2026-08-01, priority 1 of 3. Predecessor #16269 was closed as premature (filed pre-graduation); this leaf supersedes it with clean authority.

Context

Post-cutover, the containerized plane has NO ingestion feed: kb-config.yaml mounted on neither orchestrator nor kb-server, no configured tenantRepos, ingestion state never-attempted (audit receipts on #16167). Gap-0 restored the CORPUS (61,206 chunks @ 07-30); without this leaf ask_knowledge_base re-stales daily while the datasync pipeline's hourly artifacts (resources/content/, inside the repo) reach nobody. Deploy precondition satisfied: the Brain runs 36a63b7e.

The Build (zero-code PMV per the graduated slice)

  1. kb-config.yaml registering neomjs/neo as pull-mode tenant (neo-shared tier), placed at the deployment home (<neoRootDir>/kb-config.yaml per the tiered resolver's read path) — tracked-example vs deploy-home-only is the first commit's one open placement decision (settle against the resolver + the overlay's relative-path conventions; the file holds no secrets).
  2. Both compose mounts (orchestrator + kb-server, read-only) — the base compose comment documents the shape and names the silent-fallback trap this closes.
  3. First sanctioned sync → the identity-classified reconciliation receipt (graduated point 3, Emmy's spec): pre/post ID-set delta classified by chunk identity — tenant/repo + hash/type/name/source with parser fields in the hash; overlapping identities REUSE IDs; legitimate new/removed identities accounted by source-path + parser/hash identity; zero same-identity double representation. NOT an aggregate count.
  4. Recurring-sync checkpoint on a post-initial commit.
  5. ask freshness proof: a cited known-hit on content that exists only post-07-30.

Contract Ledger

Surface Contract
Document root tenants: map keyed by tenantId (bootstrap.tenantslistConfiguredTenantRepos's yaml tier); a flat root yields ZERO tenants silently
Entry fields tenantId + repoSlug (identity = tenantId/repoSlug) + cloneUrl (clean, no userinfo — assertCleanCloneUrl) + credentialRef (required; none = public clone) + branchRef (defaults HEAD; pinned dev here); optional mirrorRoot/cadenceMs ride defaults
Resolver / normalizer IngestionService.readKbConfigBootstrapResult({fileSystem}) (tier 2, injectable) → normalizeTenantRepoEntry / normalizeTenantRepoCredentialRef (tenantRepoAccessContract.mjs) — malformed entries THROW at normalization
Orchestrator consumer TenantRepoSyncService per-repo loop: GitMirror clone/fetch → ingest envelope → lastIngestedRev persistence; per-repo failure isolation; kbSync never re-pointed (separation invariant)
KB consumer IngestionService.getTenantConfig query-time resolution, same tier order (graph node → this file → aiConfig defaults)
Fail-soft vs fail-loud File READ is fail-soft (missing/malformed → null → lower tier, SILENT — hence the regression spec reading the tracked bytes through the production reader); entry NORMALIZATION is fail-loud (contract errors throw)
Guard test/playwright/unit/ai/deploy/KbTenantBootstrapContract.spec.mjs — production reader (status: loaded, tenantCount: 1) + production normalizer (exact neo-shared/neo entry) + both overlay mounts

Acceptance Criteria

  • Resolver lists the neo tenant on boot; both services carry the read-only mount. [L4-deferred — operator handoff needed: kb-server + orchestrator recreate adopts the mounts]
  • Initial-sync receipt in the graduated identity-classified form (pre/post ID-set delta, identity-keyed; zero same-identity duplication against the restored 61,206). [L4-deferred — operator handoff needed]
  • Recurring checkpoint receipt naming its delta commit. [L4-deferred — operator handoff needed]
  • ask_knowledge_base cited known-hit on post-07-30-only content. [L4-deferred — operator handoff needed]
  • Whole-tree ingestion explicitly accepted in the receipt (include-manifest stays on D#15605). [L4-deferred — operator handoff needed]
  • Zero code changes; any code gap discovered mid-lane files as its own leaf (#16224's suppression-retry class is the known adjacent).

Out of Scope

Per the graduated slice: include-manifests / membership / multi-tenant admission (D#15605 epic, @neo-kimi-iris) · GP/native-graph freshness (separate source + receipt) · the deployment pipeline (D#15758's actuator authority) · #16224 (observed, not fixed here).

Related

  • D#15605 (graduated authority) · #16167 (the acceptance path) · #16269 (closed premature predecessor) · #16224, #16174 (adjacent known defects) · D#15758 (actuator authority for any automation)

Origin Session ID: 1021960a-ad70-4ea9-ba96-c0f5b4bb553d

Retrieval Hint: neo tenant N=1 kb-config pull mode graduated identity classified reconciliation receipt ask freshness known-hit mounts

tobiu closed this issue on Aug 1, 2026, 11:43 PM
tobiu referenced in commit 1d7d0d2 - "feat(ai): register neomjs/neo as the N=1 KB tenant — config tier + dual mounts (#16278) (#16287) on Aug 1, 2026, 11:43 PM