LearnNewsExamplesServices
Frontmatter
id10574
titleConcept nodes: add non-destructive verifiedAt freshness
stateClosed
labels
enhancementaiarchitecture
assigneesneo-gpt
createdAtMay 1, 2026, 2:22 PM
updatedAtMay 1, 2026, 4:59 PM
githubUrlhttps://github.com/neomjs/neo/issues/10574
authorneo-gpt
commentsCount0
parentIssue10030
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtMay 1, 2026, 4:59 PM

Concept nodes: add non-destructive verifiedAt freshness

Closedenhancementaiarchitecture
neo-gpt
neo-gpt commented on May 1, 2026, 2:22 PM

Context

@tobiu flagged the Concept Ontology as incomplete while steering the swarm back toward the #9999 / #10030 path: the current concept graph only contains the initial learn/tree.json-derived seed shape and needs a way to know which concepts have actually been reviewed recently.

Follow-up clarification from @tobiu on 2026-05-01: verifiedAt must not automatically fade out graph nodes or weaken their edges. A busy month should not punish a crucial concept whose underlying architecture did not change. Freshness metadata should create a review queue, not mutate graph importance.

The Problem

The concept node contract has a curation boolean for mined candidates, but no timestamp for source-grounding freshness:

  • learn/agentos/ConceptOntology.md documents the node schema as id, name, tier, description, uniqueToNeo, tags, and optional aliases.
  • .neo-ai-data/concepts/nodes.jsonl currently has 59 rows and zero verifiedAt properties.
  • ConceptDiscoveryService appends LLM-mined candidates with validated: false, which is a publication/silencing gate for uncurated candidates.
  • ConceptIngestor persists validated and includes it in the payload hash so curator promotion changes are re-upserted.
  • GapInferenceEngine skips validated: false concepts before emitting guide/example/orphan signals.

That validated flag answers: "may this concept participate in public gap signals yet?" It does not answer: "when was this concept last checked against the current repo reality?"

Without a freshness field, the swarm has two bad options:

  1. Re-audit everything manually with no structured queue.
  2. Infer staleness from graph decay or edge weight, which is wrong because lack of recent attention is not evidence that a concept lost architectural value.

The Architectural Reality

This belongs in the Concept Ontology data model and Dream pipeline signal layer, not in Chroma embeddings or Knowledge Base sync.

Relevant current substrate:

  • learn/agentos/ConceptOntology.md: node schema definition and JSONL contract.
  • .neo-ai-data/concepts/nodes.jsonl: version-controlled, PR-reviewable concept node rows.
  • ai/daemons/services/ConceptDiscoveryService.mjs: candidate defaults and appended candidate row schema.
  • ai/daemons/services/ConceptIngestor.mjs: JSONL -> Native Edge Graph projection, payload hash, graph node properties.
  • ai/daemons/services/GapInferenceEngine.mjs: durable concept graph gap signal emission through capabilityGap.
  • ai/daemons/services/GoldenPathSynthesizer.mjs: downstream handoff rendering for tagged capability gaps.

The right shape is a new concept-node property:

verifiedAt: string | null

Semantics:

  • string is an ISO date string for the last source-grounded verification of the concept node's description and relationship intent.
  • null means never verified under this explicit contract.
  • Missing legacy values should be normalized as null in code paths.
  • A concept is review-due when verifiedAt === null or the date is older than the configured/default review window, initially 90 days.
  • Review-due status must be non-destructive: no weight reduction, no graph fade, no edge weakening, no automatic retirement.

The Fix

Add a narrow freshness layer for Concept Ontology nodes:

  1. Document verifiedAt in learn/agentos/ConceptOntology.md as optional/nullable freshness metadata, including the non-decay rule.
  2. Extend candidate defaults in ConceptDiscoveryService so newly mined candidates serialize with verifiedAt: null alongside validated: false.
  3. Extend ConceptIngestor.computePayloadHash() and graph node properties so verifiedAt participates in differential sync and becomes queryable on CONCEPT nodes.
  4. Add a deterministic helper or method for detecting review-due concepts using null or age > 90 days, with tests parameterizing "now" to avoid date flake.
  5. Surface review-due concepts as a durable handoff signal, e.g. [CONCEPT_REVERIFY_DUE], without mutating weight, validated, or any edge.
  6. Update tests around ConceptDiscoveryService, ConceptIngestor, and the concept gap/handoff path.

Acceptance Criteria

  • learn/agentos/ConceptOntology.md documents verifiedAt: string|null, default null, ISO date semantics, and the explicit no-auto-decay rule.
  • Newly mined concept candidates include verifiedAt: null by default.
  • Legacy concept rows missing verifiedAt are treated as null by runtime code.
  • verifiedAt is persisted to graph node properties and included in concept payload hashing so freshness edits re-upsert.
  • Review-due logic identifies null values and ISO dates older than 90 days.
  • Review-due output is a durable signal/handoff item only; it does not change concept weights, graph edge weights, validation state, or concept visibility.
  • Tests cover null, fresh ISO date, stale ISO date, and invalid/missing legacy values.

Out of Scope

  • No automatic graph fading, weight decay, edge weakening, or concept retirement based on verifiedAt.
  • No broad rewrite of .neo-ai-data/concepts/nodes.jsonl descriptions; #10050 tracks source-grounded description enrichment and needs human architectural input.
  • No Knowledge Base sync or Chroma re-embedding work; #10037 and #9999-related embedding alignment remain separate lanes.
  • No large-scale ontology expansion beyond adding the field/default behavior needed by this ticket.

Avoided Traps / Gold Standards Rejected

  • Rejected: freshness as graph decay. That would make scheduling pressure look like architectural obsolescence. verifiedAt must queue review work only.
  • Rejected: overloading validated. validated: false is a publication gate for mined candidates; verifiedAt is a re-review cadence for curated or candidate concepts.
  • Rejected: KB sync as the fix. The current issue is the authoritative concept-node contract, not whether the stale KB has embedded the latest repo files.

Related

Origin Session ID: 13545acb-8bf2-4d54-a9b2-2106273f72d1 Retrieval Hint: "Concept Ontology verifiedAt freshness non-destructive reverify due 2026-05-01"

tobiu referenced in commit 7bf366a - "feat(ai): add concept verifiedAt freshness signal (#10574) (#10575) on May 1, 2026, 4:59 PM
tobiu closed this issue on May 1, 2026, 4:59 PM