LearnNewsExamplesServices
Frontmatter
id14478
titleRe-home lazyEdgesQueuePath off the git-tracked ai/data/ path
stateClosed
labels
enhancementaiarchitecture
assigneesneo-opus-ada
createdAtJul 2, 2026, 4:39 PM
updatedAtJul 2, 2026, 6:05 PM
githubUrlhttps://github.com/neomjs/neo/issues/14478
authorneo-opus-grace
commentsCount3
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJul 2, 2026, 5:41 PM

Re-home lazyEdgesQueuePath off the git-tracked ai/data/ path

Closed v13.1.0/archive-v13-1-0-chunk-8 enhancementaiarchitecture
neo-opus-grace
neo-opus-grace commented on Jul 2, 2026, 4:39 PM

Context

Surfaced during #14304 (Agent OS Architecture Quality) Lane-1 cruft-item V-B-A on 2026-07-02 (#14304 comment IC_kwDODSospM8AAAABIdVFPQ). The epic body's Remove: ai/data/ → delete line is wrong and dangerousai/data/memory-core/lazy-edges.jsonl is not cruft, it is a live runtime queue. Acting on the epic's word would silently break the lazy-edge resolution path. This ticket captures the real scoped change the "delete" line should become.

The Problem

aiConfig.lazyEdgesQueuePath defaults to a git-tracked location (ai/data/memory-core/lazy-edges.jsonl). Runtime appends therefore land in a tracked file, and the data-sync pipeline commits them → recurring churn — the same anti-pattern class as the .neo-ai-data runtime store (which IS gitignored). A transient drain-queue must not be version-controlled.

The Architectural Reality

  • SSOT default: ai/mcp/server/memory-core/config.template.mjs:744lazyEdgesQueuePath: leaf(path.resolve(cwd, 'ai/data/memory-core/lazy-edges.jsonl'), 'NEO_LAZY_EDGES_QUEUE_PATH', 'string').
  • Producer: ai/services/graph/SemanticGraphExtractor.mjs:877 appends unresolved edges to AiConfig.lazyEdgesQueuePath.
  • Consumers: ai/services/graph/LazyEdgeDrainer.mjs (drains into the Native Edge Graph) + priorityBackfill.mjs.
  • gitignore: .gitignore:102 ignores .neo-ai-data but NOT ai/data/; git ls-files confirms ai/data/memory-core/lazy-edges.jsonl is tracked.

The Fix

Re-home the lazyEdgesQueuePath default (via the AiConfig SSOT, config.template.mjs) off the tracked path onto a gitignored runtime store matching the existing .neo-ai-data convention (e.g. .neo-ai-data/memory-core/lazy-edges.jsonl):

  1. Update the config.template.mjs leaf default (+ re-materialize config.mjs).
  2. Ensure the new path is gitignored; keep the NEO_LAZY_EDGES_QUEUE_PATH env override behavior unchanged.
  3. Remove the tracked ai/data/memory-core/lazy-edges.jsonl (and the now-orphan ai/data/ tree).
  4. Update LazyEdgeDrainer.mjs JSDoc (lines 16-17) citing the old default path.
  5. Correct #14304's body line Remove: ai/data/ → delete → the re-home framing (removes the hazard).

Contract Ledger Matrix

Field Value
Target Surface aiConfig.lazyEdgesQueuePath (config leaf)
Source of Authority ai/mcp/server/memory-core/config.template.mjs:744 (AiConfig SSOT, ADR-0019)
Proposed Behavior default resolves to a gitignored runtime path (.neo-ai-data/memory-core/lazy-edges.jsonl)
Fallback NEO_LAZY_EDGES_QUEUE_PATH env override — unchanged
Docs LazyEdgeDrainer.mjs JSDoc default-path reference
Evidence queue append→drain round-trips from the new path (unit/integration)

Decision Record impact

aligned-with ADR-0019 (AiConfig reactive Provider SSOT) — a config-default re-home through the SSOT leaf; no re-derived/pass-through config surface, no ADR challenge.

Acceptance Criteria

  • lazyEdgesQueuePath default re-homed to a gitignored runtime path via the config.template.mjs SSOT leaf.
  • ai/data/memory-core/lazy-edges.jsonl removed from git tracking; ai/data/ no longer tracked.
  • New path is gitignored; NEO_LAZY_EDGES_QUEUE_PATH env override still honored.
  • Append→drain round-trip verified from the new path (the failure mode — a broken queue — is silent, so this is required, not optional).
  • LazyEdgeDrainer.mjs JSDoc default-path reference updated.
  • #14304 body's Remove: ai/data/ → delete line corrected to the re-home framing (body author: @neo-opus-grace).

Out of Scope

  • The broader ai/ domain-first migration / file-moves (#14304 Lane-1 — fenced behind v13.1 #14039).
  • No change to the lazy-edge queue's logic (append/drain unchanged) — path-only.
  • The sibling ai/docs/ mis-diagnosed cruft item (relocate wake-prompt-landing-matrix.mdlearn/agentos/process/ + tree.json register) — a foldable companion cleanup; can ride this PR or a Lane-1 batch.

Avoided Traps

  • Delete ai/data/ (the epic's original word): rejected — V-B-A proved it's the live lazy-edges queue; deleting silently breaks edge resolution.
  • Re-derive/env-read the path outside the SSOT: rejected — ADR-0019 forbids config pass-through / re-derivation; the change lands at the SSOT leaf default only.

Related

  • #14304 (Agent OS Architecture Quality — Lane-1/2 goal-anchor; this corrects a mis-diagnosed cruft item in its body).
  • .neo-ai-data runtime-store convention (the correct gitignored home; the #14469 data-home saga settled this class).
  • #14079 / #14192 / #14193 (Chroma-store bloat — distinct substrate: vector-DB dedup / FTS5 index, NOT the JSONL queue; noted to disambiguate).
  • ADR-0019 (AiConfig reactive Provider SSOT).

Origin Session ID: 1d7923bf-11bd-4c02-925b-5286b10d244d

Handoff Retrieval Hints: query_raw_memories("lazyEdgesQueuePath re-home git-tracked ai/data runtime churn"); #14304 comment IC_kwDODSospM8AAAABIdVFPQ.

Live latest-open sweep: checked latest 25 open issues 2026-07-02T~14:36Z; no equivalent found. A2A in-flight claim sweep (last 25): no overlapping claim.

Authored by Grace (@neo-opus-grace, Claude Opus 4.8).

tobiu closed this issue on Jul 2, 2026, 5:41 PM