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:
- Re-audit everything manually with no structured queue.
- 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:
- Document
verifiedAt in learn/agentos/ConceptOntology.md as optional/nullable freshness metadata, including the non-decay rule.
- Extend candidate defaults in
ConceptDiscoveryService so newly mined candidates serialize with verifiedAt: null alongside validated: false.
- Extend
ConceptIngestor.computePayloadHash() and graph node properties so verifiedAt participates in differential sync and becomes queryable on CONCEPT nodes.
- 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.
- Surface review-due concepts as a durable handoff signal, e.g.
[CONCEPT_REVERIFY_DUE], without mutating weight, validated, or any edge.
- Update tests around
ConceptDiscoveryService, ConceptIngestor, and the concept gap/handoff path.
Acceptance Criteria
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"
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:
verifiedAtmust 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.mddocuments the node schema asid,name,tier,description,uniqueToNeo,tags, and optionalaliases..neo-ai-data/concepts/nodes.jsonlcurrently has 59 rows and zeroverifiedAtproperties.ConceptDiscoveryServiceappends LLM-mined candidates withvalidated: false, which is a publication/silencing gate for uncurated candidates.ConceptIngestorpersistsvalidatedand includes it in the payload hash so curator promotion changes are re-upserted.GapInferenceEngineskipsvalidated: falseconcepts before emitting guide/example/orphan signals.That
validatedflag 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:
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 throughcapabilityGap.ai/daemons/services/GoldenPathSynthesizer.mjs: downstream handoff rendering for tagged capability gaps.The right shape is a new concept-node property:
verifiedAt: string | nullSemantics:
stringis an ISO date string for the last source-grounded verification of the concept node's description and relationship intent.nullmeans never verified under this explicit contract.nullin code paths.verifiedAt === nullor the date is older than the configured/default review window, initially 90 days.The Fix
Add a narrow freshness layer for Concept Ontology nodes:
verifiedAtinlearn/agentos/ConceptOntology.mdas optional/nullable freshness metadata, including the non-decay rule.ConceptDiscoveryServiceso newly mined candidates serialize withverifiedAt: nullalongsidevalidated: false.ConceptIngestor.computePayloadHash()and graph node properties soverifiedAtparticipates in differential sync and becomes queryable on CONCEPT nodes.nullor age > 90 days, with tests parameterizing "now" to avoid date flake.[CONCEPT_REVERIFY_DUE], without mutatingweight,validated, or any edge.ConceptDiscoveryService,ConceptIngestor, and the concept gap/handoff path.Acceptance Criteria
learn/agentos/ConceptOntology.mddocumentsverifiedAt: string|null, defaultnull, ISO date semantics, and the explicit no-auto-decay rule.verifiedAt: nullby default.verifiedAtare treated asnullby runtime code.verifiedAtis persisted to graph node properties and included in concept payload hashing so freshness edits re-upsert.nullvalues and ISO dates older than 90 days.Out of Scope
verifiedAt..neo-ai-data/concepts/nodes.jsonldescriptions; #10050 tracks source-grounded description enrichment and needs human architectural input.Avoided Traps / Gold Standards Rejected
verifiedAtmust queue review work only.validated.validated: falseis a publication gate for mined candidates;verifiedAtis a re-review cadence for curated or candidate concepts.Related
Origin Session ID: 13545acb-8bf2-4d54-a9b2-2106273f72d1 Retrieval Hint: "Concept Ontology verifiedAt freshness non-destructive reverify due 2026-05-01"