{
  "_id": "6a1a1e0f1d7bb097a09ce973",
  "Package": "keyed",
  "Title": "Explicit Key Assumptions for Flat-File Data",
  "Version": "0.2.0",
  "Authors@R": "person(\"Gilles\", \"Colling\", email = \"gilles.colling051@gmail.com\",\nrole = c(\"aut\", \"cre\", \"cph\"),\ncomment = c(ORCID = \"0000-0003-3070-6066\"))",
  "Language": "en-US",
  "Description": "Helps make implicit data assumptions explicit by attaching\nkeys to flat-file data that error when those assumptions are\nviolated. Designed for CSV-first workflows without database\ninfrastructure or version control. Provides key definition,\nassumption checks, join diagnostics, and automatic drift\ndetection via watched data frames that snapshot before each\ntransformation and report cell-level changes.",
  "License": "MIT + file LICENSE",
  "URL": "https://github.com/gcol33/keyed, https://gillescolling.com/keyed/",
  "BugReports": "https://github.com/gcol33/keyed/issues",
  "Encoding": "UTF-8",
  "Roxygen": "list(markdown = TRUE)",
  "RoxygenNote": "7.3.3",
  "VignetteBuilder": "knitr",
  "Config/testthat/edition": "3",
  "Repository": "https://gcol33.r-universe.dev",
  "Date/Publication": "2026-05-29 11:16:33 UTC",
  "RemoteUrl": "https://github.com/gcol33/keyed",
  "RemoteRef": "HEAD",
  "RemoteSha": "cf9b52bc050987f6c1b67464dec928217d642dbf",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-05-29 23:12:41 UTC",
    "User": "root"
  },
  "Author": "Gilles Colling [aut, cre, cph] (ORCID:\n<https://orcid.org/0000-0003-3070-6066>)",
  "Maintainer": "Gilles Colling <gilles.colling051@gmail.com>",
  "MD5sum": "5f18179e8264f5c386c0575d4aef993a",
  "_user": "gcol33",
  "_type": "src",
  "_file": "keyed_0.2.0.tar.gz",
  "_fileid": "dbca450816928f50b831eda57283b7ac13976524de6bb7ca18a14ca80deab41c",
  "_filesize": 193369,
  "_sha256": "dbca450816928f50b831eda57283b7ac13976524de6bb7ca18a14ca80deab41c",
  "_created": "2026-05-29T23:12:41.000Z",
  "_published": "2026-05-29T23:15:27.944Z",
  "_distro": "noble",
  "_jobs": [
    {
      "job": 78602194537,
      "time": 125,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "7302913322"
    },
    {
      "job": 78602194502,
      "time": 129,
      "config": "linux-release-x86_64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7302914033"
    },
    {
      "job": 78602194523,
      "time": 89,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "7302906818"
    },
    {
      "job": 78602194524,
      "time": 93,
      "config": "macos-release-arm64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7302907172"
    },
    {
      "job": 78601905123,
      "time": 178,
      "config": "source",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7302889480"
    },
    {
      "job": 78602194528,
      "time": 125,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7302913129"
    },
    {
      "job": 78602194513,
      "time": 89,
      "config": "windows-devel",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "7302906330"
    },
    {
      "job": 78602194540,
      "time": 137,
      "config": "windows-oldrel",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "7302915808"
    },
    {
      "job": 78602194514,
      "time": 84,
      "config": "windows-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7302905576"
    }
  ],
  "_buildurl": "https://github.com/r-universe/gcol33/actions/runs/26666822742",
  "_status": "success",
  "_host": "GitHub-Actions",
  "_upstream": "https://github.com/gcol33/keyed",
  "_commit": {
    "id": "cf9b52bc050987f6c1b67464dec928217d642dbf",
    "author": "Gilles Colling <gilles.colling051@gmail.com>",
    "committer": "Gilles Colling <gilles.colling051@gmail.com>",
    "message": "docs: rewrite README in readme-aura style with plain break line\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n",
    "time": 1780053393
  },
  "_maintainer": {
    "name": "Gilles Colling",
    "email": "gilles.colling051@gmail.com",
    "login": "gcol33",
    "linkedin": "in/gilles-colling-0b3747306",
    "orcid": "0000-0003-3070-6066",
    "twitter": "@Gilles__Colling",
    "description": "Building tools for ecology in R, C++, and Rust.\nWhy did Microsoft have to buy it. Sadge :(",
    "uuid": 25009600
  },
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.1.0",
      "role": "Depends"
    },
    {
      "package": "cli",
      "role": "Imports"
    },
    {
      "package": "dplyr",
      "version": ">= 1.0.0",
      "role": "Imports"
    },
    {
      "package": "digest",
      "role": "Imports"
    },
    {
      "package": "lifecycle",
      "version": ">= 1.0.0",
      "role": "Imports"
    },
    {
      "package": "pillar",
      "role": "Imports"
    },
    {
      "package": "rlang",
      "version": ">= 1.0.0",
      "role": "Imports"
    },
    {
      "package": "tibble",
      "role": "Imports"
    },
    {
      "package": "vctrs",
      "version": ">= 0.5.0",
      "role": "Imports"
    },
    {
      "package": "joinspy",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.0.0",
      "role": "Suggests"
    },
    {
      "package": "uuid",
      "role": "Suggests"
    }
  ],
  "_owner": "gcol33",
  "_selfowned": true,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2026-03",
      "n": 16
    },
    {
      "week": "2026-04",
      "n": 10
    },
    {
      "week": "2026-09",
      "n": 7
    },
    {
      "week": "2026-10",
      "n": 2
    },
    {
      "week": "2026-21",
      "n": 1
    },
    {
      "week": "2026-22",
      "n": 2
    }
  ],
  "_tags": [
    {
      "name": "v0.1.0",
      "date": "2026-01-14"
    },
    {
      "name": "v0.1.1",
      "date": "2026-01-14"
    },
    {
      "name": "v0.2.0",
      "date": "2026-02-25"
    }
  ],
  "_topics": [
    "csv",
    "data-integrity",
    "data-quality",
    "data-validation",
    "data-wrangling",
    "flat-file",
    "tidyverse"
  ],
  "_stars": 2,
  "_contributors": [
    {
      "user": "gcol33",
      "count": 37,
      "uuid": 25009600
    }
  ],
  "_userbio": {
    "uuid": 25009600,
    "type": "user",
    "name": "Gilles Colling",
    "description": "Building tools for ecology in R, C++, and Rust.\nWhy did Microsoft have to buy it. Sadge :("
  },
  "_downloads": {
    "count": 146,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/keyed"
  },
  "_devurl": "https://github.com/gcol33/keyed",
  "_pkgdown": "https://gillescolling.com/keyed/",
  "_searchresults": 7,
  "_rbuild": "4.6.0",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/keyed.html",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/readme.html",
    "extra/readme.md",
    "manual.pdf"
  ],
  "_homeurl": "https://github.com/gcol33/keyed",
  "_realowner": "gcol33",
  "_cranurl": true,
  "_releases": [
    {
      "version": "0.1.3",
      "date": "2026-02-06"
    },
    {
      "version": "0.2.0",
      "date": "2026-02-25"
    }
  ],
  "_exports": [
    "add_id",
    "bind_id",
    "bind_keyed",
    "check_drift",
    "check_id",
    "check_id_disjoint",
    "clear_all_snapshots",
    "clear_snapshot",
    "commit_keyed",
    "compare_ids",
    "compare_keys",
    "compare_structure",
    "diagnose_join",
    "extend_id",
    "find_duplicates",
    "get_id",
    "get_key_cols",
    "has_id",
    "has_key",
    "key",
    "key_is_valid",
    "key_status",
    "key<-",
    "list_snapshots",
    "lock_complete",
    "lock_coverage",
    "lock_no_na",
    "lock_nrow",
    "lock_unique",
    "make_id",
    "remove_id",
    "stamp",
    "unkey",
    "unwatch",
    "watch"
  ],
  "_help": [
    {
      "page": "add_id",
      "title": "Add identity column",
      "topics": [
        "add_id"
      ]
    },
    {
      "page": "bind_id",
      "title": "Bind data frames with ID handling",
      "topics": [
        "bind_id"
      ]
    },
    {
      "page": "bind_keyed",
      "title": "Bind rows of keyed data frames",
      "topics": [
        "bind_keyed"
      ]
    },
    {
      "page": "check_drift",
      "title": "Check for drift from committed snapshot",
      "topics": [
        "check_drift"
      ]
    },
    {
      "page": "check_id",
      "title": "Check ID integrity",
      "topics": [
        "check_id"
      ]
    },
    {
      "page": "check_id_disjoint",
      "title": "Check IDs are disjoint across datasets",
      "topics": [
        "check_id_disjoint"
      ]
    },
    {
      "page": "clear_all_snapshots",
      "title": "Clear all snapshots from cache",
      "topics": [
        "clear_all_snapshots"
      ]
    },
    {
      "page": "clear_snapshot",
      "title": "Clear snapshot for a data frame",
      "topics": [
        "clear_snapshot"
      ]
    },
    {
      "page": "compare_ids",
      "title": "Compare IDs between data frames",
      "topics": [
        "compare_ids"
      ]
    },
    {
      "page": "compare_keys",
      "title": "Compare key values between two data frames",
      "topics": [
        "compare_keys"
      ]
    },
    {
      "page": "compare_structure",
      "title": "Compare structure of two data frames",
      "topics": [
        "compare_structure"
      ]
    },
    {
      "page": "diagnose_join",
      "title": "Diagnose a join before executing",
      "topics": [
        "diagnose_join"
      ]
    },
    {
      "page": "diff.keyed_df",
      "title": "Diff two keyed data frames",
      "topics": [
        "diff.keyed_df"
      ]
    },
    {
      "page": "extend_id",
      "title": "Extend IDs to new rows",
      "topics": [
        "extend_id"
      ]
    },
    {
      "page": "find_duplicates",
      "title": "Find duplicate keys",
      "topics": [
        "find_duplicates"
      ]
    },
    {
      "page": "get_id",
      "title": "Get ID column",
      "topics": [
        "get_id"
      ]
    },
    {
      "page": "get_key_cols",
      "title": "Get key column names",
      "topics": [
        "get_key_cols"
      ]
    },
    {
      "page": "has_id",
      "title": "Check if data frame has IDs",
      "topics": [
        "has_id"
      ]
    },
    {
      "page": "has_key",
      "title": "Check if data frame has a key",
      "topics": [
        "has_key"
      ]
    },
    {
      "page": "key",
      "title": "Define a key for a data frame",
      "topics": [
        "key",
        "key<-"
      ]
    },
    {
      "page": "key_is_valid",
      "title": "Check if the key is still valid",
      "topics": [
        "key_is_valid"
      ]
    },
    {
      "page": "key_status",
      "title": "Get key status summary",
      "topics": [
        "key_status"
      ]
    },
    {
      "page": "list_snapshots",
      "title": "List all snapshots in cache",
      "topics": [
        "list_snapshots"
      ]
    },
    {
      "page": "lock_complete",
      "title": "Assert that data is complete (no missing values anywhere)",
      "topics": [
        "lock_complete"
      ]
    },
    {
      "page": "lock_coverage",
      "title": "Assert minimum coverage of values",
      "topics": [
        "lock_coverage"
      ]
    },
    {
      "page": "lock_no_na",
      "title": "Assert that columns have no missing values",
      "topics": [
        "lock_no_na"
      ]
    },
    {
      "page": "lock_nrow",
      "title": "Assert row count within expected range",
      "topics": [
        "lock_nrow"
      ]
    },
    {
      "page": "lock_unique",
      "title": "Assert that columns are unique",
      "topics": [
        "lock_unique"
      ]
    },
    {
      "page": "make_id",
      "title": "Create ID from columns",
      "topics": [
        "make_id"
      ]
    },
    {
      "page": "remove_id",
      "title": "Remove ID column",
      "topics": [
        "remove_id"
      ]
    },
    {
      "page": "stamp",
      "title": "Stamp a data frame as reference",
      "topics": [
        "commit_keyed",
        "stamp"
      ]
    },
    {
      "page": "summary.keyed_df",
      "title": "Summary method for keyed data frames",
      "topics": [
        "summary.keyed_df"
      ]
    },
    {
      "page": "unkey",
      "title": "Remove key from a data frame",
      "topics": [
        "unkey"
      ]
    },
    {
      "page": "unwatch",
      "title": "Stop watching a keyed data frame",
      "topics": [
        "unwatch"
      ]
    },
    {
      "page": "watch",
      "title": "Watch a keyed data frame for automatic drift detection",
      "topics": [
        "watch"
      ]
    }
  ],
  "_readme": "https://github.com/gcol33/keyed/raw/HEAD/README.md",
  "_rundeps": [
    "cli",
    "digest",
    "dplyr",
    "generics",
    "glue",
    "lifecycle",
    "magrittr",
    "pillar",
    "pkgconfig",
    "R6",
    "rlang",
    "tibble",
    "tidyselect",
    "utf8",
    "vctrs",
    "withr"
  ],
  "_vignettes": [
    {
      "source": "philosophy.Rmd",
      "filename": "philosophy.html",
      "title": "Design Philosophy",
      "author": "Gilles Colling",
      "engine": "knitr::rmarkdown",
      "headings": [
        "The Flat-File Reality",
        "Detection, Not Enforcement",
        "Boundary Checks",
        "Strict Enforcement",
        "What keyed Doesn't Do",
        "Summary"
      ],
      "created": "2026-01-14 10:34:24",
      "modified": "2026-02-25 09:50:19",
      "commits": 6
    },
    {
      "source": "quickstart.Rmd",
      "filename": "quickstart.html",
      "title": "Quick Start",
      "author": "Gilles Colling",
      "engine": "knitr::rmarkdown",
      "headings": [
        "The Problem: Silent Data Corruption",
        "The Solution: Make Assumptions Explicit",
        "Workflow 1: Monthly Data Validation",
        "Define validation function",
        "Keys survive transformations",
        "Strict enforcement",
        "Workflow 2: Safe Joins",
        "Create sample data",
        "Diagnose before joining",
        "Compare key structures",
        "Workflow 3: Row Identity Tracking",
        "Add row IDs",
        "IDs survive transformations",
        "Combining data with ID handling",
        "Workflow 4: Drift Detection",
        "Commit a reference snapshot",
        "Check for drift",
        "Detect changes",
        "Row-level diff",
        "Cleanup",
        "Quick Reference",
        "Core Functions",
        "Assumption Checks",
        "Diagnostics",
        "Row Identity",
        "Drift Detection",
        "When to Use Something Else",
        "See Also"
      ],
      "created": "2026-01-14 10:34:24",
      "modified": "2026-02-25 09:50:19",
      "commits": 6
    }
  ],
  "_score": 5.079181246047625,
  "_indexed": true,
  "_nocasepkg": "keyed",
  "_universes": [
    "gcol33"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.2.0",
      "date": "2026-05-29T23:14:38.000Z",
      "distro": "noble",
      "commit": "cf9b52bc050987f6c1b67464dec928217d642dbf",
      "fileid": "4b91680915345123a74ed71689d4f0d12166f6f56928848770ce416803cf4c86",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/26666822742"
    },
    {
      "r": "4.6.0",
      "os": "linux",
      "version": "0.2.0",
      "date": "2026-05-29T23:14:43.000Z",
      "distro": "noble",
      "commit": "cf9b52bc050987f6c1b67464dec928217d642dbf",
      "fileid": "1f5fda01de4e0d9e1069102b302f9670e4fa65a8a7da6bb8ebe224c508582fbe",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/26666822742"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.2.0",
      "date": "2026-05-29T23:14:12.000Z",
      "commit": "cf9b52bc050987f6c1b67464dec928217d642dbf",
      "fileid": "d6658ea301616beed6e08fbb12828eb27acadcb317e278ec9df5598e766dd754",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/26666822742"
    },
    {
      "r": "4.6.0",
      "os": "mac",
      "version": "0.2.0",
      "date": "2026-05-29T23:14:12.000Z",
      "commit": "cf9b52bc050987f6c1b67464dec928217d642dbf",
      "fileid": "415d7481e7f290794a1960b4918125b13be2275209979d9cd46a45e96fea9cd5",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/26666822742"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.2.0",
      "date": "2026-05-29T23:15:00.000Z",
      "commit": "cf9b52bc050987f6c1b67464dec928217d642dbf",
      "fileid": "c4b78cc0c56a460b1d0a3f2284b47416a8d87ced6d0ce3be2fbc7764e58ab324",
      "status": "success",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/26666822742"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.2.0",
      "date": "2026-05-29T23:13:55.000Z",
      "commit": "cf9b52bc050987f6c1b67464dec928217d642dbf",
      "fileid": "1bea4b3a85778d1984abd9d5478d55d069f6b93b5f9ea32665d4cdcbe077fb38",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/26666822742"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.2.0",
      "date": "2026-05-29T23:14:41.000Z",
      "commit": "cf9b52bc050987f6c1b67464dec928217d642dbf",
      "fileid": "ffc8198d04dca98fa6368eacc353065e60e8bd0a543a8741312892685289be04",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/26666822742"
    },
    {
      "r": "4.6.0",
      "os": "win",
      "version": "0.2.0",
      "date": "2026-05-29T23:13:50.000Z",
      "commit": "cf9b52bc050987f6c1b67464dec928217d642dbf",
      "fileid": "25873e31353739f386b93fa09e084f7d83af91d3b0df0d250c1c113560a0916c",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/26666822742"
    }
  ]
}