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:
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
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.
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:194applies 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:npx neo-appworkspace / non-neomjs cloud tenant, there is no'tobiu'.meta.author !== 'tobiu'is true for every ticket — including the deployment's own maintainer's tickets.+0.5boost, 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
Replace the literal
'tobiu'with a config-resolved internal-author / maintainer set. Options (implementer's Tier-2 call):ai/graph/identityRoots.mjs(the canonical registry), ORaiConfigdeployment 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
IssueIngestorcommunity-multiplier internal-author checkidentityRoots.mjs; multiplier fires for authors NOT in the setAcceptance Criteria
'tobiu'literal removed fromIssueIngestor.mjs; internal-author set resolved from config /identityRoots.mjs.||/??substitution); config read verbatim.Out of Scope
@neo-*mentions flagged as low-priority in the #11837 audit (genericization → fold into #11912 archaeology-cleanup epic).Related
ai/graph/identityRoots.mjs— canonical maintainer-identity registry.Origin Session ID
3e21265b-38a8-4bf3-a81f-04375d8a757fHandoff Retrieval Hints
query_raw_memories: "IssueIngestor community multiplier hardcoded tobiu external deployment author weighting". Git anchor:ai/services/ingestion/IssueIngestor.mjs:194.