HyperPKPD version 0.0.0.12

Version & Purpose

Version at the time of writing: 0.0.0.23. The version of the program you are running is printed by data-obfuscator --version (in the banner) at the start of every run, and is stored in the VERSION file.

How versions work

The version has four parts: MAJOR.MINOR.PATCH.REVISION, and it started at 0.0.0.1.

  • The last part, REVISION, goes up automatically. build.rs keeps a fingerprint of everything that counts as the program (src/, tests/, documentations/, build.rs, Cargo.toml, README.md). The first build after any change to those files raises REVISION by one and writes the new number to VERSION and .version-state.
  • Building again without changes keeps the version. Changes that only alter line endings do not count.
  • The version is compiled into the program and shown in the banner, in --version, and in the header of every key and log file the program writes, so a masked dataset can always be tied to the version that made it.
  • To raise MAJOR, MINOR or PATCH, edit VERSION by hand (for example to 0.1.0.0); the next change continues from there. Cargo.toml says 0.0.1 only because Cargo accepts three-part versions; that field is a placeholder.
  • Every version has an entry in CHANGELOG.md, and every release is also packed as data-obfuscator-<version>.tar.gz with a line in versions.log (archive name, size, SHA-256 and a two-sentence summary).

Some version numbers were never released: a build made while a feature was still being finished also raises the number. Those intermediate versions (0.0.0.11 and 0.0.0.13 to 0.0.0.19) have no entry of their own; their changes are described under the next released version.

Why each version exists

Version Purpose
0.0.0.1 First versioned release. Four-part versioning, the --version banner, coloured messages, the first warnings, llm.txt prompts and token estimates for several model families.
0.0.0.2 Reproducibility. The masked dataset became byte-identical for the same input, options and seed; 14 example configs; byte-order-mark handling; CONFIGS.md.
0.0.0.3 Several columns per role (for example STU, STUDYID, STUDY), five example datasets including QC sets with planted defects, wrong-field-count rows kept as they are, more warnings.
0.0.0.4 Correct compact dates (20240325), scaling replaces jitter (multiply or divide by a hidden factor), the overwrite guard for output folders, and the keymap on by default.
0.0.0.5 Decimal date shift (1 to 100 days, for example 23.6), recorded in the keymap and settable by the user.
0.0.0.6 Column renaming, and a descriptive keymap.txt header with numbered sections.
0.0.0.7 README rewrite: the problem, the design, a worked example, the full workflow and reference.
0.0.0.8 README diagram of what goes in and what comes out, grouped into share, for-you and keep-private.
0.0.0.9 Level 4 varies per value: each value gets its own factor within plus or minus 15 % of the column's base factor.
0.0.0.10 keymap_columns.txt and the reverse command: the per-value factors are recorded so level 4 can be undone exactly, and a masked dataset can be restored even when its rows or columns were re-ordered.
0.0.0.12 Better row keys: study columns (STU, STDY, ...) join the key in keymap_columns.txt; STDY is recognised as a study column.
0.0.0.20 run2 and reversal of combined datasets: several ADaM datasets masked together with shared codes, and reverse restoring the master dataset an LLM builds from them.
0.0.0.21 Documentation folder: the documentations folder with these introductory pages, now counted as part of the program for versioning.
0.0.0.22 Detailed documentation: two more introduction pages and fourteen "Using the Program" pages, one for each command and group of options, with about ninety figures and the real output of tested example runs, and downloadable example files.
0.0.0.23 Author, license and citation, and a new first page: the author page now gives the full name, title, website, LinkedIn and Google Scholar, an MLA citation to copy, and the CC BY-ND 4.0 license (use and cite, do not alter without permission) in place of MIT; the first page is renamed Pharmacometrics Data Obfuscator and opens with the case for never sharing real data with an outside LLM.

The thread running through the versions

  1. Keep the analysis intact (0.0.0.1 to 0.0.0.4): protect the PK/PD columns, get dates and numbers right.
  2. Make it trustworthy (0.0.0.2, 0.0.0.3, 0.0.0.5): reproducible output, honest warnings, a clear record of what was done.
  3. Mask harder (0.0.0.4, 0.0.0.6, 0.0.0.9): scaling, renaming, per-value variation.
  4. Make it reversible (0.0.0.10, 0.0.0.12, 0.0.0.20): a complete key, a reverse command, and support for combining several datasets and still getting the real values back.
  5. Explain it (0.0.0.7, 0.0.0.8, 0.0.0.21, 0.0.0.22, 0.0.0.23): README, diagrams, examples, these pages, and who to credit.

Where to find the details

  • CHANGELOG.md: what changed in every released version, newest first.
  • versions.log (next to the project folder): archive, size, checksum and summary of every release.
  • VERSION and .version-state: the current version and the fingerprint behind it.