LearnNewsExamplesServices
Frontmatter
id12130
titleIssueIngestor community-multiplier hardcodes operator login 'tobiu'
stateClosed
labels
enhancementaiarchitecture
assigneesneo-opus-ada
createdAtMay 28, 2026, 9:04 AM
updatedAtMay 28, 2026, 9:15 PM
githubUrlhttps://github.com/neomjs/neo/issues/12130
authorneo-opus-ada
commentsCount0
parentIssue11831
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtMay 28, 2026, 9:15 PM

IssueIngestor community-multiplier hardcodes operator login 'tobiu'

Closed v13.0.0/archive-v13-0-0-chunk-14 enhancementaiarchitecture
neo-opus-ada
neo-opus-ada commented on May 28, 2026, 9:04 AM

Context

Surfaced by the #11837 external-user configurability audit (Epic #11831 Sub 5) — see audit findings comment. AC1 (no hardcoded Neo-team identities in daemon/service logic) found one genuine logic break.

The Problem

ai/services/ingestion/IssueIngestor.mjs:194 applies a "Community Multiplier" to ticket topological weight:

// Community Multiplier: Boost if ticket is external and has been triaged
if (meta.author && meta.author !== 'tobiu') {
    if (Array.isArray(meta.labels) && meta.labels.length > 0) {
        baseWeight += 0.5;
    }
}

The literal 'tobiu' is the neomjs operator's GitHub login, used as the proxy for "internal author" (so community-authored tickets get a triage boost the maintainer's own tickets don't). This is a Neo-team-specific assumption that breaks for external deployments:

  • In a fork / npx neo-app workspace / non-neomjs cloud tenant, there is no 'tobiu'.
  • So meta.author !== 'tobiu' is true for every ticket — including the deployment's own maintainer's tickets.
  • The "community multiplier" semantic inverts: every ticket is treated as external-community and gets the +0.5 boost, defeating the boost's discriminating purpose.

This is the same anti-pattern class as the GoldenPathSynthesizer identity hardcoding (→ #12126) and the keep_alive/provider env-var docs (#12094): Neo-team identity baked into deployable code instead of resolved from config.

The Architectural Reality

  • ai/services/ingestion/IssueIngestor.mjs:194 — the single hardcoded site.
  • ai/graph/identityRoots.mjs — the canonical swarm-identity registry; the substrate-correct source for "who is an internal maintainer."
  • The fix mirrors the established "expose config, don't hardcode" discipline used across the v13 config-substrate work.

The Fix

Replace the literal 'tobiu' with a config-resolved internal-author / maintainer set. Options (implementer's Tier-2 call):

  • Resolve maintainer logins from ai/graph/identityRoots.mjs (the canonical registry), OR
  • Add an aiConfig deployment key (e.g. internalAuthorLogins / maintainerLogins) with a documented default, read verbatim per the no-hidden-default-fallback contract.

The check becomes if (meta.author && !internalAuthorSet.has(meta.author)). For a zero-config single-deployment, the default set resolves to the deployment's own maintainers; an external deployment configures its own set (or an empty set → multiplier simply never fires, which is a safe degrade).

Contract Ledger

Target Surface Source of Authority Proposed Behavior Fallback / Edge Case Docs Evidence
IssueIngestor community-multiplier internal-author check This ticket + #11837 AC1 Resolve internal-author set from config / identityRoots.mjs; multiplier fires for authors NOT in the set Empty/unset set → multiplier never fires (safe degrade, not all-tickets-boosted) JSDoc on the resolved source Unit test: internal-author ticket NOT boosted, external-author ticket boosted, empty-set no-fire

Acceptance Criteria

  • AC1: 'tobiu' literal removed from IssueIngestor.mjs; internal-author set resolved from config / identityRoots.mjs.
  • AC2: Zero-config default resolves to the deployment's maintainer set (not a hardcoded login); external deployments configure their own.
  • AC3: Unit coverage — internal-author ticket not boosted, external-author triaged ticket boosted, empty-set → multiplier no-fires (safe degrade).
  • AC4: No new hidden-default-fallback (||/?? substitution); config read verbatim.

Out of Scope

  • The JSDoc-comment @neo-* mentions flagged as low-priority in the #11837 audit (genericization → fold into #11912 archaeology-cleanup epic).
  • GoldenPathSynthesizer identity consolidation (→ #12126).

Related

  • Parent audit: #11837 (Epic #11831 Sub 5 external-user configurability audit) — finding source.
  • Sibling identity-hardcode fixes: #12126 (GoldenPathSynthesizer → identityRoots), #12094 (provider env-var docs).
  • ai/graph/identityRoots.mjs — canonical maintainer-identity registry.

Origin Session ID

3e21265b-38a8-4bf3-a81f-04375d8a757f

Handoff Retrieval Hints

query_raw_memories: "IssueIngestor community multiplier hardcoded tobiu external deployment author weighting". Git anchor: ai/services/ingestion/IssueIngestor.mjs:194.

tobiu referenced in commit 0006389 - "fix(ai): IssueIngestor resolves internal authors from registry (#12130) (#12144) on May 28, 2026, 9:15 PM
tobiu closed this issue on May 28, 2026, 9:15 PM