Context
Surfaced during an autonomous lane-survey (session 3e5f61a5-35d0-4f3d-8805-54f63bebed70): the explore_lane_landscape memory-core MCP tool fails on every call — reproduced twice on-demand this session:
Error executing explore_lane_landscape: Cannot read properties of undefined (reading 'maxLabelsPerIssue')
The tool is fully non-functional; the current-state lane Bird View it was built to provide (#15234) is unavailable, forcing fallback to get_context_frontier + raw list_issues for lane discovery.
The Problem
The lane-landscape census constructs its open-work reader config from AiConfig leaves, but AiConfig.issueSync is undefined at that runtime, so the nested-leaf read throws before any census work runs.
The Architectural Reality
ai/mcp/server/memory-core/toolService.mjs:60-61 (the explore_lane_landscape deps construction) reads:
maxLabels : AiConfig.issueSync.maxLabelsPerIssue,
maxAssignees: AiConfig.issueSync.maxAssigneesPerIssue
maxLabelsPerIssue is an AiConfig leaf (ai/mcp/server/github-workflow/configBase.mjs:239 → leaf(20) under issueSync). At the explore_lane_landscape runtime, AiConfig.issueSync resolves to undefined, so .maxLabelsPerIssue throws. Sibling reads on the SAME AiConfig object a few lines down (laneLandscapeCensusPageLimit, laneLandscapeCensusMaxPages, laneLandscapeRelationEdgeLimit, lines 65-67) do not fault — so the gap is specifically the issueSync leaf group not being present / injected in this tool's context, not a wholesale AiConfig absence.
The Fix
DEFERRED — ADR-0019 domain. Per AGENTS.md §critical_gate 10, the implementer MUST read learn/agentos/decisions/0019-aiconfig-reactive-provider-ssot.md before touching this AiConfig access. This ticket reports the verified symptom + exact site ONLY and deliberately does not prescribe the config change — whether the cause is a missing provider wiring for issueSync, a module-load capture defeating the reactive leaf, or a require+inject+fail-loud gap is the ADR-0019-informed implementer's call.
Acceptance Criteria
Out of Scope
- The fix mechanism (ADR-0019 implementer's call).
- Other memory-core tools — only
explore_lane_landscape reproduced this crash here; get_context_frontier and the query tools work.
Related
#15234 — the closed feature ticket that added explore_lane_landscape.
#15100 — Live Lane Awareness (Wave-1 composition).
Verification
Reproduced twice on-demand this session, identical error each time — fully deterministic, every call throws. Live-open duplicate sweep: checked open/closed issues for explore_lane_landscape / maxLabelsPerIssue / lane-landscape at time of filing; no equivalent bug ticket exists (#15234 is the feature, now closed).
Origin Session ID: 3e5f61a5-35d0-4f3d-8805-54f63bebed70
Handoff Retrieval Hint: "explore_lane_landscape AiConfig.issueSync maxLabelsPerIssue undefined crash toolService.mjs"
Authored by Ada (@neo-opus-ada, Claude Opus 4.8, Claude Code).
Context
Surfaced during an autonomous lane-survey (session
3e5f61a5-35d0-4f3d-8805-54f63bebed70): theexplore_lane_landscapememory-core MCP tool fails on every call — reproduced twice on-demand this session:The tool is fully non-functional; the current-state lane Bird View it was built to provide (
#15234) is unavailable, forcing fallback toget_context_frontier+ rawlist_issuesfor lane discovery.The Problem
The lane-landscape census constructs its open-work reader config from
AiConfigleaves, butAiConfig.issueSyncisundefinedat that runtime, so the nested-leaf read throws before any census work runs.The Architectural Reality
ai/mcp/server/memory-core/toolService.mjs:60-61(theexplore_lane_landscapedeps construction) reads:maxLabels : AiConfig.issueSync.maxLabelsPerIssue, maxAssignees: AiConfig.issueSync.maxAssigneesPerIssuemaxLabelsPerIssueis anAiConfigleaf (ai/mcp/server/github-workflow/configBase.mjs:239→leaf(20)underissueSync). At theexplore_lane_landscaperuntime,AiConfig.issueSyncresolves toundefined, so.maxLabelsPerIssuethrows. Sibling reads on the SAMEAiConfigobject a few lines down (laneLandscapeCensusPageLimit,laneLandscapeCensusMaxPages,laneLandscapeRelationEdgeLimit, lines 65-67) do not fault — so the gap is specifically theissueSyncleaf group not being present / injected in this tool's context, not a wholesaleAiConfigabsence.The Fix
DEFERRED — ADR-0019 domain. Per
AGENTS.md§critical_gate 10, the implementer MUST readlearn/agentos/decisions/0019-aiconfig-reactive-provider-ssot.mdbefore touching thisAiConfigaccess. This ticket reports the verified symptom + exact site ONLY and deliberately does not prescribe the config change — whether the cause is a missing provider wiring forissueSync, a module-load capture defeating the reactive leaf, or a require+inject+fail-loud gap is the ADR-0019-informed implementer's call.Acceptance Criteria
explore_lane_landscapereturns a lane-landscape projection without throwing (verified by a live tool call).AiConfig.issueSyncleaf group resolves in theexplore_lane_landscaperuntime path, following ADR-0019 require+inject discipline (no primitive-local default silently masking the gap).issueSyncwiring regression fails loud.Out of Scope
explore_lane_landscapereproduced this crash here;get_context_frontierand the query tools work.Related
#15234— the closed feature ticket that addedexplore_lane_landscape.#15100— Live Lane Awareness (Wave-1 composition).Verification
Reproduced twice on-demand this session, identical error each time — fully deterministic, every call throws. Live-open duplicate sweep: checked open/closed issues for
explore_lane_landscape/maxLabelsPerIssue/ lane-landscape at time of filing; no equivalent bug ticket exists (#15234is the feature, now closed).Origin Session ID: 3e5f61a5-35d0-4f3d-8805-54f63bebed70
Handoff Retrieval Hint: "explore_lane_landscape AiConfig.issueSync maxLabelsPerIssue undefined crash toolService.mjs"
Authored by Ada (@neo-opus-ada, Claude Opus 4.8, Claude Code).