EDA Desk - notice ================= edakit.js is a JavaScript port of three command-line tools, and the helpers they import, from the "exploratory-data-analysis" agent skill in k-dense-ai/scientific-agent-skills (skills/exploratory-data-analysis/scripts, commit 49c6e97775eaa18ba791bebe23162a70ae601c18, skill metadata version 1.2): tabular_profile.py, missingness_leakage_audit.py, distribution_sensitivity.py, and the parts of _tabular.py, _common.py and _capabilities.py they call. The skill is published under the MIT License, Copyright (c) 2025 K-Dense Inc.; the licence text is in LICENSE-exploratory-data-analysis-skill.txt. The port keeps the original messages, bounds, sampling rule (BLAKE2s-prioritised heap), tokens, formulas and JSON layout. How it was checked. The Python scripts were run in-process under CPython 3.12.13 on fuzzed CSV/TSV files (valid and malformed: quoting, CR/LF/CRLF line ends, blank lines, BOMs, invalid UTF-8, Unicode digits and case folding, missing codes, huge and subnormal values, 500-5,200-row files that exercise the bounded samples, role and column arguments that are missing or duplicated) and compared with edakit.js run by Node on the same bytes and arguments. On the shipped edakit.js (sha256 defe3a0b...) 5,000 fuzzed runs matched in exit code, stderr and stdout, including 2,085 refusals (exit 2) and 201 runs where the Python stops with an uncaught exception (exit 1: overflow in pow or fsum), which the page reports as a crash rather than inventing a report. An earlier 2,500-run batch on the previous revision also matched. datetime.fromisoformat (C implementation, 3.12 behaviour) was compared on generated strings: one difference in the first 60,000 (a zero-second UTC offset carrying microseconds is plain UTC in CPython) was fixed, then 350,000 more matched with no difference. One stated difference. The three skewness fields call pow() and log1p() in CPython, which defer to the platform libm; macOS libm is not correctly rounded for pow(x, 2) in about 0.2% of inputs or log1p in about 0.03%, and V8's Math functions differ again. The page computes x**2, x**3, v**1.5 and log1p correctly rounded (BigInt arithmetic). In the 5,000-run batch 8 skewness values differed from CPython-on-macOS in the last digits (all within 1e-12 relative); everything else was byte-identical. The Python output itself varies by operating system in these fields. Known limits of the port: a file that is not valid UTF-8 is refused before any row is read (the Python decodes lazily and can process rows before the bad bytes in files larger than its read buffer); Unicode "printable" and case-folding tables follow the browser's Unicode version, which can differ from CPython 3.12's (Unicode 15.0) for newly assigned characters; CPython 3.14 parses "24:00" in time values and 3.12 does not - the page follows 3.12. fixkit.js (the resplit by entity or group, the plain-CSV rewrite of semicolon exports, the missing-code suggestions and the since-last-audit counts) is this page's own code, not part of the skill. The resplit hashes each entity or group value with BLAKE2s and assigns it by the current splits' row shares; it ignores time. The example datasets (clinic visits, bioreactor runs) were generated for this page with a seeded random generator. They describe no real people and no real plant. The skill asks that, if it materially contributes to a manuscript, report, presentation or code release, the following paper be cited (record checked at arxiv.org on 2026-09-27: v2, revised 2 September 2026): Kassis, T., Agarwal, V., He, Y., Patel, D., & Brueckner, A. M. (2026). Scientific Agent Skills: A Library of Procedural Knowledge for Research Agents. arXiv:2609.00065. https://doi.org/10.48550/arXiv.2609.00065