{
  "format": "kerf-keep-starter-pack-csv-provenance",
  "schemaVersion": 2,
  "date": "2026-11-05",
  "status": "ACTUAL_SCOPED_MACOS_NATIVE_CSV_PASS_FULL_PLAN_PARTIAL",
  "reconciledAtUTCDate": "2026-11-06",
  "scope": "Six row-exchange CSVs transcribed from three frozen native examples. Canonical app, core, fixtures and release-web files were not edited.",
  "historical_preparation_evidence": {"status": "HISTORICAL_SOURCE_PREPARATION_ONLY", "performed": ["Bounded source reads", "SHA256 file reads", "Exact unit and quantity arithmetic", "Manual source-file authoring"], "runtime_status_at_preparation": "UNRUN", "not_performed_at_preparation": ["NativeCSV or core parser invocation", "SDK, build, Node, Python or solver execution", "App, browser, UI or render execution", "Import, apply, export or roundtrip execution"], "historical_boundary": "Historical R3 PDF evidence is separate from preparation and the actual CSV run below."},
  "actual_scoped_native_evidence": {
    "status": "PASSED_SCOPED_STARTER_PACK_CSV_CHECKS",
    "platform": "macOS NativeCSV through the typed JavaScriptCore bridge",
    "actualStartUTC": "2026-11-06T01:10:29Z",
    "actualEndUTC": "2026-11-06T01:10:29Z",
    "actual_group_count": 12,
    "all_groups_passed": true,
    "executedFullPlan": false,
    "case_matrix": "native-csv-validation-cases.json",
    "receipt_base": "outputs/team-workstreams-20261105/02-starter-pack/validation-source/runs/02-starter-csv-2026-11-06T01-09-49-364898Z/",
    "receipt_location_scope": "Workspace audit evidence; execution files are not customer-pack members.",
    "terminal_receipt": {"file": "terminal-receipt.json", "sha256": "0a30d700357f6b832f8308905ee618fd8dcc7f74029bc460c0171264ff17b813"},
    "outer_report": {"file": "validation-report.json", "sha256": "f8e3ac7887ad059d565143042fb5a3f67e4c55127a17675bf4c944139406a621"},
    "native_report": {"file": "starter-pack-csv-report.json", "sha256": "2a307e34feb35117a28cf1db4bb2d9e1a104c66c2f68115444e0230170c78a02"},
    "compiled_binary_sha256": "e75f3d7c3d85e60f5c1d84e0d5c99057fff7812bd29da0373d7508749a34b01c",
    "scope": "All six CSVs were read, previewed, applied, exported, re-previewed and re-applied. Exact represented fields were compared with ORIGINAL decoded Project fixtures, ignoring allocated IDs and equating absent notes with empty strings. Explicit suffixes passed under the opposite fallback unit. Selected controls covered CSV09/11/13/14 and CSV15 append/replace on disposable Project values.",
    "identity_scope": "Nominal replace checked unique fresh IDs and disjointness; roundtrip checked retired-ID disjointness. Repeated append checked unique IDs and separate quantities. Bound stock replace checked retired-ID disjointness. Literal allocated IDs below were not asserted/logged as observed values.",
    "preservation_at_run": "The terminal receipt records 81 input pre/post hashes equal, original/integrated customer 25 unchanged and owned observed processes closed. Later authorized packaging proof-copy reconciliation does not rewrite that historical run baseline.",
    "limits": ["12 named groups, not 18/18 full case-plan or a new 42-smoke run", "No iOS/native GUI, AppState/ProjectStore or workspace-library persistence", "Pure Project binding tests do not newly demonstrate library behavior", "No solver, new PDF/printing or physical-stock result", "Exact preview headers/delimiters, literal ID sequences and every diagnostic location were not asserted", "Browser/publication certification is separate from this scoped native evidence"]
  },
  "source_root": "products/offcut-atlas",
  "actual_run_inputs": {
    "scope": "Inputs pinned before/after the actual helper compile/run; not current whole-app/UI certification. Swift paths are relative to source_root; staged helper paths are relative to this pack.",
    "compiled_swift_sha256": {
      "native/KerfKeep/Shared/NativeCSV.swift": "a858204523457b109e085e1953ab28fa80d90b2658dada2fd6812b1b54ae6a2a",
      "native/KerfKeep/Shared/Models.swift": "c3f33f1cc6c88cda65a271fe4ea3653db46401bef4eeadbc23c79225a64008cd",
      "native/KerfKeep/Shared/EngineBridge.swift": "dc19c6a0b37abb612e20bcd1a65b7d95f998594ceaf4dc39a5acdd6a6901f963",
      "validation-source/StarterPackCSVChecks.swift": "4b003a4b6bee6d17dba9f1c23cebf498c8b23372ecebe9c7bedfc6159da85c01",
      "validation-source/StarterPackBridgeSmoke.swift": "0a8ec16c52e9700b15d2770a787a13105ed22e0b2af4ef0185816bb9adfa534a"
    },
    "runtime_core_bundle": "native/qa/runs/2026-11-05T23-32-27Z/BridgeFixtures.bundle",
    "runtime_core_manifest_sha256": "ec0d046bfbf526dad463843941d277ee471e475a5dd1f42bc42b88df605a996a",
    "runtime_core_sha256": {
      "dimensions.js": "8748d0a31ed60e41d01d100b6cb8df1ba43a254b3cf569a4846d41f23b6570c7",
      "engine.js": "0a76164d4a6f2a075f2ed281da739c7ae58b5c24cc8f766d0e5091bd7ba8c627",
      "verify.js": "6e593f9fd907657b3ad7ad9c383e153c4954b0612a67f2a4d41818d0d4447c27",
      "storage.js": "264d150f874832aa7b5519b748a6e0922ca219ca69054cc626d911b43e8ad406",
      "inventory.js": "4264603a65d0bbc53ddaf655e6a7bb01e03250e6b75787242ede096c83f66fb1",
      "csv.js": "87018e51f2310cfd5ae4352be1ae8d91874f7e5f39217b90c31b7d45d0798d82",
      "report.js": "c8f67f5d2a56ea0bd6d6b84a711fc93ba4ded2c451a2de87611d402c067ea9da",
      "examples.js": "c96131939ff7bd73dd5b7c54b43e56928f413da0e38161e32256b253ab57214f"
    }
  },
  "source_sha256_scope": "HISTORICAL: these 13 pins record original source preparation, not current whole-app/UI identity. Actual compiled/runtime inputs are separately identified below.",
  "source_sha256": {
    "native/fixtures/examples/cabinet-plywood.json": "a0e6caa3c14372585659da0fa270559e54659be34d6487c4e47bba8ac93ef452",
    "native/fixtures/examples/inch-fraction-workshop.json": "c435539059631e91c3572ba84779e625de90d919bb1dd84aeeccc73beab1822e",
    "native/fixtures/examples/mixed-offcut-reuse.json": "1cf1fe2d82ba46730f9636ee1cd3ea381425deaa7d77a8f2c2eb37431acdabaa",
    "native/KerfKeep/Shared/NativeCSV.swift": "a858204523457b109e085e1953ab28fa80d90b2658dada2fd6812b1b54ae6a2a",
    "native/KerfKeep/Views/CSVImportView.swift": "832d8e53302062376653f70dcf7253fbfd9fc3160368abee04900edd6031da36",
    "native/KerfKeep/Shared/AppState.swift": "383474ef5930ac75a21bf276b33aa00cfcf7c6bd77f30c88e46145b9aec622f4",
    "native/KerfKeep/Shared/Models.swift": "c3f33f1cc6c88cda65a271fe4ea3653db46401bef4eeadbc23c79225a64008cd",
    "native/KerfKeep/Shared/EngineBridge.swift": "dc19c6a0b37abb612e20bcd1a65b7d95f998594ceaf4dc39a5acdd6a6901f963",
    "native/KerfKeep/Resources/Core/csv.js": "87018e51f2310cfd5ae4352be1ae8d91874f7e5f39217b90c31b7d45d0798d82",
    "native/KerfKeep/Resources/Core/dimensions.js": "8748d0a31ed60e41d01d100b6cb8df1ba43a254b3cf569a4846d41f23b6570c7",
    "native/KerfKeep/Resources/Core/engine.js": "0a76164d4a6f2a075f2ed281da739c7ae58b5c24cc8f766d0e5091bd7ba8c627",
    "native/KerfKeep/Views/WorkspaceView.swift": "9ad1616cb1e0e182cdcb477fb6ecc80ba565ccb8744a0b1b69f97f7bfe9876e8",
    "native/KerfKeep/Shared/NativeExport.swift": "70b0e6da6a1840c68ef58a862106635795e1a0c208fe659b4ebdaf67154c3911"
  },
  "encoding": {"text": "UTF-8", "bom": false, "line_endings": "LF", "delimiter": ",", "header_rows_per_file": 1},
  "contract": {
    "parts_headers": ["label", "width", "height", "quantity", "material", "thickness", "grain", "allowRotate", "notes"],
    "stock_headers": ["label", "width", "height", "quantity", "material", "thickness", "grain", "kind", "trimTop", "trimRight", "trimBottom", "trimLeft", "costCents"],
    "required_headers": ["width", "height", "quantity", "material", "thickness"],
    "limits": {"file_bytes": 2000000, "parts_rows": 200, "parts_quantity": 1000, "stock_rows": 100, "stock_quantity": 100},
    "unit_basis": {"ticks_per_mm": 40000, "ticks_per_inch": 1016000, "one_tick_mm": "0.000025", "inch_mm": "25.4"},
    "measurement_policy": "All dimension cells have explicit mm or in suffixes. Fractions use supported denominators 2, 4 or 8. Exact suffixes override the fallback picker; no rounded values are used.",
    "display_selection": "Select the stated fixture unit for job display and Import measurements without a unit suffix. The import picker initially uses state.project.units. CSV does not change the job display-unit setting.",
    "review_apply": "Open CSV, choose Parts or Stock and comma or automatic separator, then Preview and validate. Review counts, quantities, units, material and grain. Replace rows substitutes that job list. Append rows adds separate records without merging quantities. NativeCSV.apply refuses a false/empty/error preview; invalid project drafts also disable UI apply/export. A fresh plan is required afterward.",
    "stock_boundary": "Stock append/replace clears project.inventoryId and inventoryRevision but does not alter workspace.inventory. For sample use, back up existing work and start a separate empty library first. AppState.performSolve creates inventory only when workspace.inventory is nil. With an existing library, every selected project stock row must match an inventory row by ID and complete value. Imported rows that differ require explicit stock adjustment or current available stock selection; the app does not silently replace the library.",
    "remnant_boundary": "CSV kind=remnant is manual classification. These fixtures have no lineage or committed transaction provenance, so those rows are not eligible committed-remnant labels merely because their kind is remnant.",
    "ids": "id is not a supported header and yields CSV_UNKNOWN_HEADER. Fixture IDs are retained in the mapping below only. Preview IDs follow row order. Apply allocates fresh IDs avoiding existing/reserved target IDs.",
    "blank_fields": "Missing source notes become empty notes strings because the full parts header includes notes. All row trim and cost cells are blank: the fixtures contain neither row.trim nor costCents. Blank row trim inherits target global trim; blank cost stays absent, not zero.",
    "not_represented": ["Project ID/name/display units", "Project inventory binding", "Kerf/global trim/minimum-remnant/solver settings", "Row IDs and lineage", "Plans, inventory history, archives, drafts and recovery"],
    "warning": "The CSV pairs reproduce row data only. They do not recreate fixture planning settings or an exact workspace backup. Review the target settings; use the supported original example or full backup for complete state."
  },
  "expected_row_columns": {
    "parts": ["source_id", "preview_id", "label", "width_ticks", "height_ticks", "quantity", "material", "thickness_ticks", "grain", "allowRotate", "notes"],
    "stock": ["source_id", "preview_id", "label", "width_ticks", "height_ticks", "quantity", "material", "thickness_ticks", "grain", "kind"]
  },
  "expected_apply_precondition": "The original plan replaces the matching list in a fresh copy of its source fixture Project. Literal csv-part-N/csv-stock-N sequences below remain source-derived expectations, not asserted observed values. The actual run compared represented fields, stated fresh-ID properties, unselected-list/settings scope and input-value immutability. No permission to merge real stock is implied.",
  "fixtures": [
    {"key": "cabinet-plywood", "source": "native/fixtures/examples/cabinet-plywood.json", "project_id": "example-cabinet-plywood", "project_name": "Plywood cabinet parts", "display_units": "mm", "inventoryId": null, "inventoryRevision": null, "settings_ticks_not_in_csv": {"kerf": 128000, "trim": {"top": 400000, "right": 400000, "bottom": 400000, "left": 400000}, "minRemnant": {"width": 4000000, "height": 4000000}, "preferRemnants": true, "objective": "balanced", "firstCut": "auto"}},
    {"key": "inch-fraction-workshop", "source": "native/fixtures/examples/inch-fraction-workshop.json", "project_id": "example-inch-fraction-workshop", "project_name": "Inch and fraction workshop", "display_units": "in", "inventoryId": null, "inventoryRevision": null, "settings_ticks_not_in_csv": {"kerf": 127000, "trim": {"top": 254000, "right": 254000, "bottom": 254000, "left": 254000}, "minRemnant": {"width": 2032000, "height": 2032000}, "preferRemnants": true, "objective": "balanced", "firstCut": "auto"}},
    {"key": "mixed-offcut-reuse", "source": "native/fixtures/examples/mixed-offcut-reuse.json", "project_id": "example-mixed-offcut-reuse", "project_name": "Mixed-material offcut reuse", "display_units": "mm", "inventoryId": null, "inventoryRevision": null, "settings_ticks_not_in_csv": {"kerf": 120000, "trim": {"top": 0, "right": 0, "bottom": 0, "left": 0}, "minRemnant": {"width": 2000000, "height": 2000000}, "preferRemnants": true, "objective": "balanced", "firstCut": "auto"}}
  ],
  "files": [
    {
      "path": "csv/cabinet-plywood-parts.csv", "fixture": "cabinet-plywood", "sha256": "425b723fb85d327432c479b3817f70008bf33bff187f9bf30a408596e1d548fc",
      "kind": "parts", "import_units": "mm", "data_rows": 4, "sum_quantity": 7,
      "expected_rows": [
        ["cab-side", "csv-part-1", "Side panel", 28800000, 22400000, 2, "plywood-18", 720000, "x", false, "Illustrative only; confirm your own dimensions and grain."],
        ["cab-top-bottom", "csv-part-2", "Top / bottom panel", 22560000, 22400000, 2, "plywood-18", 720000, "x", false, ""],
        ["cab-shelf", "csv-part-3", "Shelf panel", 22560000, 20800000, 1, "plywood-18", 720000, "x", false, ""],
        ["cab-rail", "csv-part-4", "Narrow rail", 22560000, 4000000, 2, "plywood-18", 720000, "x", false, ""]
      ]
    },
    {
      "path": "csv/cabinet-plywood-stock.csv", "fixture": "cabinet-plywood", "sha256": "2bca53f770c55a605c85727e21d98a4d07776b4ff5111ca6440394ec175e58c8",
      "kind": "stock", "import_units": "mm", "data_rows": 1, "sum_quantity": 1,
      "expected_rows": [["cab-sheet", "csv-stock-1", "Plywood 18 mm · full sheet", 97600000, 48800000, 1, "plywood-18", 720000, "x", "sheet"]]
    },
    {
      "path": "csv/inch-fraction-workshop-parts.csv", "fixture": "inch-fraction-workshop", "sha256": "611a79764ad66aaf2bc4a1b1e6023620b754d773ea54c2325e2d6b54825be3d1",
      "kind": "parts", "import_units": "in", "data_rows": 3, "sum_quantity": 5,
      "expected_rows": [
        ["inch-shelf", "csv-part-1", "Shelf panel · 20 1/2 × 10 3/4 in", 20828000, 10922000, 2, "plywood-shop-3-4in", 762000, "x", false, "Illustrative 3/4 in stock; not a joinery or assembly drawing."],
        ["inch-divider", "csv-part-2", "Divider panel · 12 3/8 × 10 3/4 in", 12573000, 10922000, 1, "plywood-shop-3-4in", 762000, "x", false, ""],
        ["inch-rail", "csv-part-3", "Rail · 20 1/2 × 2 in", 20828000, 2032000, 2, "plywood-shop-3-4in", 762000, "x", false, ""]
      ]
    },
    {
      "path": "csv/inch-fraction-workshop-stock.csv", "fixture": "inch-fraction-workshop", "sha256": "5197688c5c114504f64d60802abef33ee2d1315bec73fba5f1ff3e6cc59c87c5",
      "kind": "stock", "import_units": "in", "data_rows": 1, "sum_quantity": 1,
      "expected_rows": [["inch-sheet", "csv-stock-1", "Plywood 3/4 in · 48 × 24 in", 48768000, 24384000, 1, "plywood-shop-3-4in", 762000, "x", "sheet"]]
    },
    {
      "path": "csv/mixed-offcut-reuse-parts.csv", "fixture": "mixed-offcut-reuse", "sha256": "91f66baa81002fa2e1249372d8c3db907ea0d4646f08a9250344a6bbdd6cba7e",
      "kind": "parts", "import_units": "mm", "data_rows": 3, "sum_quantity": 6,
      "expected_rows": [
        ["reuse-panel", "csv-part-1", "Small panel", 15800000, 11800000, 2, "birch-plywood-18", 720000, "x", false, "Illustrative dimensions; birch cannot be replaced by MDF."],
        ["reuse-divider", "csv-part-2", "Short divider", 7800000, 3800000, 2, "birch-plywood-18", 720000, "x", false, ""],
        ["reuse-back", "csv-part-3", "Back insert", 9600000, 15600000, 2, "mdf-6", 240000, "none", true, ""]
      ]
    },
    {
      "path": "csv/mixed-offcut-reuse-stock.csv", "fixture": "mixed-offcut-reuse", "sha256": "2c135a75dfa29115ee75c97d2f19c3bf9b8e684815ed31c90080447b3cdd07b7",
      "kind": "stock", "import_units": "mm", "data_rows": 3, "sum_quantity": 3,
      "expected_rows": [
        ["reuse-birch-large", "csv-stock-1", "Birch offcut · large", 24000000, 16000000, 1, "birch-plywood-18", 720000, "x", "remnant"],
        ["reuse-birch-small", "csv-stock-2", "Birch offcut · small", 16000000, 12000000, 1, "birch-plywood-18", 720000, "x", "remnant"],
        ["reuse-mdf", "csv-stock-3", "MDF 6 mm · finite piece", 20000000, 16000000, 1, "mdf-6", 240000, "none", "sheet"]
      ]
    }
  ],
  "totals": {"csv_files": 6, "parts_data_rows": 10, "parts_quantity": 18, "stock_data_rows": 5, "stock_quantity": 5}
}
