{
  "_id": "6aca474cfe5cc25786e86722",
  "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-10-10 13:04:55 UTC",
  "RemoteUrl": "https://github.com/gcol33/keyed",
  "RemoteRef": "HEAD",
  "RemoteSha": "f1cfe5048d71749f0c23997567a258967e69b172",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-10-10 13:58:05 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>",
  "_user": "gcol33",
  "_type": "src",
  "_file": "keyed_0.2.0.tar.gz",
  "_fileid": "https://r2.ropensci.org/c010b6551531e2f27c6392e676804f29899922ae7b174712df44b0480edcf759",
  "_filesize": 195393,
  "_sha256": "c010b6551531e2f27c6392e676804f29899922ae7b174712df44b0480edcf759",
  "_expires": "2027-01-18T14:10:18.000Z",
  "_created": "2026-10-10T13:58:05.000Z",
  "_published": "2026-10-10T14:10:20.144Z",
  "_buildurl": "https://github.com/r-universe/gcol33/actions/runs/38057591090",
  "_status": "success",
  "_host": "GitHub-Actions",
  "_jobs": [
    {
      "job": 114229649720,
      "time": 125,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "11672004123"
    },
    {
      "job": 114229649594,
      "time": 105,
      "config": "linux-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11671902861"
    },
    {
      "job": 114229649661,
      "time": 73,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "11671063945"
    },
    {
      "job": 114229649640,
      "time": 109,
      "config": "macos-release-arm64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11672420189"
    },
    {
      "job": 114229169809,
      "time": 160,
      "config": "source",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11670958288"
    },
    {
      "job": 114229649619,
      "time": 84,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "11671864109"
    },
    {
      "job": 114229649680,
      "time": 59,
      "config": "windows-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "11671179721"
    },
    {
      "job": 114229649643,
      "time": 90,
      "config": "windows-oldrel-x86_64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "11671889140"
    },
    {
      "job": 114229649719,
      "time": 71,
      "config": "windows-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11671269684"
    }
  ],
  "_upstream": "https://github.com/gcol33/keyed",
  "_commit": {
    "id": "f1cfe5048d71749f0c23997567a258967e69b172",
    "author": "Gilles Colling <gilles.colling051@gmail.com>",
    "committer": "Gilles Colling <gilles.colling051@gmail.com>",
    "message": "docs: rebuild the site home and articles with the Installation section first\n\nCo-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0125ATdzEWbbrr9yi1oqSP7S\n",
    "time": 1791637495
  },
  "_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
  },
  "_distro": "resolute",
  "_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
    },
    {
      "week": "2026-24",
      "n": 4
    },
    {
      "week": "2026-25",
      "n": 1
    },
    {
      "week": "2026-27",
      "n": 2
    },
    {
      "week": "2026-41",
      "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": 46,
      "uuid": 25009600
    }
  ],
  "_userbio": {
    "uuid": 25009600,
    "type": "user",
    "name": "Gilles Colling",
    "followers": 10,
    "description": "Building tools for ecology in R, C++, and Rust.\nWhy did Microsoft have to buy it. Sadge :("
  },
  "_downloads": {
    "count": 310,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/keyed"
  },
  "_devurl": "https://github.com/gcol33/keyed",
  "_pkgdown": "https://gillescolling.com/keyed/",
  "_searchresults": 8,
  "_rbuild": "4.6.1",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/keyed.html",
    "extra/manual.pdf",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/readme.html",
    "extra/readme.md",
    "LICENSE"
  ],
  "_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": [
        "Installation",
        "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-10-10 12:14:19",
      "commits": 7
    },
    {
      "source": "quickstart.Rmd",
      "filename": "quickstart.html",
      "title": "Quick Start",
      "author": "Gilles Colling",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Installation",
        "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-10-10 12:14:19",
      "commits": 7
    }
  ],
  "_score": 5.301029995663981,
  "_indexed": true,
  "_nocasepkg": "keyed",
  "_universes": [
    "gcol33"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.2.0",
      "date": "2026-10-10T14:00:04.000Z",
      "distro": "resolute",
      "commit": "f1cfe5048d71749f0c23997567a258967e69b172",
      "fileid": "https://r2.ropensci.org/7c2a14d7cd03228a01fa77529691ba3301737e2a4534af28c82b9bc2ba78d6bf",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/38057591090"
    },
    {
      "r": "4.6.1",
      "os": "linux",
      "version": "0.2.0",
      "date": "2026-10-10T13:59:50.000Z",
      "distro": "resolute",
      "commit": "f1cfe5048d71749f0c23997567a258967e69b172",
      "fileid": "https://r2.ropensci.org/4febe79920c128e2e66a8dd16b685d4dc58a3ebde22674dc4313b9d5f0fbeb16",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/38057591090"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.2.0",
      "date": "2026-10-10T14:09:36.000Z",
      "commit": "f1cfe5048d71749f0c23997567a258967e69b172",
      "fileid": "https://r2.ropensci.org/df164abed29f101fa0d410fe970ac579b2e04cd46a5f33c773a2ed6aa1348a18",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/38057591090"
    },
    {
      "r": "4.6.1",
      "os": "mac",
      "version": "0.2.0",
      "date": "2026-10-10T14:06:07.000Z",
      "commit": "f1cfe5048d71749f0c23997567a258967e69b172",
      "fileid": "https://r2.ropensci.org/98b8d982add61bc586f6723eef8784bfb87eb97999c7d91200376db60d13e004",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/38057591090"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.2.0",
      "date": "2026-10-10T13:59:45.000Z",
      "commit": "f1cfe5048d71749f0c23997567a258967e69b172",
      "fileid": "https://r2.ropensci.org/502043703aca959e1d9a3383bb413054046c750d6a70d1cad51136a853dae42e",
      "status": "success",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/38057591090"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.2.0",
      "date": "2026-10-10T13:59:00.000Z",
      "commit": "f1cfe5048d71749f0c23997567a258967e69b172",
      "fileid": "https://r2.ropensci.org/2ca45cac144a8bec9fba275e3c2a53d1c0b4654a862342a2d2d8ad6e339c674a",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/38057591090"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.2.0",
      "date": "2026-10-10T13:59:28.000Z",
      "commit": "f1cfe5048d71749f0c23997567a258967e69b172",
      "fileid": "https://r2.ropensci.org/139622deedd9bc3af6373ca58896883bce847c769f2df534462da96d819e6c80",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/38057591090"
    },
    {
      "r": "4.6.1",
      "os": "win",
      "version": "0.2.0",
      "date": "2026-10-10T13:59:04.000Z",
      "commit": "f1cfe5048d71749f0c23997567a258967e69b172",
      "fileid": "https://r2.ropensci.org/93cf0175b3f80a162bd901e5ebdf8f8de67343331229aa567ff7cfb8daa32343",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/38057591090"
    }
  ]
}