Skip to content

DLQ: formalize partial-build semantics for downstream artifacts and releases #95

@marklubin

Description

@marklubin

Context

PR #94 introduced --dlq for opt-in error classification during builds. GPT review raised valid concerns about partial-build semantics that are documented but not fully enforced by the system.

Open items from review

1. Downstream artifact metadata

When upstream artifacts are DLQ'd, downstream layers (monthly rollups, core memory) build from a reduced input set. Their provenance accurately reflects the inputs they received, but nothing on the artifact itself indicates it was built from incomplete inputs. Consider:

  • A partial_inputs: true metadata flag on artifacts whose parent layer had DLQ entries
  • Or a missing_parents field listing DLQ'd artifact descriptions

2. Release gating

synix release currently logs a warning when the source snapshot has DLQ entries, but does not block. Consider:

  • A --allow-partial flag (or --strict to block)
  • Persisting DLQ summary in the release receipt so downstream tooling can check

3. Classifier robustness

The current LLMErrorClassifier uses regex patterns on exception message strings. This is fragile across:

  • Provider SDK version changes
  • Different providers (Anthropic vs OpenAI vs compatible APIs)
  • Localized/wrapped error messages

Consider also checking exception class hierarchy (anthropic.BadRequestError, openai.AuthenticationError) as a more stable signal, falling back to regex.

4. Timeout classification

Concurrent path hardcodes 600s timeout as fatal. Sequential path has no equivalent timeout. Should timeouts go through the classifier? Should 429/5xx post-retry-exhaustion be DLQ instead of fatal?

5. Search/index behavior after DLQ

When episodes are DLQ'd, the search index omits them (correct), but there's no test or documentation confirming that search results don't reference DLQ'd artifacts via stale provenance chains.

Current state (what's already handled)

  • DLQ is opt-in (--dlq flag, default is fail-hard)
  • DLQ entries persisted in snapshot manifest
  • Release engine warns on partial snapshots
  • Per-layer DLQ counts in CLI summary
  • JSONL structured log records all DLQ events
  • 24 tests covering classification, persistence, downstream builds

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions