Skip to content

repo-assist: enforce ordered backlog traversal and consistent cursor transitions #413

Open

Description

@dsyme

Summary

Repo Assist's backlog cursors are schema-validated as positive numbers, but ordering, continuation, and reset semantics are not enforced. A Paket run described its scan as oldest-first and its cursor as advanced, while searching newest-first and persisting a lower cursor. Other runs also ignored the explicit oldest-first Task 2 rule.

All examples deploy canonical revision 139fa09ef17cde4135e696ff8e7af09bc5ddfa6e.

Concrete Paket reproduction

Run 42530420658

  • Initial labelling_after: 4150.
  • Agent said it would resume oldest-first after that cursor.
  • Actual search used sort: created, order: desc, limit 10.
  • Returned: 4200, 4198, 4193, 4164, 4153, 4149, 4148, 4147, 4146, 4143.
  • Labelled four issues (#4200, #4198, #4193, #4149), based on titles.
  • Persisted labelling_after: 4143, describing it as advanced.
  • Did not record dispositions for the other six returned items or an explicit end-of-backlog reset.
  • Schema validation and memory push succeeded. Persisted memory commit.

The actual four label mutations were independently verified in issue events. This is not a failed write: the contradictory traversal state was successfully persisted.

Other examples

FSharp.TypeProviders.SDK and SwaggerProvider used issue listings without explicit ascending ordering, received newest-first results, and did not record traversal progress.

Task 2 explicitly requires creation-date ascending traversal, resumption from the cursor, and reset at the end. Task 1 says to resume the backlog cursor but does not spell out the same ordering/reset contract; that ambiguity should be resolved, rather than assuming its current text already mandates ascending order.

Suggested improvement

  • Define one precise ordered traversal/continuation/reset contract for labelling and investigation.
  • Provide a canonical query that explicitly requests ascending creation order and applies the cursor.
  • Advance only past items actually assessed or explicitly deferred, so pagination does not silently skip work.
  • Make reset explicit and distinguish it from an ordinary backwards cursor transition.
  • Validate semantic transitions, not only positive-number shape, or keep continuation as a deterministic pre-step rather than model-generated bookkeeping.

Regression examples should include initial cursor 4150, mixed older/newer items, partially processed batches, skipped uncertain labels, and end-of-backlog reset. Do not demand comments or definitive bug labels for ambiguous issues; recording a cautious disposition is sufficient.

Observed consequence: misleading persisted progress and a risk of repeated/newest-only scans or starvation. This review does not prove exactly which future issue would be starved.

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