Plainfile Project Check
Plainfile Project Check is a free, open-source, dependency-free Python tool for comparing before-and-after project exports by stable ID. It runs locally, reads only the files you name, and emits a deterministic JSON report. It sends no data, performs no network requests, and includes no telemetry or runtime advertising.
It checks missing and unexpected project/task IDs, duplicate IDs in either snapshot, tasks whose project is absent, task-to-project reassignments, and exact-decimal work_minutes changes. A clean result exits 0, differences exit 1, and invalid input or a refused output exits 2.
Requires Python 3.10 or newer.
Install an offline wheel
From the directory containing the downloaded wheel, install the supplied file without relying on package-registry availability, contacting an index, or resolving dependencies:
python -m pip install --no-index --no-deps plainfile_project_check-0.1.0-py3-none-any.whl
To run directly from a source checkout without installing, set PYTHONPATH to the src directory, then use the module command:
$env:PYTHONPATH = "src"
python -m plainfile_project_check examples/before.json examples/after-clean.json
Quick start with JSON
The normalized JSON format is exactly:
{
"projects": [{"id": "P-001", "name": "Plan"}],
"tasks": [{"id": "T-001", "project_id": "P-001", "name": "Task", "work_minutes": "60.50"}]
}
From an installed package:
plainfile-project-check before.json after.json --output report.json
The module form is equivalent:
python -m plainfile_project_check before.json after.json
Omit --output to print the report to standard output. An output path must be new. The tool refuses to overwrite an existing output or either input.
CSV adapter
For each snapshot, create one directory containing these two UTF-8 CSV files with exactly these header names and order:
projects.csv
id,name
P-001,"Plan, phase one"
tasks.csv
id,project_id,name,work_minutes
T-001,P-001,"Review, exact totals",60.50
Then run:
plainfile-project-check before-dir after-dir --format csv --output report.json
Ready-to-run synthetic directories are included:
plainfile-project-check examples/csv-before examples/csv-after-corrupted --format csv
CSV values remain text, so IDs such as 0007 keep their leading zeros. The adapter uses ordinary comma-delimited CSV with double-quoted fields. It rejects missing, reordered, extra, or duplicate columns, malformed rows, invalid UTF-8, and invalid decimal work values.
Each input file is limited to 10 MB. IDs, names, and task project IDs must be non-empty strings. Work minutes must be finite, non-negative exact decimal text or a JSON integer, with at most 50 digits and a decimal exponent from -12 through 12. JSON duplicate object keys are rejected.
Scope and limitations
This tool accepts only user-supplied normalized JSON or the documented two-file CSV shape. It has no native Project Online, Microsoft Project, OData, XML, API, authentication, or extraction support. Exporting and mapping source-system data is your responsibility.
Names are validated but not compared. Tasks with duplicate IDs are reported and excluded from task reassignment and work comparison because identity is ambiguous. Duplicate project IDs are reported but do not suppress task comparisons. The report does not understand scheduling dependencies, calendars, resources, assignments, costs, custom fields, or fields omitted from the snapshots. A clean report does not certify a migration, prove data completeness, or establish legal authority to use the data. Keep source backups and review the report before changing another system.
The package code, documentation, examples, and tests were produced with substantial AI assistance under owner direction. All fixtures are original synthetic data; they contain no client data and demonstrate no client results. The package does not promise automatic updates, custom maintenance, or support.
The MIT license permits personal and commercial use, modification, and redistribution with its notice. It does not claim exclusive human authorship or exclusive ownership of general algorithms or AI-generated material.
If you need a separate pre-import CSV cleanup utility, Plainfile Tools sells CSV Import Check for $19. It is a distinct product, is not required for this package, and does not unlock features here.
Contact: plainfiletools@gmail.com
Development
python -m unittest discover -s tests -v
python -m build --no-isolation
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file plainfile_project_check-0.1.0.tar.gz.
File metadata
- Download URL: plainfile_project_check-0.1.0.tar.gz
- Upload date:
- Size: 13.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b85b7edd1f3eeaeb8d569ab1df740770dba13688bd5f35281b5fb89a283e1e4
|
|
| MD5 |
843530cee18010daf4658a0b36c6cb71
|
|
| BLAKE2b-256 |
6838396268d865aacc18206eb7ba562c05e38b4bf76cde96d5e94d604af5de0d
|
File details
Details for the file plainfile_project_check-0.1.0-py3-none-any.whl.
File metadata
- Download URL: plainfile_project_check-0.1.0-py3-none-any.whl
- Upload date:
- Size: 11.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
710f3bf7185f9f86753b9d7bce2c8f1199e9201f64006426e8e04523403f7eee
|
|
| MD5 |
f5e92c098e6d1025f70d2a4e96df7b6c
|
|
| BLAKE2b-256 |
6e7b912f86096aa443f7e892c8fd9f7a015d819d57105f11983338c65cb04b5d
|