{"id":46237917,"url":"https://github.com/nicholaskarlson/proof-first-normalizer","last_synced_at":"2026-03-03T19:13:27.913Z","repository":{"id":336558477,"uuid":"1149456591","full_name":"nicholaskarlson/proof-first-normalizer","owner":"nicholaskarlson","description":null,"archived":false,"fork":false,"pushed_at":"2026-02-05T08:39:25.000Z","size":35,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-05T13:40:55.919Z","etag":null,"topics":["cli","csv","deterministic","fixtures","golang","golden-tests","proof-first","validation"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nicholaskarlson.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-04T06:09:52.000Z","updated_at":"2026-02-05T08:39:27.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nicholaskarlson/proof-first-normalizer","commit_stats":null,"previous_names":["nicholaskarlson/proof-first-normalizer"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/nicholaskarlson/proof-first-normalizer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicholaskarlson%2Fproof-first-normalizer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicholaskarlson%2Fproof-first-normalizer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicholaskarlson%2Fproof-first-normalizer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicholaskarlson%2Fproof-first-normalizer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nicholaskarlson","download_url":"https://codeload.github.com/nicholaskarlson/proof-first-normalizer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicholaskarlson%2Fproof-first-normalizer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30056056,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-03T18:21:05.932Z","status":"ssl_error","status_checked_at":"2026-03-03T18:20:59.341Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","csv","deterministic","fixtures","golang","golden-tests","proof-first","validation"],"created_at":"2026-03-03T19:13:27.433Z","updated_at":"2026-03-03T19:13:27.904Z","avatar_url":"https://github.com/nicholaskarlson.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# proof-first-normalizer\n\nDeterministic CSV normalizer + validator (schema-driven).\n\n![ci](https://github.com/nicholaskarlson/proof-first-normalizer/actions/workflows/ci.yml/badge.svg)\n![license](https://img.shields.io/badge/license-MIT-blue.svg)\n\n\u003e **Book:** *The Deterministic Finance Toolkit*\n\u003e This repo is **Project 3 of 4**. The exact code referenced in the manuscript is tagged **[`book-v1`](https://github.com/nicholaskarlson/proof-first-normalizer/tree/book-v1)**.\n\n## Toolkit navigation\n\n- **[proof-first-recon](https://github.com/nicholaskarlson/proof-first-recon)** — deterministic CSV reconciliation (matched/unmatched + summary JSON)\n- **[proof-first-auditpack](https://github.com/nicholaskarlson/proof-first-auditpack)** — deterministic audit packs (manifest.json + sha256 + verify)\n- **[proof-first-normalizer](https://github.com/nicholaskarlson/proof-first-normalizer)** — deterministic CSV normalize + validate (schema → normalized.csv/errors.csv/report.json)\n- **[proof-first-finance-calc](https://github.com/nicholaskarlson/proof-first-finance-calc)** — proof-first finance calc service (Amortization v1 API + demo)\n\n## What it does\n\n- Validates CSVs against a simple JSON schema\n- Produces deterministic outputs:\n  - `normalized.csv`\n  - `errors.csv`\n  - `report.json`\n\n## Quick start\n\nRequirements:\n- Go **1.22+**\n- GNU Make (optional, but recommended)\n\n```bash\n# One-command proof gate\nmake verify\n\n# Portable proof gate (no Makefile)\ngo test -count=1 ./...\ngo run ./cmd/normalizer demo --out ./out\n```\n\n\n## Usage\n\n```bash\n# Print version\ngo run ./cmd/normalizer version\n\n# Demo: recomputes fixture cases and verifies outputs match goldens\ngo run ./cmd/normalizer demo --out ./out\n```\n\n## Output artifacts (high level)\n\n- `normalized.csv` — canonicalized headers + normalized fields\n- `errors.csv` — row-level validation failures (if any)\n- `report.json` — counts, schema name, and deterministic summary stats\n\n## Determinism contract\n\nThis project is intentionally “boring” in the best way: the same inputs must produce the same outputs.\n\nSee: **[`docs/CONVENTIONS.md`](docs/CONVENTIONS.md)** (rounding, ordering, LF, atomic writes, stable JSON, etc.).\n\n\n## Handoff / maintenance\n\nSee: **[`docs/HANDOFF.md`](docs/HANDOFF.md)** (acceptance gates, troubleshooting, and “what to change (and what not to)”).\n\n\n## License\n\nMIT (see `LICENSE`).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnicholaskarlson%2Fproof-first-normalizer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnicholaskarlson%2Fproof-first-normalizer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnicholaskarlson%2Fproof-first-normalizer/lists"}