The manifest
Every review is recorded in a manifest in your main checkout, not the worktree, which is removed afterwards. It's written on every decision, so nothing is lost if the tab crashes, and it's shaped for a follow-up agent to act on: /deltaview:fix reads it to fix the rejected and commented items, and the next review of the branch reads it to carry decisions over.
What .deltaview/ holds
.deltaview/reviews/<ref>-<YYYYMMDD-HHMMSS>.json: the manifest..deltaview/reviews/<ref>-<YYYYMMDD-HHMMSS>.md: a human-readable rendering of the same manifest.
In file names, the ref has every run of characters outside A-Za-z0-9._- replaced by -, so feat/demo becomes feat-demo. .deltaview/ is added to .git/info/exclude, so it never shows in git status and no tracked file changes.
Shape
{
"version": 1,
"ref": "feat/checkout",
"target": "main",
"baseSha": "…", "headSha": "…",
"repo": "acme/shop",
"pr": { "number": 7, "url": "https://github.com/acme/shop/pull/7", "isAuthor": false },
"tests": { "command": "npm test", "passed": true, "summary": "42 passed" },
"newEnvVars": ["STRIPE_WEBHOOK_SECRET"],
"hunks": { "h1": { "id": "h1", "file": "src/api.ts", "status": "modified", "lines": [ … ] } },
"items": [{
"id": "i1", "tier": "indirect", "title": "Save button",
"route": "/orders/new", "selector": "[data-testid=\"save\"]",
"chain": ["Save button", "useSaveOrder()", "POST /api/orders", "orders.handler.ts"],
"affects": [], "hunkIds": ["h1"], "summary": "…",
"howToReach": null, "appearsUnused": false, "visuallyVerified": true,
"decision": "rejected", "comment": "Missing error state", "decidedAt": "2026-10-22T12:00:00.000Z",
"line": { "hunkId": "h1", "index": 4 }
}],
"previousReview": ".deltaview/reviews/feat-checkout-20261021-093000.json",
"status": "finished",
"reviewUrl": "https://github.com/acme/shop/pull/7#pullrequestreview-…",
"error": null,
"createdAt": "2026-10-22T11:40:00.000Z"
}Top level
ref,target,baseSha,headSha: what was reviewed. Base is the merge-base with the target.repoandpr:nullwhen there's no GitHub repo or open PR.tests: the command, pass/fail and a one-line summary, orcommand: nullwhen none was found.hunks: every hunk of the diff by id, with file, status (added,modified,deleted,renamed…) and lines taggedadd,delorctxwith old and new line numbers.status:in_progressorfinished.reviewUrlis set after posting;errorholds the last posting error.previousReview: on a re-review, the path of the earlier manifest decisions were carried over from.
Items
tier:direct,indirectorbackstage.route(a pathname, no query or hash) andselector(fordocument.querySelectorAll; the first match is the anchor): required for direct and indirect,nullfor backstage.chain: the breadcrumb from trigger to change, for indirect items.affects: other elements the change reaches, for shared code.hunkIds: the hunks this item covers. Each hunk is in exactly one item.visuallyVerified:falsefor backstage items.decision:approved,rejected,commentornull; withcommentanddecidedAt. A rejection always has a reason.line: the diff line a rejection or comment is anchored on, as{hunkId, index}into that hunk's lines, ornullfor the item's first change. Approvals have none.carriedOver:truewhen the decision came from the previous review because the item's edits are identical.changedSinceReview:truewhen no item in the previous review had the same edits.
