{
  "schemaVersion": 1,
  "scope": {
    "registryPath": "~/.artshelf/ledgers.json",
    "ledgerCount": 3,
    "health": "attention",
    "registryHealth": "ok",
    "affectedLedgers": [
      {
        "name": "example-project",
        "ledgerPath": "/path/to/example-project/.artshelf/ledger.jsonl",
        "validationStatus": "ok"
      }
    ]
  },
  "plans": [
    {
      "type": "cleanup",
      "ledgerPath": "/path/to/example-project/.artshelf/ledger.jsonl",
      "planId": "plan_20260606_120000_ab12",
      "planPath": "/path/to/example-project/.artshelf/plans/plan_20260606_120000_ab12.json",
      "approvalTarget": "approve artshelf cleanup ledger /path/to/example-project/.artshelf/ledger.jsonl plan plan_20260606_120000_ab12"
    }
  ],
  "summary": {
    "executable": 1,
    "skipped": 2,
    "refused": 0,
    "manualReview": 1,
    "missingPath": 2,
    "trashed": 0
  },
  "decisionSummary": {
    "readyForApproval": 3,
    "needsReviewFirst": 2,
    "blocked": 1
  },
  "decisionGroups": {
    "readyForApproval": [
      {
        "label": "Clean up temp debug output",
        "itemIds": [
          "shf_20260606_120000_ab12"
        ],
        "actionType": "cleanup",
        "approvalTarget": "approve artshelf cleanup ledger /path/to/example-project/.artshelf/ledger.jsonl plan plan_20260606_120000_ab12",
        "reason": "Disposable temp artifact has a reviewed cleanup plan.",
        "nextStep": "Approve the exact cleanup plan to move the artifact into Artshelf trash."
      },
      {
        "label": "Review 1 reconcile remap finding(s) in example-project",
        "itemIds": [
          "shf_20260606_121500_gh78"
        ],
        "actionType": "reconcile",
        "approvalTarget": "approve artshelf reconcile ledger /path/to/example-project/.artshelf/ledger.jsonl plan plan_20260606_122000_repl",
        "reason": "Parent folder drift looks safe to reconcile after inspection and review.",
        "nextStep": "run `artshelf reconcile --execute --plan-id plan_20260606_122000_repl --ledger /path/to/example-project/.artshelf/ledger.jsonl` after approval."
      },
      {
        "label": "Resolve missing report record",
        "itemIds": [
          "shf_20260606_120500_cd34"
        ],
        "actionType": "resolve-missing",
        "approvalTarget": "approve artshelf resolve missing ledger /path/to/example-project/.artshelf/ledger.jsonl ids shf_20260606_120500_cd34",
        "reason": "The report path is already missing.",
        "nextStep": "Approve the ledger-only resolve command after confirming the report is no longer needed."
      }
    ],
    "needsReviewFirst": [
      {
        "label": "Review 1 reconcile resolve-stale-trash finding(s) in example-project",
        "itemIds": [
          "shf_20260606_121800_jk90"
        ],
        "actionType": "reconcile",
        "approvalTarget": null,
        "reason": "Trash references point to trashed artifacts whose originals moved or got deleted.",
        "nextStep": "run `artshelf reconcile --dry-run --ledger /path/to/example-project/.artshelf/ledger.jsonl --json`, then approve with `approve artshelf reconcile ledger /path/to/example-project/.artshelf/ledger.jsonl plan <plan-id>`"
      },
      {
        "label": "Review 1 reconcile registry-remap finding(s) in example-project",
        "itemIds": [
          "shf_20260606_121900_lm01"
        ],
        "actionType": "reconcile",
        "approvalTarget": null,
        "reason": "Ledger name or registry path drift needs explicit review before remapping records.",
        "nextStep": "run `artshelf reconcile --dry-run --ledger /path/to/example-project/.artshelf/ledger.jsonl --json`, then approve with `approve artshelf reconcile ledger /path/to/example-project/.artshelf/ledger.jsonl plan <plan-id>`"
      }
    ],
    "blocked": [
      {
        "label": "Review 1 reconcile blocked finding(s) in example-project",
        "itemIds": [
          "shf_20260606_122200_qr11"
        ],
        "actionType": "reconcile",
        "approvalTarget": null,
        "reason": "Path drift is ambiguous or unsafe and needs manual investigation.",
        "nextStep": "Run a manual artifact-by-artifact review and decide whether to keep, resolve, or move the ledger entry."
      }
    ]
  },
  "recommendation": "Run reconcile dry-run for stale/missing path entries, then follow the exact approvals returned in the review packet.",
  "items": [
    {
      "id": "shf_20260606_120000_ab12",
      "path": "/tmp/example-debug-output",
      "classification": "trash-safe",
      "proposedAction": "execute reviewed cleanup plan",
      "dueStatus": "due",
      "reason": "temporary debug output retained for 3 days",
      "note": "The path exists, cleanup=trash, and the dry-run plan moves it into Artshelf trash."
    },
    {
      "id": "shf_20260606_120500_cd34",
      "path": "/tmp/missing-report.json",
      "classification": "resolve-candidate",
      "proposedAction": "resolve ledger-only after confirmation",
      "dueStatus": "missing-path",
      "reason": "report path is already missing",
      "note": "Resolution updates only the ledger and does not move or delete files."
    },
    {
      "id": "shf_20260606_121800_jk90",
      "path": "/tmp/stale-trash-record.json",
      "classification": "resolve-candidate",
      "proposedAction": "reconcile stale trashed entry after review",
      "dueStatus": "trashed",
      "reason": "trash path is stale after source artifact delete",
      "note": "Run reconcile to confirm whether to rewrite the artifact path or resolve manually."
    },
    {
      "id": "shf_20260606_121900_lm01",
      "path": "/path/to/example-project/src/legacy/file.txt",
      "classification": "registry-problem",
      "proposedAction": "inspect registry-backed path drift",
      "dueStatus": "missing-path",
      "reason": "Artifact moved by repository migration from .shelf to .artshelf",
      "note": "Review registry identity and run reconcile dry-run before executing any path updates."
    },
    {
      "id": "shf_20260606_122200_qr11",
      "path": "/tmp/blocked-dupe-path",
      "classification": "registry-problem",
      "proposedAction": "manual investigation required",
      "dueStatus": "manual-review",
      "reason": "reconstructed paths conflicted with another active artifact",
      "note": "Blocked finding intentionally requires human disambiguation."
    }
  ],
  "alternatives": [
    "keep the artifact and change retention",
    "inspect the path before approving cleanup",
    "regenerate the plan after edits",
    "resolve missing records ledger-only"
  ],
  "safety": {
    "dryRunOnly": true,
    "executeAllRefused": true,
    "noExecuteRan": true,
    "noResolveRan": true,
    "noDeleteRan": true
  },
  "verification": {
    "command": "artshelf review --all --json",
    "successCondition": "no due, manual-review, missing-path, executable, or refused entries remain unless explicitly reported"
  }
}
