Skip to content

Traverse recursive WARP graphs with cycle-safe bounded receipts #820

Description

@flyingrobots

1. Background Context

Source: git-warp #820. Audited against main 94b40dac64034cd8caab9bb05efe14a0c22bd735. Template: feature; work type: type:feature.

Current scope and disposition: Traverse typed references with child-local indexed selection; queue, cursor and cancellation guarantees belong here, not in a docs-only roadmap.

Reported context (historical names and counts require the current disposition above):
Plan: https://github.com/git-stunts/git-warp/blob/plan/streaming-recursive-materialization/docs/plans/streaming-indexed-recursive-warp.md
Design PR: #813

2. Problem Description

Traverse typed references with child-local indexed selection; queue, cursor and cancellation guarantees belong here, not in a docs-only roadmap.

Historical source report; the current disposition above supersedes obsolete claims:
Extend indexed traversal across graph-valued attachments without call-stack recursion, global ordinal assumptions, eager child materialization, or infinite expansion.

  • Use an explicit async work queue with backpressure and cancellation.
  • Apply each child graph local Roaring selection and address roots.
  • Track visited identity by graph identity, retained root, and coordinate.
  • Distinguish first expansion, shared reference, direct/indirect cycle, unresolved locator, redaction, and budget exhaustion.
  • Support depth, graph, node, edge, result, byte, time, and concurrency budgets.
  • Preserve occurrence paths while avoiding repeated basis expansion.
  • Emit continuation cursors and transitive receipts.

2b. Proposed Solution

Traverse typed references with child-local indexed selection; queue, cursor and cancellation guarantees belong here, not in a docs-only roadmap.

Historical approach to reconcile:
Current architecture rules take precedence: parsing/encoding stays at adapters, domain concepts are runtime-backed, no trust casts are introduced, and tests run in Docker.
Extend indexed traversal across graph-valued attachments without call-stack recursion, global ordinal assumptions, eager child materialization, or infinite expansion.

  • Use an explicit async work queue with backpressure and cancellation.
  • Apply each child graph local Roaring selection and address roots.
  • Track visited identity by graph identity, retained root, and coordinate.
  • Distinguish first expansion, shared reference, direct/indirect cycle, unresolved locator, redaction, and budget exhaustion.
  • Support depth, graph, node, edge, result, byte, time, and concurrency budgets.
  • Preserve occurrence paths while avoiding repeated basis expansion.
  • Emit continuation cursors and transitive receipts.

2c. Alternatives considered and rejected

No additional alternatives are recorded as decided. Reject duplicate ownership, private-import escape hatches and a broken intermediate mainline; retain original alternatives below when present.

2d. Acceptance Criteria

  • Direct and indirect cycles terminate deterministically.
  • Shared child graphs are expanded once while all reference paths remain observable.
  • Slow consumers do not cause unbounded queue growth.
  • Every opened child basis and live-locator resolution appears in the receipt.
  • Limit exhaustion reports incomplete posture and a usable cursor.
  • No traversal path constructs a complete parent or child graph.

2e. Test Plan

Golden: Attach, replace, clear and stream node/edge content through supported package imports.

Edges: Missing owners/handles, size boundaries, history and concurrent updates.

Known failure modes: Staging failure, missing capability, truncation and cancellation publish no partial result.

Fuzz and stress: Generated large payloads, slow consumers and recursive cycles where in scope, under a Docker heap cap.

All tests and benchmarks execute in COPY-based Docker containers without host repository or Git-directory mounts. This planning audit does not claim those checks were run.

3. Prerequisites

Completion prerequisites; preparatory work may start earlier.

4. Scope

In: Traverse typed references with child-local indexed selection; queue, cursor and cancellation guarantees belong here, not in a docs-only roadmap.

Out: unrelated domain work and any expansion beyond the issue’s stated observable outcome.

Safe intermediate state: the PR builds and passes relevant checks after its listed prerequisites; existing supported behavior remains usable. Any preparatory step must be independently mergeable.

Domain review, 2026-10-01 — accepted ownership / scope correction:

Consume #903 ownership laws as well as #819 reference encoding. Apply finite-owned structure and potentially cyclic external-reference rules correctly; do not infer ownership from traversal reachability.

5. Why now

Maintainer ordering: memory correctness first, supported attachments next, then land eligible PRs. Preserve this card’s existing priority unless a separately recorded scope decision changes it.

6. Risks

Main risk: implementing the historical description instead of the current runtime contract. Preserve compatibility, causal/ownership invariants and bounded behavior relevant to attachments.

7. Definition of Done

The issue-specific acceptance checks pass, relevant validation evidence is attached, and the issue links the coherent PR and resulting mainline integration commit. No open item is hidden in a later repair PR.

8. Stakeholders

James Ross: maintainer, assignee and acceptance owner. Public API consumers rely on reachable node/edge attachment operations and honest ownership.

9. Related Issues

  • Blocks completion of #822: Migration explicitly verifies recursive traversal in scratch and repeats that verification after promotion. Reference encoding alone cannot establish cycle termination, shared-child handling or bounded traversal.
  • Blocks completion of #823: The final proof explicitly includes shared children, cycles, live locators and slow recursive consumers.

Historical paths, counts, release names and shell examples in source material are evidence to reconcile, not authority to restore retired documentation or run host tests.

Activity

  1. added this to the v20.0.0 milestone on Jul 27, 2026
  2. added
    type:featureNew capability or product behavior.
    priority:asapImmediate release pressure.
    area:queryPrimary work area: query.
    status:availableOpen and available for prioritization; not blocked or actively in progress.
    on Jul 27, 2026
  3. coderabbitai commented on Jul 27, 2026

    @coderabbitai
    🔗 Related PRs

    #639 - Guard fresh live observer materialization [merged]
    #755 - fix: retain bounded materialization roots [merged]
    #762 - Read retained properties through git-cas 6.5 [merged]
    #771 - feat: resume retained materialization predecessors [merged]
    #813 - Define streaming indexed recursive WARP architecture [open]


    📝 Issue Planner

    Check the box below or use the @coderabbitai plan command to generate an implementation plan and prompts that you can use with your favorite coding assistant.

    • Create Plan

    🧪 Issue enrichment is currently in open beta.

    You can configure auto-planning by selecting labels in the issue_enrichment configuration.

    To disable automatic issue enrichment, add the following to your .coderabbit.yaml:

    issue_enrichment:
      auto_enrich:
        enabled: false

    💬 Have feedback or questions? Drop into our discord!

  4. added
    priority:nextNext in line after active work.
    and removed
    priority:asapImmediate release pressure.
    on Jul 28, 2026
  5. added
    priority:asapImmediate release pressure.
    and removed
    priority:nextNext in line after active work.
    on Sep 29, 2026
  6. self-assigned this
    on Oct 1, 2026
  7. added
    status:blockedBlocked by an explicit dependency or external condition.
    and removed
    status:availableOpen and available for prioritization; not blocked or actively in progress.
    on Oct 1, 2026
  8. modified the milestones: v20.0.0, v21.0.0 on Oct 2, 2026
  9. added
    priority:nextNext in line after active work.
    and removed
    priority:asapImmediate release pressure.
    on Oct 3, 2026
  10. flyingrobots commented on Oct 3, 2026

    @flyingrobots
    MemberAuthor

    Maintainer approved priority:asap → priority:next on October 3, 2026 so the completed v20 byte-attachment/lifecycle release can publish before production recursive graph support. This issue remains open in v21 with its scope, prerequisites and assignee unchanged. Decision and release rationale: #876 (comment). This priority change is not completion or removal of the issue.

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

Metadata

Metadata

Assignees

Labels

area:queryPrimary work area: query.domain:attachmentspriority:nextNext in line after active work.status:blockedBlocked by an explicit dependency or external condition.template:featureCard template: featuretype:featureNew capability or product behavior.

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions