Skip to content

Goalpost: streaming indexed recursive WARP without full-state materialization #824

Open

Description

@flyingrobots

1. Background Context

Source: git-warp #824. Audited against main 94b40dac64034cd8caab9bb05efe14a0c22bd735. Template: nine-section-card; work type: type:goalpost.

Current scope and disposition: Tracking container for indexed streaming/recursive slices. Its checklist is delivery coverage, not one extra implementation PR or evidence every child must wait for every other child.

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

Discussion evidence, including corrections:

Planning role: tracking container; not an additional executable PR.

Additional source requirements/context:

Hill:
Make every git-warp operation independent of complete process-resident graph state. Roaring indexes select stable graph-local ordinals, bounded address pages resolve those ordinals to immutable CAS payloads, attachments remain streams, and graph-valued attachments recursively traverse other WARP graph bases with cycle safety, budgets, backpressure, and receipts.

Why this supersedes the immediate release roadmap:
A real Think migration completed scratch rewrite and verification, promoted prepared refs, and then failed promoted-runtime verification because a 23,995,927-byte logical replay basis reached the ordinary 5 MiB CBOR decoder ceiling. Rollback succeeded and recovery refs were retained.

The failure proves that the v19 bounded-reading work left a whole-state escape hatch in retained resume, hashing, checkpoint, comparison, BTR, migration, and attachment paths. Progress UI and migration documentation cannot make that substrate safe.

Freeze v19.0.1 publication while this goalpost is open. The existing v20.0.0 milestone already owns the streaming/materialization/traversal thesis and becomes the next functional release target.

Child slices:

Existing issue lineage:
Corrective completion of #626–#635, #734–#742, and #758–#760.

Related open debt: #185, #186, #192, #211, #225, #226, #228, #248, and #260.

Migration UX and guidance retained from #806–#812. #810 is blocked on the retained-state architecture; #811 and #812 remain follow-on work.

Closed predecessor issues remain historical records. This issue does not silently redefine what their original PRs proved.

Non-solution:
Increasing the global CBOR limit, embedding truncated CAS hashes in Roaring integers, or renaming a complete-state object does not satisfy this goalpost.

2. Problem Description

Plan: https://github.com/git-stunts/git-warp/blob/plan/streaming-recursive-materialization/docs/plans/streaming-indexed-recursive-warp.md
Design PR: #813

3. Proposed Solution

Tracking container for indexed streaming/recursive slices. Its checklist is delivery coverage, not one extra implementation PR or evidence every child must wait for every other child.

4. Prerequisites

No unsatisfied open-issue prerequisite established by this review. This is not proof that an unresolved design or external readiness condition is satisfied.

5. Scope

In: Tracking container for indexed streaming/recursive slices. Its checklist is delivery coverage, not one extra implementation PR or evidence every child must wait for every other child.

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.

This container owns coverage and reconciliation; child executable cards own implementation. Do not create duplicate PRs for already-owned outcomes.

6. Acceptance Criteria

  • No production port, adapter, service, command, or proof accepts or returns a complete graph state.
  • Full-state codecs, replay-basis storage, eager attachment APIs, and unbounded asset collection are deleted.
  • Targeted reads and patches use Roaring selection plus bounded address/payload pages.
  • Checkpoint, resume, comparison, BTR, export, migration, and diagnostics stream or use bounded external workspaces.
  • State identity is a deterministic commitment over retained roots.
  • Typed pinned/live graph attachments recursively traverse with cycle, sharing, budget, capability, redaction, and receipt semantics.
  • Recursive retention and doctor are cycle-safe and cross-repository authority remains explicit.
  • Generated oversized state and attachment fixtures pass under reviewed heap/RSS caps without checking large repositories into Git.
  • A disposable copy of the real Think repository passes migration, reopen, append, readings, attachment streaming, recursive traversal, receipts, and doctor.
  • Migration discovery, one-pass confirmation, progress, disk guidance, Wesley guidance, and API diagrams from Make v18-to-v19 migration discover graphs before confirmation #806–Define and satisfy the v19 migration guide requirements #810 are complete against the new representation.
  • Merged-main release evidence is current and green.

7. Definition of Done

Every required outcome maps to a merged executable child with evidence, or an explicit accepted deferral/removal. Reconcile stale claims before closing this container.

8. Test Plan

Golden: Reopen the same retained coordinate and compare roots/readings without replaying covered history.

Edges: Missing/wrong-kind roots, page limits, changed frontiers and alternate shard geometry.

Known failure modes: Refuse corrupt or unavailable bases; cancellation leaves retained roots valid.

Fuzz and stress: Generated graph/page growth under a fixed Docker heap; compare deterministic semantic results.

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.

9. Stakeholders

James Ross: maintainer, assignee and acceptance owner. git-warp contributors and consumers rely on this domain’s supported contract and reproducible evidence.

Related work:
No additional downstream blocker is established. Shared domain membership alone is not a prerequisite.

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. coderabbitai commented on Jul 27, 2026

    @coderabbitai
    🔗 Related PRs

    #93 - Fix recursive tree OID read fanout and release v17.0.1 [merged]
    #107 - Prepare v18.0.0 release metadata and final gates [merged]
    #732 - Fix: anchor state-cache payloads against Git GC [merged]
    #788 - Add one-shot v18-to-v19 retained-substrate migration [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!

  3. added
    priority:nextNext in line after active work.
    and removed
    area:storagePrimary work area: storage.
    priority:asapImmediate release pressure.
    on Jul 27, 2026
  4. added a commit that references this issue on Jul 29, 2026
  5. flyingrobots commented on Sep 14, 2026

    @flyingrobots
    MemberAuthor

    Child-slice ordering needs a correction

    Executing #814 surfaced a real dependency inversion in this goalpost's slice order.

    #814 removes loadReplayBasis, the contract that hands a complete WarpState across a production port. That removal is clean — typecheck passes, and pre-push Gates P and 0–8 (lint, type policy, anti-sludge, source-size, machine-paths, docs topology) all pass.

    Gate 9 refuses it, because three behavioural tests assert the zero-replay warm reopen guarantee that the full-state basis is currently the only mechanism for:

    • RuntimeHost.snapshotCache — a second materialize() must do zero further view builds and zero diffs
    • MaterializeController.stateSession — reopen exact retained roots with zero covered patch replay after restart, and rebuild an exact cached snapshot when retained roots are absent

    Verified as caused by the deletion, not pre-existing: both files are 22/22 green on origin/main at 2fb3e6e.

    The bounded replacement for that guarantee lives in #815 (retained graph manifests and bounded ordinal address pages) and #816 (Roaring selection plane), both listed after #814 here. For this guarantee the dependency runs the other way, so #814 cannot fully close first without regressing warm reopen.

    Detail and suggested disposition in #814 (comment) — either resequence #815/#816 ahead of the remaining #814 deletions, or split #814 so the replay-basis removal lands separately from the codec and _materializeGraph deletions.

    This does not change the goalpost's thesis or its release acceptance. It changes the order the slices can be closed in.

    https://claude.ai/code/session_01Lm5SuWCvLQFY7WjKqusJb6

  6. flyingrobots commented on Oct 1, 2026

    @flyingrobots
    MemberAuthor

    Delegated closure-candidate scrutiny: Requirements retained from delegated consolidation of #136: keep the distinction between in-process snapshots, Git-backed checkpoints, optional cache acceleration, and true out-of-core execution explicit in current documentation. Retain bounded debugger/provenance/replay/inspection behavior in this goalpost and its existing children. Closing #136 is tracking consolidation, not proof the retained-state architecture is finished.

  7. self-assigned this
    on Oct 1, 2026
  8. modified the milestones: v20.0.0, v21.0.0 on Oct 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions