LearnNewsExamplesServices
Frontmatter
id13978
titleGolden Path query failures must not false-green
stateClosed
labels
bugairegressionarchitecturemodel-experience
assigneesneo-gpt
createdAtJun 25, 2026, 1:49 AM
updatedAtJun 25, 2026, 2:07 AM
githubUrlhttps://github.com/neomjs/neo/issues/13978
authorneo-gpt
commentsCount0
parentIssue13755
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJun 25, 2026, 2:07 AM

Golden Path query failures must not false-green

Closed v13.1.0/archive-v13-1-0-chunk-6 bugairegressionarchitecturemodel-experience
neo-gpt
neo-gpt commented on Jun 25, 2026, 1:49 AM

Context

A live Golden Path run on 2026-06-24 exposed a remaining #13755 false-green path after the stale-handoff zero-candidate fix in #13962/#13963. The scheduler state recorded golden-path.lastSuccessAt = 2026-06-24T23:00:37.505Z, but the generated resources/content/sandman_handoff.md still contained stale Captured at: 2026-06-22... sections and stale per-author PR blocks removed from the current renderer.

Release classification: post-release hardening under #13755; boardless unless the operator explicitly promotes it.

Live latest-open sweep: checked latest 20 open issues at 2026-06-24T23:48:06Z. #13755 is the parent epic; #13962 is a closed sibling for the zero-semantic-candidate overwrite case; no equivalent open leaf found.

A2A in-flight claim sweep: checked latest 30 messages at 2026-06-24T23:48Z. Recent claims covered #13835, #13936, #13977, and #12073; no overlapping Golden Path query-failure claim found.

KB/local duplicate sweep: local issue search found the closed #13962 stale-handoff sibling and the #13755 false-green parent. Knowledge Base ticket search for GoldenPathSynthesizer Chroma Error finding id false-green lastSuccessAt stale sandman handoff surfaced historical Chroma/query-error context and #12073, but no equivalent open leaf.

The Problem

GoldenPathSynthesizer.synthesizeGoldenPath() catches unrecoverable semantic-query failures from Chroma and returns normally. runGoldenPathTask() then treats the resolved promise as success and calls TaskStateService.markCompleted(), which refreshes lastSuccessAt and records exit code 0.

That means a Golden Path task can fail before the centralized handoff rewrite, leave stale generated content on disk, and still tell operators and agents that the lane succeeded. This is exactly the #13755 telemetry-lie class, now on the in-process Golden Path path rather than a child stdout path.

Observed failure signature: Failed to query semantic vectors from ChromaDB. ChromaServerError: Error executing plan: Internal error: Error finding id at the same timestamp as the recorded scheduler success.

The Architectural Reality

ai/services/graph/GoldenPathSynthesizer.mjs owns the centralized sandman_handoff.md render pass and writes AiConfig.handoffFilePath. It already has an honest zero-candidate render path after #13963, but still has early-return paths before the write boundary for StorageRouter, collection, embedding, dimension, and Chroma query failures.

ai/daemons/orchestrator/scheduling/pipeline.mjs owns runGoldenPathTask(). It currently marks Golden Path completed whenever synthesizeGoldenPath() resolves, without a structured degraded/skipped outcome.

ai/daemons/orchestrator/services/TaskStateService.mjs is the visible operator contract: markCompleted() refreshes lastSuccessAt; markFailed() or an explicit skipped/degraded outcome is required for a non-success.

The Fix

Make Golden Path pre-render failures fail loud instead of resolving as success. The minimum acceptable shape is: a Chroma semantic-query failure must not call markCompleted() or refresh golden-path.lastSuccessAt.

Preferred shape: preserve the centralized overwrite contract by rendering a compact explicit degraded Golden Path section when the semantic route cannot be computed, then return or throw a structured outcome that lets the scheduler record degraded/skipped/failed state without claiming a successful route. Keep the orchestrator thin; the synthesizer owns render semantics, the scheduler owns task-state classification.

Contract Ledger Matrix

Target Surface Source of Authority Proposed Behavior Fallback Docs Evidence
resources/content/sandman_handoff.md ai/services/graph/GoldenPathSynthesizer.mjs Query failure produces fresh honest degraded handoff content or no success claim Existing stale content must not be paired with lastSuccessAt refresh learn/agentos/DreamPipeline.md Unit test with Chroma query throwing Error finding id
golden-path task state ai/daemons/orchestrator/scheduling/pipeline.mjs + TaskStateService.mjs Failed/degraded Golden Path does not refresh lastSuccessAt lastErrorAt or skipped/degraded metadata explains the reason #13755 Orchestrator scheduling unit test

Decision Record impact

Aligned with #13755. No ADR change expected.

Acceptance Criteria

  • When graphColl.query() throws during Golden Path synthesis, golden-path.lastSuccessAt is not refreshed.
  • The failure is visible through task state and/or health outcome with a specific semantic-query failure reason.
  • The handoff cannot remain stale while the scheduler records Golden Path success.
  • Unit coverage proves the Chroma Error finding id path does not false-green.
  • Existing zero-candidate overwrite coverage from #13962/#13963 remains green.

Out of Scope

  • Repairing the underlying Chroma collection corruption.
  • Changing Golden Path ranking weights or candidate semantics.
  • Reworking heavy-maintenance fairness or REM scheduling.
  • Manually editing the generated handoff file.

Related

Handoff Retrieval Hints

Search terms: GoldenPathSynthesizer Failed to query semantic vectors from ChromaDB Error finding id lastSuccessAt false-green, runGoldenPathTask markCompleted synthesizeGoldenPath returns, sandman_handoff stale captured at 2026-06-22 golden-path success.

tobiu closed this issue on Jun 25, 2026, 2:07 AM
tobiu referenced in commit 2a85cab - "fix(ai): fail loud on golden path query errors (#13978) (#13979)" on Jun 25, 2026, 2:07 AM