Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,13 @@ provider-backed ELF evidence was required.
This improves local Dreaming runtime authority and auditability, but it does not
prove Pulse, ChatGPT Tasks, Claude Dreams, hosted managed-memory, or private-corpus
parity.
- Dreaming review queue after XY-1021: the June 20 follow-up adds
`elf.dreaming_review_queue/v1` through service, HTTP, and MCP readback. The queue
sits over consolidation proposals and exposes source refs, affected refs,
confidence, unsupported-claim lint, diff, policy, and review audit for existing
Dreaming suites plus tag, duplicate-merge, page-rebuild, memory-promotion,
graph-fact, and correction variants. It keeps source mutation disallowed and limits
auto-apply to approved low-risk derived organization candidates.
- Live knowledge-page rebuild/lint after XY-935: the June 20 follow-up adds
`cargo make real-world-memory-live-knowledge`, a Docker-contained ELF service
materialization command for `knowledge_compilation`. The slice runs
Expand Down Expand Up @@ -353,6 +360,7 @@ Detailed evidence and interpretation:
- [Service-Native Dreaming Readback Report - June 19, 2026](docs/evidence/benchmarking/2026-06-19-service-native-dreaming-readback-report.md)
- [OpenMemory UI/Export Product Readback Report - June 19, 2026](docs/evidence/benchmarking/2026-06-19-openmemory-ui-export-product-readback-report.md)
- [Operator-Approved Public-Proxy Production-Private Addendum - June 19, 2026](docs/evidence/benchmarking/2026-06-19-operator-approved-public-proxy-production-private-addendum.md)
- [Dreaming Review Queue Report - June 20, 2026](docs/evidence/benchmarking/2026-06-20-dreaming-review-queue-report.md)
- [Graph Topic-Map Report - June 20, 2026](docs/evidence/benchmarking/2026-06-20-graph-topic-map-report.md)
- [Knowledge Workspace Version-Diff Report - June 20, 2026](docs/evidence/benchmarking/2026-06-20-knowledge-workspace-version-diff-report.md)
- [Live Knowledge-Page Rebuild/Lint Report - June 20, 2026](docs/evidence/benchmarking/2026-06-20-live-knowledge-page-rebuild-lint-report.md)
Expand Down
84 changes: 71 additions & 13 deletions apps/elf-api/src/routes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,19 +52,20 @@ use elf_service::{
CoreBlockUpsertRequest, CoreBlockUpsertResponse, CoreBlocksGetRequest, CoreBlocksResponse,
DeleteRequest, DeleteResponse, DocType, DocsExcerptResponse, DocsExcerptsGetRequest,
DocsGetRequest, DocsGetResponse, DocsPutRequest, DocsPutResponse, DocsSearchL0Request,
DocsSearchL0Response, EntityMemoryViewRequest, EntityMemoryViewResponse, Error, EventMessage,
GranteeKind, GraphQueryEntityRef, GraphQueryPredicateRef, GraphQueryRequest,
GraphQueryResponse, GraphReportRequest, GraphReportResponse, IngestionProfileSelector,
KnowledgePageGetRequest, KnowledgePageLintRequest, KnowledgePageLintResponse,
KnowledgePageRebuildRequest, KnowledgePageRebuildResponse, KnowledgePageResponse,
KnowledgePageSearchRequest, KnowledgePageSearchResponse, KnowledgePagesListRequest,
KnowledgePagesListResponse, ListRequest, ListResponse, MemoryHistoryGetRequest,
MemoryHistoryResponse, NoteFetchRequest, NoteFetchResponse, NoteProvenanceBundleResponse,
NoteProvenanceGetRequest, PayloadLevel, PublishNoteRequest, QueryPlan, RankingRequestOverride,
RebuildReport, SearchDetailsRequest, SearchDetailsResult, SearchExplainRequest,
SearchExplainResponse, SearchIndexItem, SearchRequest, SearchResponse, SearchSessionGetRequest,
SearchTimelineGroup, SearchTimelineRequest, SearchTrajectoryResponse, SearchTrajectorySummary,
ShareScope, SpaceGrantRevokeRequest, SpaceGrantRevokeResponse, SpaceGrantUpsertRequest,
DocsSearchL0Response, DreamingReviewQueueRequest, DreamingReviewQueueResponse,
EntityMemoryViewRequest, EntityMemoryViewResponse, Error, EventMessage, GranteeKind,
GraphQueryEntityRef, GraphQueryPredicateRef, GraphQueryRequest, GraphQueryResponse,
GraphReportRequest, GraphReportResponse, IngestionProfileSelector, KnowledgePageGetRequest,
KnowledgePageLintRequest, KnowledgePageLintResponse, KnowledgePageRebuildRequest,
KnowledgePageRebuildResponse, KnowledgePageResponse, KnowledgePageSearchRequest,
KnowledgePageSearchResponse, KnowledgePagesListRequest, KnowledgePagesListResponse,
ListRequest, ListResponse, MemoryHistoryGetRequest, MemoryHistoryResponse, NoteFetchRequest,
NoteFetchResponse, NoteProvenanceBundleResponse, NoteProvenanceGetRequest, PayloadLevel,
PublishNoteRequest, QueryPlan, RankingRequestOverride, RebuildReport, SearchDetailsRequest,
SearchDetailsResult, SearchExplainRequest, SearchExplainResponse, SearchIndexItem,
SearchRequest, SearchResponse, SearchSessionGetRequest, SearchTimelineGroup,
SearchTimelineRequest, SearchTrajectoryResponse, SearchTrajectorySummary, ShareScope,
SpaceGrantRevokeRequest, SpaceGrantRevokeResponse, SpaceGrantUpsertRequest,
SpaceGrantsListRequest, TextPositionSelector, TextQuoteSelector, TraceBundleGetRequest,
TraceBundleResponse, TraceGetRequest, TraceGetResponse, TraceRecentListRequest,
TraceRecentListResponse, TraceTrajectoryGetRequest, UnpublishNoteRequest, UpdateRequest,
Expand Down Expand Up @@ -146,6 +147,7 @@ const VIEWER_HTML: &str = include_str!("../static/viewer.html");
consolidation_proposals_list,
consolidation_proposal_get,
consolidation_proposal_review,
dreaming_review_queue,
knowledge_page_rebuild,
knowledge_pages_list,
knowledge_pages_search,
Expand Down Expand Up @@ -178,6 +180,7 @@ const VIEWER_HTML: &str = include_str!("../static/viewer.html");
(name = "search", description = "Progressive search sessions and raw search diagnostics."),
(name = "graph", description = "Graph query and predicate administration."),
(name = "consolidation", description = "Reviewable derived consolidation proposals."),
(name = "dreaming", description = "Dreaming review queue and derived memory organization."),
(name = "knowledge", description = "Derived knowledge page rebuild and lint readback."),
(name = "admin", description = "Local admin and operator inspection routes."),
)
Expand Down Expand Up @@ -411,6 +414,13 @@ struct ConsolidationProposalReviewBody {
review_comment: Option<String>,
}

#[derive(Clone, Debug, Deserialize)]
struct DreamingReviewQueueQuery {
run_id: Option<Uuid>,
review_state: Option<ConsolidationReviewState>,
limit: Option<u32>,
}

#[derive(Clone, Debug, Deserialize)]
struct KnowledgePageRebuildBody {
page_kind: KnowledgePageKind,
Expand Down Expand Up @@ -742,6 +752,7 @@ pub fn admin_router(state: AppState) -> Router {
"/v2/admin/consolidation/proposals/{proposal_id}/review",
routing::post(consolidation_proposal_review),
)
.route("/v2/admin/dreaming/review-queue", routing::get(dreaming_review_queue))
.route("/v2/admin/knowledge/pages", routing::get(knowledge_pages_list))
.route("/v2/admin/knowledge/pages/rebuild", routing::post(knowledge_page_rebuild))
.route("/v2/admin/knowledge/pages/search", routing::post(knowledge_pages_search))
Expand Down Expand Up @@ -3060,6 +3071,53 @@ async fn consolidation_proposal_review(
Ok(Json(response))
}

#[utoipa::path(
get,
path = "/v2/admin/dreaming/review-queue",
tag = "dreaming",
params(
("run_id" = Option<Uuid>, Query, description = "Optional consolidation run filter."),
("review_state" = Option<String>, Query, description = "Optional review-state filter."),
("limit" = Option<u32>, Query, description = "Maximum queue items to return."),
),
responses(
(status = 200, description = "Dreaming review queue items.", body = Value),
(status = 400, description = "Invalid request.", body = ErrorBody),
(status = 401, description = "Authentication required.", body = ErrorBody),
(status = 403, description = "Admin access required.", body = ErrorBody),
(status = 500, description = "Internal error.", body = ErrorBody),
)
)]
async fn dreaming_review_queue(
State(state): State<AppState>,
headers: HeaderMap,
query: Result<Query<DreamingReviewQueueQuery>, QueryRejection>,
) -> Result<Json<DreamingReviewQueueResponse>, ApiError> {
let ctx = RequestContext::from_headers(&headers)?;
let Query(query) = query.map_err(|err| {
tracing::warn!(error = %err, "Invalid query parameters.");

json_error(
StatusCode::BAD_REQUEST,
"INVALID_REQUEST",
"Invalid query parameters.".to_string(),
None,
)
})?;
let response = state
.service
.dreaming_review_queue(DreamingReviewQueueRequest {
tenant_id: ctx.tenant_id,
project_id: ctx.project_id,
run_id: query.run_id,
review_state: query.review_state,
limit: query.limit,
})
.await?;

Ok(Json(response))
}

#[utoipa::path(
post,
path = "/v2/admin/knowledge/pages/rebuild",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
{
"schema": "elf.dreaming_review_queue_report/v1",
"authority": "XY-1021",
"generated_at": "2026-06-20T00:00:00Z",
"summary": {
"queue_schema": "elf.dreaming_review_queue/v1",
"source_mutation_allowed": false,
"high_impact_requires_review": true,
"review_audit_required": true,
"auto_apply_policy": "approved_low_risk_derived_organization_only",
"variant_count": 9,
"covered_existing_suites": [
"memory_summary",
"proactive_brief",
"scheduled_memory",
"consolidation"
],
"covered_future_variants": [
"tag",
"duplicate_merge",
"page_rebuild",
"memory_promotion",
"graph_fact",
"correction"
]
},
"service_paths": [
"ElfService::dreaming_review_queue",
"GET /v2/admin/dreaming/review-queue",
"MCP elf_dreaming_review_queue"
],
"required_item_fields": [
"source_refs",
"affected_refs",
"confidence",
"unsupported_claim_flags",
"diff",
"policy",
"review_audit"
],
"queue_variants": [
{
"variant": "memory_summary",
"source": "existing_suite",
"auto_apply_allowed": false,
"reason": "reviewable derived summary"
},
{
"variant": "proactive_brief",
"source": "existing_suite",
"auto_apply_allowed": false,
"reason": "reviewable derived brief"
},
{
"variant": "scheduled_memory",
"source": "existing_suite",
"auto_apply_allowed": false,
"reason": "reviewable scheduled derived output"
},
{
"variant": "tag",
"source": "future_queue_variant",
"auto_apply_allowed": "after_approval_when_confidence_gte_0_9_and_no_lint",
"reason": "low-risk derived organization"
},
{
"variant": "duplicate_merge",
"source": "future_queue_variant",
"auto_apply_allowed": "after_approval_when_confidence_gte_0_9_and_no_lint",
"reason": "low-risk derived organization"
},
{
"variant": "page_rebuild",
"source": "future_queue_variant",
"auto_apply_allowed": false,
"reason": "derived knowledge page output stays reviewable"
},
{
"variant": "memory_promotion",
"source": "future_queue_variant",
"auto_apply_allowed": false,
"reason": "high-impact memory note proposals require review"
},
{
"variant": "graph_fact",
"source": "future_queue_variant",
"auto_apply_allowed": false,
"reason": "high-impact graph fact proposals require review"
},
{
"variant": "correction",
"source": "future_queue_variant",
"auto_apply_allowed": false,
"reason": "correction proposals are high impact"
}
],
"claim_boundaries": {
"allowed": [
"ELF exposes a source-backed Dreaming review queue over consolidation proposals.",
"The queue item contract includes source refs, affected refs, confidence, unsupported-claim lint, diff, policy, and review audit.",
"Auto-apply is limited to approved low-risk derived organization candidates and never permits authoritative source mutation."
],
"not_allowed": [
"Do not claim provider-backed private corpus Dreaming readiness from this queue surface.",
"Do not claim source documents, notes, traces, or graph facts can be silently mutated by the queue.",
"Do not claim broad Dreaming product superiority without external competitor queue artifacts."
]
}
}
99 changes: 99 additions & 0 deletions apps/elf-eval/tests/real_world_job_benchmark.rs
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,10 @@ fn service_native_dreaming_readback_materialization_json_path() -> Result<PathBu
report_snapshot_path("2026-06-19-service-native-dreaming-readback-materialization.json")
}

fn dreaming_review_queue_report_json_path() -> Result<PathBuf> {
report_snapshot_path("2026-06-20-dreaming-review-queue-report.json")
}

fn openmemory_ui_export_product_readback_report_json_path() -> Result<PathBuf> {
report_snapshot_path("2026-06-19-openmemory-ui-export-product-readback-report.json")
}
Expand Down Expand Up @@ -288,6 +292,14 @@ fn service_native_dreaming_readback_report_markdown_path() -> Result<PathBuf> {
.join("2026-06-19-service-native-dreaming-readback-report.md"))
}

fn dreaming_review_queue_report_markdown_path() -> Result<PathBuf> {
Ok(workspace_root()?
.join("docs")
.join("evidence")
.join("benchmarking")
.join("2026-06-20-dreaming-review-queue-report.md"))
}

fn openmemory_ui_export_product_readback_report_markdown_path() -> Result<PathBuf> {
Ok(workspace_root()?
.join("docs")
Expand Down Expand Up @@ -3577,6 +3589,93 @@ fn assert_service_native_dreaming_docs(markdown: &str, benchmarking_index: &str,
assert!(readme.contains("real-world-memory-service-native-dreaming"));
}

#[test]
fn dreaming_review_queue_report_wires_reviewable_policy_contract() -> Result<()> {
let report = serde_json::from_str::<Value>(&fs::read_to_string(
dreaming_review_queue_report_json_path()?,
)?)?;
let markdown = fs::read_to_string(dreaming_review_queue_report_markdown_path()?)?;
let benchmarking_index = fs::read_to_string(benchmarking_index_path()?)?;
let readme = fs::read_to_string(readme_path()?)?;
let workspace = workspace_root()?;
let service =
fs::read_to_string(workspace.join("packages/elf-service/src/dreaming_review_queue.rs"))?;
let service_lib = fs::read_to_string(workspace.join("packages/elf-service/src/lib.rs"))?;
let routes = fs::read_to_string(workspace.join("apps/elf-api/src/routes.rs"))?;
let mcp = fs::read_to_string(workspace.join("apps/elf-mcp/src/server.rs"))?;
let consolidation_spec =
fs::read_to_string(workspace.join("docs/spec/system_consolidation_proposals_v1.md"))?;
let service_spec =
fs::read_to_string(workspace.join("docs/spec/system_elf_memory_service_v2.md"))?;

assert_eq!(
report.pointer("/schema").and_then(Value::as_str),
Some("elf.dreaming_review_queue_report/v1")
);
assert_eq!(report.pointer("/authority").and_then(Value::as_str), Some("XY-1021"));
assert_eq!(
report.pointer("/summary/queue_schema").and_then(Value::as_str),
Some("elf.dreaming_review_queue/v1")
);
assert_eq!(
report.pointer("/summary/source_mutation_allowed").and_then(Value::as_bool),
Some(false)
);
assert_eq!(
report.pointer("/summary/high_impact_requires_review").and_then(Value::as_bool),
Some(true)
);
assert_eq!(report.pointer("/summary/variant_count").and_then(Value::as_u64), Some(9));

for suite in ["memory_summary", "proactive_brief", "scheduled_memory", "consolidation"] {
assert!(array_contains_str(&report, "/summary/covered_existing_suites", suite)?);
}
for variant in
["tag", "duplicate_merge", "page_rebuild", "memory_promotion", "graph_fact", "correction"]
{
assert!(array_contains_str(&report, "/summary/covered_future_variants", variant)?);

find_by_field(array_at(&report, "/queue_variants")?, "/variant", variant)?;
}
for field in [
"source_refs",
"affected_refs",
"confidence",
"unsupported_claim_flags",
"diff",
"policy",
"review_audit",
] {
assert!(array_contains_str(&report, "/required_item_fields", field)?);
}

assert!(service.contains("ELF_DREAMING_REVIEW_QUEUE_SCHEMA_V1"));
assert!(service.contains("pub async fn dreaming_review_queue"));
assert!(service.contains("source_mutation_allowed: false"));
assert!(service.contains("low_risk_derived_organization"));
assert!(service.contains("available_review_actions"));
assert!(service_lib.contains("pub mod dreaming_review_queue"));
assert!(service_lib.contains("DreamingReviewQueueResponse"));
assert!(routes.contains("/v2/admin/dreaming/review-queue"));
assert!(routes.contains("DreamingReviewQueueRequest"));
assert!(routes.contains("async fn dreaming_review_queue"));
assert!(mcp.contains("elf_dreaming_review_queue"));
assert!(mcp.contains("dreaming_review_queue_schema"));
assert!(mcp.contains("/v2/admin/dreaming/review-queue"));
assert!(consolidation_spec.contains("elf.dreaming_review_queue/v1"));
assert!(consolidation_spec.contains("source_mutation_allowed"));
assert!(consolidation_spec.contains("duplicate_merge"));
assert!(service_spec.contains("GET /v2/admin/dreaming/review-queue"));
assert!(service_spec.contains("source refs, affected refs, confidence"));
assert!(markdown.contains("Dreaming Review Queue Report"));
assert!(markdown.contains("Auto-apply is limited to approved low-risk"));
assert!(benchmarking_index.contains("2026-06-20-dreaming-review-queue-report.md"));
assert!(readme.contains("Dreaming review queue after XY-1021"));
assert!(readme.contains("elf.dreaming_review_queue/v1"));

Ok(())
}

#[test]
fn operator_approved_public_proxy_private_addendum_preserves_boundary() -> Result<()> {
let report = serde_json::from_str::<Value>(&fs::read_to_string(
Expand Down
Loading