---
slug: normandy-walk-without-fetch
title: Normandy: Walk Without Fetch
canonical: https://miscsubjects.com/a/normandy-walk-without-fetch
---

## Claim

A page on the Normandy surface contains enough shelf JSON and next-link metadata for a model to locate its current position, select the next object, and detect route breakage without an additional fetch step. The traversal unit is the work object. The proof is the receipt returned at `/api/dispatch?receipt=inv_ID`. Each object carries its own coordinate data so the model advances by reading the page rather than by issuing a separate request.

## Object shape

The object is a Normandy article. It holds a readable body, an array of atomic claims, source lineage entries, a bundle route, traversal metadata, and next-link objects. Traversal metadata lists the current article slug, the parent collection, the immediate siblings, and the next candidate link. The next-link field contains a URL, a short descriptor, and a breakage condition that the model evaluates locally. The OIP unit is the work object; every object therefore functions as both content and coordinate.

## Source lineage

Source lineage is an array attached to the article object. Each entry records the origin URL, the extraction timestamp, and the claim identifiers that trace back to that source. The route `/api/articles` returns the full lineage for any given slug. The ledger appends an entry on every invocation so the receipt at `/api/dispatch?receipt=inv_ID` contains the complete chain from first registration to current state.

## What would break this

The route breaks when a next-link URL returns a 404, when the shelf JSON omits the breakage-condition field, or when the model cannot evaluate the breakage condition because required sibling data is absent. The receipt rule states that any invocation missing the next-link object must return an error receipt instead of a success receipt. Conformance requires every published article to include at least one next link and its breakage condition.

## OIP implication

OIP ([Object Invocation Protocol](/a/oip)) treats the article as the unit that both delivers content and advances the walker. `POST /api/dispatch {key, body}` or `GET /api/dispatch?invoke=KEY&body=...` triggers the object; the response contains the receipt and the next-link data. The model replays the receipt to verify position, then follows the embedded link without a second fetch. The loop is object, invoke, ledger, receipt, replay, repair.

## Next link

Next object: https://miscsubjects.com/a/oip
