{
  "format": "kerf-keep-starter-pack-native-csv-validation-cases",
  "schemaVersion": 2,
  "date": "2026-11-05",
  "status": "PARTIALLY_EXECUTED",
  "case_count": 18,
  "nominal_case_count": 6,
  "execution_receipt": {
    "location_scope": "Workspace audit evidence, not included customer-pack members",
    "base": "outputs/team-workstreams-20261105/02-starter-pack/validation-source/runs/02-starter-csv-2026-11-06T01-09-49-364898Z/",
    "terminal": {
      "file": "terminal-receipt.json",
      "sha256": "0a30d700357f6b832f8308905ee618fd8dcc7f74029bc460c0171264ff17b813"
    },
    "outer": {
      "file": "validation-report.json",
      "sha256": "f8e3ac7887ad059d565143042fb5a3f67e4c55127a17675bf4c944139406a621"
    },
    "native": {
      "file": "starter-pack-csv-report.json",
      "sha256": "2a307e34feb35117a28cf1db4bb2d9e1a104c66c2f68115444e0230170c78a02",
      "status": "PASSED_SCOPED_STARTER_PACK_CSV_CHECKS",
      "actualStart": "2026-11-06T01:10:29Z",
      "actualEnd": "2026-11-06T01:10:29Z",
      "groups": 12,
      "allPassed": true
    },
    "helper_sha256": "4b003a4b6bee6d17dba9f1c23cebf498c8b23372ecebe9c7bedfc6159da85c01"
  },
  "provenance": "fixture-provenance.json",
  "authorization_boundary": "This retained18-case plan is broader than the actual macOS NativeCSV helper. Actual scope below passed; all original expected/steps fields remain planned assertions unless expressly included in actualScope. The evidence does not authorize further execution or certify iOS, UI, workspace libraries, solver, PDF, browser or publication.",
  "source_contract": {
    "entrypoints": [
      "NativeCSV.read",
      "NativeCSV.preview",
      "NativeCSV.apply",
      "NativeCSV.export",
      "CSVImportView.validate/apply",
      "AppState.performSolve/useInventory/applyStockAdjustment",
      "NativeExport.committedRemnants"
    ],
    "pins": "The13 source_sha256 pins in provenance record HISTORICAL preparation. Its separate actual_run_inputs and execution receipt identify the Swift/Core/helper inputs for the actual scoped compile/run.",
    "comparison": "Map expected_rows using expected_row_columns in provenance. Compare exact canonical integer ticks and all represented row values. Source IDs are provenance only. Missing fixture notes are expected as empty strings. Stock trim, costCents and lineage are absent, not zero. No solver result is necessary for CSV parsing/application cases.",
    "nominal_steps": [
      "Read the named UTF-8 CSV using NativeCSV.read",
      "Run NativeCSV.preview with named kind/units, first delimiter comma and separately auto",
      "Assert ok true, no error issue, exact headers, expected row count, sum quantity and canonical fields",
      "Use a fresh value copy of the matching source fixture Project, then NativeCSV.apply with mode replace",
      "Compare returned matching list with provenance expected rows, including freshly allocated IDs",
      "Assert other list, project ID/name/display units/settings unchanged; input Project value unchanged"
    ],
    "native_api_visibility": "NativeCSV.apply returns Project only and does not expose successful core apply issues. Assert resulting binding/rows directly; inspect CSV_INVENTORY_UNBOUND or CSV_IDS_ALLOCATED only in a separately recorded direct-core check, not as fields returned by NativeCSV.apply.",
    "mutation_policy": "Negative cases alter disposable text or project copies explicitly. Mutated quantities or dimensions are test inputs, never replacement fixture/sample facts. Do not edit source fixtures or supplied CSVs.",
    "future_receipt": [
      "Exact source and CSV hashes",
      "Native platform/build identity and invocation route",
      "Case/subcase ID and actual parameters",
      "Observed row/tick values or exact error/issue",
      "Before/after project and inventory identity/digest where relevant",
      "Actual status and retained evidence path"
    ],
    "plan_expectations_scope": "Original nominal_steps and per-case expected/steps are retained as plan definitions. Literal IDs, headers, diagnostic locations and UI/library assertions are not converted into observations by a partial case status."
  },
  "cases": [
    {
      "id": "CSV01",
      "status": "PARTIALLY_EXECUTED",
      "title": "Cabinet parts nominal import",
      "file": "csv/cabinet-plywood-parts.csv",
      "fixture": "cabinet-plywood",
      "kind": "parts",
      "units": "mm",
      "mode": "replace",
      "procedure": "source_contract.nominal_steps",
      "expected": {
        "ok": true,
        "data_rows": 4,
        "sum_quantity": 7,
        "rows": "provenance files[path].expected_rows",
        "ids": [
          "csv-part-1",
          "csv-part-2",
          "csv-part-3",
          "csv-part-4"
        ]
      },
      "actualScopePass": true,
      "actualScope": "Passed actual macOS NativeCSV.read/preview/apply/export/re-preview/re-apply for this file against ORIGINAL decoded fixture represented fields, exact ticks and quantities. Checked nominal fresh-ID uniqueness/disjointness, roundtrip retired-ID disjointness, opposite fallback-unit explicit suffixes, project scope and input-value immutability.",
      "unexecutedPlanAssertions": "Exact preview headers, returned delimiter, every planned same-unit/delimiter combination and literal allocated ID strings were not asserted."
    },
    {
      "id": "CSV02",
      "status": "PARTIALLY_EXECUTED",
      "title": "Cabinet stock nominal import",
      "file": "csv/cabinet-plywood-stock.csv",
      "fixture": "cabinet-plywood",
      "kind": "stock",
      "units": "mm",
      "mode": "replace",
      "procedure": "source_contract.nominal_steps",
      "expected": {
        "ok": true,
        "data_rows": 1,
        "sum_quantity": 1,
        "rows": "provenance files[path].expected_rows",
        "ids": [
          "csv-stock-1"
        ],
        "inventoryId": null,
        "inventoryRevision": null
      },
      "actualScopePass": true,
      "actualScope": "Passed actual macOS NativeCSV.read/preview/apply/export/re-preview/re-apply for this file against ORIGINAL decoded fixture represented fields, exact ticks and quantities. Checked nominal fresh-ID uniqueness/disjointness, roundtrip retired-ID disjointness, opposite fallback-unit explicit suffixes, project scope and input-value immutability.",
      "unexecutedPlanAssertions": "Exact preview headers, returned delimiter, every planned same-unit/delimiter combination and literal allocated ID strings were not asserted. No workspace library/UI was exercised."
    },
    {
      "id": "CSV03",
      "status": "PARTIALLY_EXECUTED",
      "title": "Inch fraction parts nominal import",
      "file": "csv/inch-fraction-workshop-parts.csv",
      "fixture": "inch-fraction-workshop",
      "kind": "parts",
      "units": "in",
      "mode": "replace",
      "procedure": "source_contract.nominal_steps",
      "expected": {
        "ok": true,
        "data_rows": 3,
        "sum_quantity": 5,
        "rows": "provenance files[path].expected_rows",
        "ids": [
          "csv-part-1",
          "csv-part-2",
          "csv-part-3"
        ]
      },
      "actualScopePass": true,
      "actualScope": "Passed actual macOS NativeCSV.read/preview/apply/export/re-preview/re-apply for this file against ORIGINAL decoded fixture represented fields, exact ticks and quantities. Checked nominal fresh-ID uniqueness/disjointness, roundtrip retired-ID disjointness, opposite fallback-unit explicit suffixes, project scope and input-value immutability.",
      "unexecutedPlanAssertions": "Exact preview headers, returned delimiter, every planned same-unit/delimiter combination and literal allocated ID strings were not asserted."
    },
    {
      "id": "CSV04",
      "status": "PARTIALLY_EXECUTED",
      "title": "Inch stock nominal import",
      "file": "csv/inch-fraction-workshop-stock.csv",
      "fixture": "inch-fraction-workshop",
      "kind": "stock",
      "units": "in",
      "mode": "replace",
      "procedure": "source_contract.nominal_steps",
      "expected": {
        "ok": true,
        "data_rows": 1,
        "sum_quantity": 1,
        "rows": "provenance files[path].expected_rows",
        "ids": [
          "csv-stock-1"
        ],
        "inventoryId": null,
        "inventoryRevision": null
      },
      "actualScopePass": true,
      "actualScope": "Passed actual macOS NativeCSV.read/preview/apply/export/re-preview/re-apply for this file against ORIGINAL decoded fixture represented fields, exact ticks and quantities. Checked nominal fresh-ID uniqueness/disjointness, roundtrip retired-ID disjointness, opposite fallback-unit explicit suffixes, project scope and input-value immutability.",
      "unexecutedPlanAssertions": "Exact preview headers, returned delimiter, every planned same-unit/delimiter combination and literal allocated ID strings were not asserted. No workspace library/UI was exercised."
    },
    {
      "id": "CSV05",
      "status": "PARTIALLY_EXECUTED",
      "title": "Mixed material parts nominal import",
      "file": "csv/mixed-offcut-reuse-parts.csv",
      "fixture": "mixed-offcut-reuse",
      "kind": "parts",
      "units": "mm",
      "mode": "replace",
      "procedure": "source_contract.nominal_steps",
      "expected": {
        "ok": true,
        "data_rows": 3,
        "sum_quantity": 6,
        "rows": "provenance files[path].expected_rows",
        "ids": [
          "csv-part-1",
          "csv-part-2",
          "csv-part-3"
        ],
        "material_boundary": "birch-plywood-18 stays distinct from mdf-6; grain and rotation stay row-specific"
      },
      "actualScopePass": true,
      "actualScope": "Passed actual macOS NativeCSV.read/preview/apply/export/re-preview/re-apply for this file against ORIGINAL decoded fixture represented fields, exact ticks and quantities. Checked nominal fresh-ID uniqueness/disjointness, roundtrip retired-ID disjointness, opposite fallback-unit explicit suffixes, project scope and input-value immutability.",
      "unexecutedPlanAssertions": "Exact preview headers, returned delimiter, every planned same-unit/delimiter combination and literal allocated ID strings were not asserted."
    },
    {
      "id": "CSV06",
      "status": "PARTIALLY_EXECUTED",
      "title": "Mixed offcut stock nominal import",
      "file": "csv/mixed-offcut-reuse-stock.csv",
      "fixture": "mixed-offcut-reuse",
      "kind": "stock",
      "units": "mm",
      "mode": "replace",
      "procedure": "source_contract.nominal_steps",
      "expected": {
        "ok": true,
        "data_rows": 3,
        "sum_quantity": 3,
        "rows": "provenance files[path].expected_rows",
        "ids": [
          "csv-stock-1",
          "csv-stock-2",
          "csv-stock-3"
        ],
        "kinds": [
          "remnant",
          "remnant",
          "sheet"
        ],
        "inventoryId": null,
        "inventoryRevision": null
      },
      "actualScopePass": true,
      "actualScope": "Passed actual macOS NativeCSV.read/preview/apply/export/re-preview/re-apply for this file against ORIGINAL decoded fixture represented fields, exact ticks and quantities. Checked nominal fresh-ID uniqueness/disjointness, roundtrip retired-ID disjointness, opposite fallback-unit explicit suffixes, project scope and input-value immutability.",
      "unexecutedPlanAssertions": "Exact preview headers, returned delimiter, every planned same-unit/delimiter combination and literal allocated ID strings were not asserted. Manual remnant kind is not tested committed-label eligibility."
    },
    {
      "id": "CSV07",
      "status": "PARTIALLY_EXECUTED",
      "title": "All six NativeCSV export/preview/apply roundtrips",
      "files": "All six provenance files",
      "steps": [
        "For each CSV01-CSV06 returned Project, call NativeCSV.export for the matching kind",
        "Preview exported text with the opposite fallback unit and auto delimiter",
        "Compare represented values and exact ticks with the first preview, ignoring row ID changes",
        "Apply replace again to the first applied Project",
        "Check fresh IDs avoid those reserved by its replaced list; do not expect original IDs or byte-identical CSV"
      ],
      "expected": {
        "preview_ok": true,
        "row_counts_and_quantities": "Unchanged per nominal case",
        "settings": "Target settings retained; not reconstructed from CSV",
        "blank_cost_trim": "Absent properties remain absent",
        "text_identity": "Not required; native export uses CRLF and its exact dimension formatter"
      },
      "source": "NativeCSV.export/apply; Core/csv.js exportProjectCSV, exportDimension, applyProjectCSV",
      "actualScopePass": true,
      "actualScope": "All six files passed export/re-preview/re-apply represented-row equality and retired-ID disjointness; original Project values and unselected fields/settings remained unchanged.",
      "unexecutedPlanAssertions": "Roundtrip-ID uniqueness was not separately asserted. Literal ID sequences, byte-identical CSV and all plan combinations are not observed claims."
    },
    {
      "id": "CSV08",
      "status": "PARTIALLY_EXECUTED",
      "title": "Explicit unit suffixes survive opposite picker selection",
      "files": "All six supplied CSVs unchanged",
      "steps": [
        "Preview each mm file with units in, and each inch file with units mm",
        "Use the correct kind and comma delimiter",
        "Compare all canonical dimensions with provenance"
      ],
      "expected": {
        "ok": true,
        "ticks": "Exactly the nominal expected ticks for every row",
        "meaning": "Suffix wins; this does not prove unsuffixed text is unit-safe"
      },
      "source": "Core/dimensions.js parse suffix selection; NativeCSV.preview",
      "actualScopePass": true,
      "actualScope": "All six original explicitly suffixed CSVs passed preview with the opposite fallback unit and automatic separator, with exact represented fields compared to original fixtures.",
      "unexecutedPlanAssertions": "No GUI picker was used. Exact headers/returned delimiter and every unit/delimiter combination were not separately asserted."
    },
    {
      "id": "CSV09",
      "status": "PARTIALLY_EXECUTED",
      "title": "Wrong fallback unit can silently rescale unsuffixed decimals",
      "file": "csv/cabinet-plywood-stock.csv",
      "mutation": "In a disposable copy only, replace width 2440 mm with 2440, height 1220 mm with 1220 and thickness 18 mm with 18; leave label and all other cells unchanged.",
      "parameters": {
        "kind": "stock",
        "units": "in",
        "delimiter": ","
      },
      "steps": [
        "Preview the mutated text without applying to real stock",
        "Compare with original fixture ticks"
      ],
      "expected": {
        "ok": true,
        "data_rows": 1,
        "quantity": 1,
        "width_ticks": 2479040000,
        "height_ticks": 1239520000,
        "thickness_ticks": 18288000,
        "scale_error": "25.4 times each intended dimension; these values remain within parser bounds",
        "review_action": "Reject this as the wrong intended size. Repair the suffixes or fallback unit and preview again; parse success cannot infer intended units."
      },
      "source": "Core/dimensions.js parse defaultUnit and MAX_TICKS",
      "actualScopePass": true,
      "actualScope": "Disposable unsuffixed cabinet stock previewed as valid under inch fallback and matched exact25.4x scaling of original width/height/thickness; other represented fields were compared. The control was not applied.",
      "unexecutedPlanAssertions": "Human reject/repair/re-preview workflow was not executed."
    },
    {
      "id": "CSV10",
      "status": "UNRUN",
      "title": "Unsuffixed inch fractions fail with millimeter fallback",
      "file": "csv/inch-fraction-workshop-parts.csv",
      "mutation": "Remove only trailing in suffixes from width, height and thickness cells in a disposable copy, leaving fractional tokens unchanged.",
      "parameters": {
        "kind": "parts",
        "units": "mm",
        "delimiter": ",",
        "mode": "replace"
      },
      "steps": [
        "Preview mutated text",
        "Attempt NativeCSV.apply with that exact invalid preview to a fresh fixture copy"
      ],
      "expected": {
        "preview_ok": false,
        "validated_rows": 0,
        "issue_code_includes": "CSV_DIMENSION",
        "issue_reason": "Fractions are supported in inches; add in or a double quote.",
        "apply": "Throws Repair the CSV errors and preview again before applying rows.",
        "target_project": "Unchanged"
      },
      "source": "Core/dimensions.js fraction unit guard; NativeCSV.apply guard",
      "actualScopePass": null,
      "actualScope": "Not executed by this12-group helper. Original source-derived plan expectations remain unobserved."
    },
    {
      "id": "CSV11",
      "status": "PARTIALLY_EXECUTED",
      "title": "Valid subset does not authorize partial application",
      "file": "csv/cabinet-plywood-parts.csv",
      "mutation": "Change only cab-top-bottom's data-row quantity from 2 to 0 in a disposable copy.",
      "parameters": {
        "kind": "parts",
        "units": "mm",
        "delimiter": ",",
        "mode": "replace"
      },
      "steps": [
        "Preview mutated text",
        "Check that the other valid rows can remain in preview.rows",
        "Attempt NativeCSV.apply with the complete invalid Preview; do not filter issues or manually promote its rows"
      ],
      "expected": {
        "preview_ok": false,
        "validated_rows": 3,
        "validated_row_labels": [
          "Side panel",
          "Shelf panel",
          "Narrow rail"
        ],
        "issue": {
          "code": "CSV_QUANTITY",
          "rowNumber": 3
        },
        "apply": "Throws Repair the CSV errors and preview again before applying rows.",
        "target_project": "Unchanged; no three-row partial replacement"
      },
      "source": "Core/csv.js per-row errorCount and result.ok; NativeCSV.apply guard",
      "actualScopePass": true,
      "actualScope": "Preview retained three rows with ok=false and an error CSV_QUANTITY. NativeCSV.apply rejected the whole preview with the exact repair-and-preview guard message; original Project value stayed unchanged.",
      "unexecutedPlanAssertions": "Specific surviving row labels/values and diagnostic row/line/column location were not asserted."
    },
    {
      "id": "CSV12",
      "status": "UNRUN",
      "title": "Partial row trim is rejected",
      "file": "csv/cabinet-plywood-stock.csv",
      "mutation": "Set trimTop to 0 mm only, leaving trimRight, trimBottom and trimLeft blank in a disposable copy. This is a negative test value, not a source trim.",
      "parameters": {
        "kind": "stock",
        "units": "mm",
        "delimiter": ",",
        "mode": "replace"
      },
      "steps": [
        "Preview the partial-trim row",
        "Attempt NativeCSV.apply with its invalid preview"
      ],
      "expected": {
        "preview_ok": false,
        "validated_rows": 0,
        "issue_code_includes": "CSV_TRIM_PARTIAL",
        "apply": "Rejected before project mutation",
        "repair": "Restore all four blanks to inherit target project trim, or deliberately specify all four measured values. Do not silently fill missing trim cells."
      },
      "source": "Core/csv.js trimCount rule; NativeCSV.apply guard",
      "actualScopePass": null,
      "actualScope": "Not executed by this12-group helper. Original source-derived plan expectations remain unobserved."
    },
    {
      "id": "CSV13",
      "status": "PARTIALLY_EXECUTED",
      "title": "Fixture IDs cannot be imported as an extra CSV header",
      "file": "csv/mixed-offcut-reuse-stock.csv",
      "mutation": "Add first header id and matching original fixture IDs to all three rows of a disposable copy.",
      "parameters": {
        "kind": "stock",
        "units": "mm",
        "delimiter": ","
      },
      "steps": [
        "Preview this structurally well-formed extended CSV"
      ],
      "expected": {
        "ok": false,
        "validated_rows": 0,
        "issue": {
          "code": "CSV_UNKNOWN_HEADER",
          "header": "id",
          "rowNumber": 1,
          "columnNumber": 1
        },
        "meaning": "Use the provenance mapping, not an unsupported ID column."
      },
      "source": "Core/csv.js supportedByKey and early header-error return",
      "actualScopePass": true,
      "actualScope": "Adding unsupported id header produced ok=false, no validated rows and an error CSV_UNKNOWN_HEADER.",
      "unexecutedPlanAssertions": "The reported header detail and diagnostic row/column numbers were not asserted."
    },
    {
      "id": "CSV14",
      "status": "PARTIALLY_EXECUTED",
      "title": "Repeated append allocates IDs and retains separate quantities",
      "file": "csv/cabinet-plywood-parts.csv",
      "parameters": {
        "kind": "parts",
        "units": "mm",
        "delimiter": ",",
        "mode": "append"
      },
      "steps": [
        "Start with a fresh cabinet-plywood fixture Project",
        "Preview once and apply append",
        "Apply the same valid preview append again to the returned Project"
      ],
      "expected": {
        "first_apply": {
          "parts_rows": 8,
          "sum_quantity": 14,
          "new_ids": [
            "csv-part-1",
            "csv-part-2",
            "csv-part-3",
            "csv-part-4"
          ]
        },
        "second_apply": {
          "parts_rows": 12,
          "sum_quantity": 21,
          "new_ids": [
            "csv-part-5",
            "csv-part-6",
            "csv-part-7",
            "csv-part-8"
          ]
        },
        "original_rows": "All four original cab-* rows remain unchanged. No quantities are merged.",
        "stock_and_settings": "Unchanged"
      },
      "source": "Core/csv.js applyProjectCSV usedIds/nextId and append concatenation",
      "actualScopePass": true,
      "actualScope": "Two append applications preserved original rows, produced8 then12 rows and14 then21 total quantity, retained represented values and unique IDs, and preserved scope/input values.",
      "unexecutedPlanAssertions": "Literal csv-part-N sequences were not asserted or logged as observed IDs."
    },
    {
      "id": "CSV15",
      "status": "PARTIALLY_EXECUTED",
      "title": "Stock append and replace unbind the job without altering its library",
      "file": "csv/mixed-offcut-reuse-stock.csv",
      "parameters": {
        "kind": "stock",
        "units": "mm",
        "delimiter": ",",
        "modes": [
          "append",
          "replace"
        ]
      },
      "setup": "In an isolated future harness, create an inventory from the mixed fixture's source stock, bind a fixture Project to it, and place both in a workspace. Snapshot complete inventory stock, ID, revision and transactions before each independent mode.",
      "steps": [
        "Preview the supplied stock CSV",
        "For each mode independently, call NativeCSV.apply on the bound Project",
        "Apply the returned Project by the normal CSVImportView/AppState.updateProject route",
        "Compare the entire inventory with its snapshot, not only its quantity sum"
      ],
      "expected": {
        "project_inventoryId": null,
        "project_inventoryRevision": null,
        "replace_stock_rows": 3,
        "replace_stock_quantity": 3,
        "append_stock_rows": 6,
        "append_stock_quantity": 6,
        "fresh_stock_ids": [
          "csv-stock-1",
          "csv-stock-2",
          "csv-stock-3"
        ],
        "workspace_inventory": "Exactly unchanged in both modes; no library adjustment or consumption transaction occurs",
        "parts_and_settings": "Unchanged",
        "warning_visibility": "Core emits CSV_INVENTORY_UNBOUND; NativeCSV.apply returns only Project, so inspect binding directly."
      },
      "source": "Core/csv.js importBaseCopy/applyProjectCSV; CSVImportView.apply; AppState.updateProject",
      "actualScopePass": true,
      "actualScope": "Append and replace passed as two pure-Project groups with an explicitly synthetic binding: returned binding cleared, expected row counts/values and unique IDs retained, replacement retired-ID disjointness checked, original target and scope preserved.",
      "unexecutedPlanAssertions": "No inventory was created or placed in a workspace. CSVImportView/AppState route, workspace-library immutability, successful core warning visibility and literal stock IDs were not tested."
    },
    {
      "id": "CSV16",
      "status": "UNRUN",
      "title": "First-plan inventory creation differs from importing into an existing library",
      "files": [
        "csv/cabinet-plywood-parts.csv",
        "csv/cabinet-plywood-stock.csv"
      ],
      "subcases": [
        {
          "id": "CSV16A",
          "status": "UNRUN",
          "setup": "Back up first, start a separate empty library, and confirm workspace.inventory is nil. Import both CSVs with Replace rows and review job settings independently.",
          "steps": [
            "Snapshot nil inventory and the imported csv-stock-1 row",
            "When execution is later authorized, request a fresh cutting plan through the normal app path"
          ],
          "expected": "AppState.performSolve creates an inventory from project stock only in this nil-inventory branch, then binds the project. Planning itself does not consume stock. No particular layout, remnant, savings or fit result is asserted by this case."
        },
        {
          "id": "CSV16B",
          "status": "UNRUN",
          "setup": "Use a separate disposable existing inventory made from original cabinet fixture stock (cab-sheet), with its project bound to it. Replace job stock via the CSV, producing csv-stock-1 and null binding.",
          "steps": [
            "Snapshot the existing library",
            "Through UI, request Create cutting plan and inspect the proposed stock-adjustment route",
            "Separately in an isolated direct-AppState check, call solve without recording an adjustment"
          ],
          "expected": "UI stockNeedsAdjustment routes to review of explicit library changes. Direct AppState.performSolve refuses the mismatch with Stock edits need an explicit inventory adjustment. Or choose current available stock. Existing inventory is not silently replaced. To retain it, choose current available stock; to change it, explicitly review and record an adjustment after checking physical stock."
        }
      ],
      "source": "AppState.performSolve inventory-nil branch and stockMap guard; WorkspaceView.startSolve; AppState.useInventory/applyStockAdjustment",
      "actualScopePass": null,
      "actualScope": "Not executed by this12-group helper. Original source-derived plan expectations remain unobserved."
    },
    {
      "id": "CSV17",
      "status": "UNRUN",
      "title": "Manual remnant rows do not create committed-label provenance",
      "file": "csv/mixed-offcut-reuse-stock.csv",
      "steps": [
        "Preview/apply the stock CSV in an isolated Project",
        "Assert both birch rows are kind remnant but contain no lineage",
        "In a later authorized native check, construct a fresh library from those rows with no committed transactions",
        "Call NativeExport.committedRemnants on that library snapshot without generating a PDF"
      ],
      "expected": {
        "manual_remnant_rows": 2,
        "eligible_committed_remnants": 0,
        "reason": "Classification and quantity alone do not satisfy committed transaction lineage/afterStock/keepNodeIds provenance. A stock adjustment does not retroactively make a row a committed cutting remnant."
      },
      "source": "Core/csv.js stock fields; AppState.prepareExport; NativeExport.committedRemnants/provenRemnants",
      "actualScopePass": null,
      "actualScope": "Not executed by this12-group helper. Original source-derived plan expectations remain unobserved."
    },
    {
      "id": "CSV18",
      "status": "UNRUN",
      "title": "UI invalid drafts and stale asynchronous apply cannot update the job",
      "file": "csv/cabinet-plywood-parts.csv",
      "scope": "Future native UI/state interaction case; not established by a bare NativeCSV.apply call.",
      "subcases": [
        {
          "id": "CSV18A",
          "status": "UNRUN",
          "setup": "Use a disposable fixture workspace and retain an invalid raw width draft on an existing part.",
          "steps": [
            "Open CSV exchange and obtain a valid preview if available",
            "Observe apply/export controls before repairing the raw draft"
          ],
          "expected": "state.hasInvalidDrafts disables apply/export. CSV does not silently discard the unfinished field or authorize planning."
        },
        {
          "id": "CSV18B",
          "status": "UNRUN",
          "setup": "Capture a valid preview and pause the future apply operation around its asynchronous NativeCSV.apply call using controlled harness scheduling.",
          "steps": [
            "Change the disposable workspace identity or project value before the awaited call returns",
            "Allow the view continuation to run and compare the changed project with its snapshot"
          ],
          "expected": "CSVImportView rejects with The job changed during import. Preview again before applying rows. No stale result replaces the newer Project. Changing text/kind/units/delimiter also invalidates the preview generation."
        }
      ],
      "source": "CSVImportView disabled conditions, invalidate generation and apply originalWorkspaceID/project equality guard",
      "actualScopePass": null,
      "actualScope": "Not executed by this12-group helper. Original source-derived plan expectations remain unobserved."
    }
  ],
  "historical_preparation": {
    "status": "HISTORICAL_PREPARED_UNRUN",
    "date": "2026-11-05",
    "executed_case_count": 0,
    "execution_receipt": null,
    "authorization_boundary": "This is a concrete plan for later authorized execution, not authorization to execute now. No NativeCSV/core call, build, solver, UI, app, browser or rendering was run. All outcomes below are source-derived expectations, not observed passes. Historical R3 results do not validate these files or current app changes."
  },
  "reconciledAtUTCDate": "2026-11-06",
  "executed_full_case_count": 0,
  "partially_executed_case_count": 13,
  "unrun_case_count": 5,
  "actual_group_count": 12,
  "executedFullPlan": false,
  "countMeaning": "13 plan IDs have partial observed coverage in 12 named helper groups; no claim that any complete plan case, all18 cases or a42-check bridge run was completed."
}
