Skip to content

Todo create timeout can strand canonical validation projection #5007

Description

@huangruiteng

Problem

Creating a completion-validated Todo can commit its canonical record and still return a TypeScript Effect runtime timeout before the Python caller persists the private validation declaration. The authoritative Todo then says completion_validation_required=true with a digest, but todo project-markdown rejects the Goal because the declaration sidecar is absent. A later unrelated Todo update also reports projection delivery pending. Retrying todo add risks a duplicate because the original operation may already have committed.

Observed sequence

  1. loopx todo add includes --validation-command and calls coordination.local_authority.todo_create.
  2. The effect exceeds its response budget and the CLI returns an ambiguous "may have committed" error.
  3. Exact canonical readback shows the new Todo and its validation digest, but the private declaration file is missing. This is possible because provider_create.py persists it only after effect_runtime_result(...) returns successfully.
  4. loopx todo project-markdown --provider-revision ... --execute fails with private validation declaration does not match authority.

Expected

The create operation should recover the exact committed Todo and publish its matching private declaration idempotently before treating the request as complete. On an ambiguous timeout, the caller should expose a stable operation identity or another deterministic recovery path; duplicate creation must remain impossible. Projection should not be stranded by a successful authority commit followed by sidecar publication failure.

Owning boundary / regression

Inspect loopx/control_plane/todos/provider_create.py and the create effect's operation identity/timeout. Add a synthetic test that commits canonical creation, loses the effect response before sidecar persistence, then recovers the same Todo/declaration digest and successfully projects Markdown without a second Todo. Keep mismatched declarations fail-closed.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions