14 Free Tools for January BUILD_RECEIPT Unfreeze and Capstone Row Audit After Holiday Freeze - 2026

January 6: January re-entry smoke is GREEN on fest-demo-2026-12-rc3. January 7: engineering merges the first deferred PR. January 8: someone asks in Discord whether november_closeout_ok and january_reentry_smoke_ok still match the child receipts from November—and whether last week's Steam upload row exists in upload_log.csv.
Nobody opens eleven JSON files. Someone pastes a screenshot of one GREEN gate. February RC promotion gets scheduled anyway.
January 2027 unfreeze is not "merge and hope." Micro-studios that filed December defer lists and ran Friday capstone row review before the break still need a tooled audit when work resumes—because holiday merges, contractor handoffs, and "one small tweak" PRs drift *_ok booleans without touching BUILD_RECEIPT root rows.
This Listicles & Resource Roundups post gives fourteen free CLI tools (plus a printable checklist) to audit capstone booleans, diff receipt rows, and crosswalk upload logs—then file january_unfreeze_audit_receipt_v1.json with gates U1–U6 before the first post-freeze promote.
Non-repetition note: jq November capstone crosswalk owns J1–J6 child build_label jq for Lessons 266–275. Thursday row review owns weekly R1–R10 diff ritual. January re-entry evening owns R1–R6 baseline smoke. Resource forward #35 will bookmark-expand this stack. This URL is the January unfreeze audit tool catalog + minimum four-tool stack—not another metadata checklist.
Pair BUILD_RECEIPT beginner, February RC label receipt, and forward #4 seven-day RC smoke challenge.
Why this matters now (January 2027 unfreeze)
- Capstone boolean sprawl — November close-out indexed dozens of
*_okfields; January merges can flip one child without updating root BUILD_RECEIPT. - Upload log drift — Steam bytes moved during holiday hotfix windows; receipt channel rows may lag CSV truth.
- Re-entry ≠ full audit — GREEN re-entry smoke proves baseline binary; it does not re-scan every capstone child path.
- February RC clock — February label receipt assumes
january_reentry_smoke_okand capstone rows are current. - Discord archaeology fails — Tooled audit replaces "which receipt was GREEN?" threads with exit codes.
Direct answer: Run jq + diff + rg + mlr minimum stack; print the audit checklist; file january_unfreeze_audit_receipt_v1.json with U1–U6 GREEN before resuming numbered defer work or February RC upload.
Who this listicle is for
| Audience | You will use these tools to… |
|---|---|
| Beginner | Adopt the four-tool minimum stack in one afternoon |
| Solo founder | Stop manual JSON opens before every January merge |
| Producer | Gate unfreeze on january_unfreeze_audit_ok |
| Working dev | Wire jq guards into Monday CI after manual discipline works |
Time: ~45 minutes for four-tool minimum audit; ~2 hours for full fourteen-tool pass + receipt on first January week.
Beginner cheat sheet — four-tool minimum stack
| # | Tool | January job | Install sketch |
|---|---|---|---|
| 1 | jq | Prove capstone *_ok booleans and build_label parity |
choco install jq / winget install jqlang.jq |
| 2 | diff (or git diff) |
Line-diff BUILD_RECEIPT vs last promoted snapshot | Git for Windows includes diff |
| 3 | rg (ripgrep) | Find stale *_ok: false and orphan receipt paths |
winget install BurntSushi.ripgrep.MSVC |
| 4 | mlr (Miller) | Join upload_log.csv rows to receipt channel fields |
winget install Miller.Miller |
Rule: If all four pass, you are ready to file the receipt. Tools 5–14 add hash integrity, schema validation, watch mode, and prettier human review—worth it before partner diligence zip.
Developer path — gates U1–U6 + receipt
| Gate | Name | Pass criteria |
|---|---|---|
| U1 | Capstone scan | All indexed *_ok booleans GREEN or documented YELLOW waiver |
| U2 | Label parity | Root build_label matches jq crosswalk of child receipts |
| U3 | Upload log join | Every receipt channel row has matching upload_log.csv entry |
| U4 | Re-entry lineage | january_reentry_smoke_ok: true with valid child receipt path |
| U5 | No orphan paths | rg finds zero broken *_receipt_v1.json pointers in BUILD_RECEIPT |
| U6 | Receipt filed | january_unfreeze_audit_receipt_v1.json committed; january_unfreeze_audit_ok: true on root |
U2–U4 are unfreeze blockers when RED. Run audit after re-entry smoke GREEN and before first deferred merge promote or February RC label evening.
Printable audit checklist (copy to release-evidence/ops/january-unfreeze-audit-checklist.md)
# January 2027 BUILD_RECEIPT unfreeze audit
iso_week: 2027-W02
baseline_build_label: fest-demo-2026-12-rc3
[ ] U1 — jq capstone *_ok scan (attach log)
[ ] U2 — build_label child crosswalk (jq exit 0)
[ ] U3 — mlr upload_log join (zero missing channels)
[ ] U4 — january_reentry_smoke receipt path exists
[ ] U5 — rg orphan path scan (zero hits)
[ ] U6 — january_unfreeze_audit_receipt_v1.json filed
[ ] Root BUILD_RECEIPT january_unfreeze_audit_ok == true
[ ] Producer sign-off before defer #1 merge
Pin this beside Thursday row review template and December defer defer-list table.
The fourteen tools
Tool 1 — jq (capstone boolean and label crosswalk)
January job: One command proves root build_label matches child receipts indexed in November capstone.
jq -e --slurpfile cap release-evidence/capstone/november_closeout_capstone_v1.json '
.build_label as $root
| ($cap[0].receipt_paths | map(.path) | unique) as $paths
| [ $paths[] | input_filename | . ]
' BUILD_RECEIPT.json release-evidence/**/*.json
Simpler U1 scan for stale booleans:
jq -e '[paths | select(.[-1] | test("_ok$")) | {key: join("."), value: getpath(.)}]
| map(select(.value == false)) | length == 0' BUILD_RECEIPT.json
Pass when: Exit code 0. Fail when: Any *_ok: false without linked waiver in defer receipt.
Pair: jq November sketch J1–J6; extend child list for January-added receipts.
Tool 2 — diff (BUILD_RECEIPT row snapshot)
January job: Compare today's BUILD_RECEIPT against the last promoted snapshot saved at freeze latch (Friday capstone).
diff -u release-evidence/archive/BUILD_RECEIPT-promoted-2026-W52.json BUILD_RECEIPT.json \
| colordiff | less -R
Pass when: Diff shows only expected January columns (january_reentry_smoke_ok, audit fields)—not surprise build_label bumps.
Beginner note: Save promoted snapshot at freeze; if you did not, use git show HEAD~N:BUILD_RECEIPT.json as baseline (Tool 6).
Tool 3 — git diff (holiday merge receipt archaeology)
January job: See which receipt files changed during the break without opening each commit.
git diff main -- 'release-evidence/**/*.json' 'BUILD_RECEIPT.json'
Pass when: Every changed receipt has matching BUILD_RECEIPT row update in the same commit series.
Fail signal: Child receipt bumped build_label in isolation—re-run jq crosswalk.
Tool 4 — ripgrep (rg) — orphan paths and stale gates
January job: Find broken receipt pointers and lingering false gates.
rg '"_ok": false' release-evidence/ BUILD_RECEIPT.json
rg -o '[a-z_]+_receipt_v1\.json' BUILD_RECEIPT.json | sort -u \
| while read f; do test -f "$f" || echo "MISSING: $f"; done
Pass when: U5 zero MISSING lines; every false has defer waiver ID in December defer receipt.
PowerShell variant:
Select-String -Path BUILD_RECEIPT.json -Pattern '_receipt_v1\.json' -AllMatches |
ForEach-Object { $_.Matches.Value } | Sort-Object -Unique |
ForEach-Object { if (-not (Test-Path $_)) { "MISSING: $_" } }
Tool 5 — fd (fast receipt discovery)
January job: Inventory all *_receipt_v1.json under release-evidence/ before capstone scan.
fd -e json '_receipt_v1' release-evidence/
Pass when: Count matches capstone index; no surprise receipts outside indexed paths.
Why not find: fd respects .gitignore and is faster on large trees—useful when November arc added twenty child files.
Tool 6 — git log --follow (BUILD_RECEIPT lineage)
January job: Answer "when did build_label last change?" without blame theater.
git log --follow -p -- BUILD_RECEIPT.json | less
Pass when: Last build_label change aligns with documented SHIP exception or re-entry smoke receipt—not silent holiday merge.
Tool 7 — Miller (mlr) — upload log channel join
January job: Prove every receipt channel row exists in upload_log.csv (U3).
mlr --csv join -f BUILD_RECEIPT-channels.csv -j channel \
then filter '$upload_build_id != ""' upload_log.csv
Extract channels from BUILD_RECEIPT first:
jq -r '.channels[]? | [.name, .build_id] | @csv' BUILD_RECEIPT.json > BUILD_RECEIPT-channels.csv
Pass when: Zero unmatched channels; every Steam promote has CSV row with matching build_id.
Pair: BUILD_RECEIPT beginner upload log evening Block C.
Tool 8 — csvkit csvdiff (upload log duplicate detection)
January job: Catch duplicate build_id rows after hectic holiday uploads.
csvdiff -k build_id upload_log.csv upload_log-baseline-2026-W52.csv
Pass when: No unexpected duplicate keys; new rows documented in Thursday row_diff[].
Install: pip install csvkit (free, cross-platform).
Tool 9 — Python json.tool (structure sanity)
January job: Pretty-print before human review; catch trailing commas and invalid JSON.
python -m json.tool BUILD_RECEIPT.json > /dev/null && echo OK
Pass when: Exit 0 on root and every child receipt in capstone index.
Why include: jq fails cryptically on syntax errors; run json.tool first in CI pre-step.
Tool 10 — PowerShell Compare-Object (Windows key diff)
January job: Key-level diff when diff is noisy on JSON key reorder.
$old = Get-Content .\archive\BUILD_RECEIPT-promoted.json | ConvertFrom-Json
$new = Get-Content .\BUILD_RECEIPT.json | ConvertFrom-Json
Compare-Object ($old.PSObject.Properties.Name) ($new.PSObject.Properties.Name)
Pass when: Only expected January keys introduced (january_unfreeze_audit_ok, january_reentry_smoke_ok).
Tool 11 — sha256sum / Get-FileHash (evidence integrity)
January job: Verify screenshot and log attachments referenced in receipts still match hashes on disk.
sha256sum release-evidence/steam/february-rc/*.png > january-audit-hashes.txt
PowerShell:
Get-FileHash release-evidence\**\*.png -Algorithm SHA256 |
Export-Csv january-audit-hashes.csv -NoTypeInformation
Pass when: Hashes match values stored in january_unfreeze_audit_receipt_v1.json evidence_hashes[].
Tool 12 — colordiff (human-readable row review prep)
January job: Colorized diff for producer review before Thursday row review—attach output to audit receipt human_diff_path.
diff -u baseline.json BUILD_RECEIPT.json | colordiff > january-unfreeze-diff.txt
Pass when: Producer signs checklist with diff attached—not verbal "looks fine."
Tool 13 — check-jsonschema (schema guard)
January job: Validate receipts against team JSON Schema before jq gates run.
check-jsonschema --schemafile schemas/january_unfreeze_audit_receipt_v1.schema.json \
release-evidence/audit/january_unfreeze_audit_receipt_v1.json
Pass when: Schema validation exit 0; add schema bump note when U1–U6 keys change.
Alternative: ajv validate -s schema.json -d receipt.json (npm ajv-cli).
Tool 14 — entr (watch mode for receipt folder)
January job: Re-run jq U1 scan automatically when any receipt saves during unfreeze week.
find release-evidence -name '*_receipt_v1.json' | entr -c ./scripts/verify_january_unfreeze.sh
Pass when: Watch script exits 0 before commit; fail-closed on save during high-churn January afternoon.
Solo dev tip: Skip entr until manual audit works once—then automate to prevent "forgot to re-scan" merges.
january_unfreeze_audit_receipt_v1.json (schema)
{
"schema": "january_unfreeze_audit_receipt_v1",
"iso_week": "2027-W02",
"baseline_build_label": "fest-demo-2026-12-rc3",
"tools_used": ["jq", "diff", "rg", "mlr", "git-diff", "fd", "json.tool"],
"gates": {
"U1": "GREEN",
"U2": "GREEN",
"U3": "GREEN",
"U4": "GREEN",
"U5": "GREEN",
"U6": "GREEN"
},
"evidence": {
"checklist_path": "release-evidence/ops/january-unfreeze-audit-checklist.md",
"jq_capstone_log": "release-evidence/audit/2027-W02-jq-capstone-scan.log",
"upload_log_join": "release-evidence/audit/2027-W02-mlr-join.csv",
"human_diff_path": "release-evidence/audit/january-unfreeze-diff.txt",
"january_reentry_receipt": "release-evidence/03-builds/january-reentry/2027-W01/january_reentry_smoke_receipt_v1.json"
},
"january_unfreeze_audit_ok": true,
"defer_work_resumed": false,
"notes": "Audit complete; defer #1 authorized after producer sign-off"
}
BUILD_RECEIPT root rows (same commit)
{
"build_label": "fest-demo-2026-12-rc3",
"january_reentry_smoke_ok": true,
"january_unfreeze_audit_ok": true,
"january_unfreeze_audit_receipt": "release-evidence/audit/january_unfreeze_audit_receipt_v1.json",
"november_closeout_ok": true,
"holiday_defer_ok": true
}
Set defer_work_resumed: true only after audit GREEN and numbered defer #1 is intentionally started—keeps audit receipt distinct from merge permission.
verify_january_unfreeze.sh (copy-paste guard)
#!/usr/bin/env bash
set -euo pipefail
ROOT="${1:-BUILD_RECEIPT.json}"
jq -e '[paths | select(.[-1] | test("_ok$")) | getpath(.)] | all' "$ROOT"
jq -e '.january_reentry_smoke_ok == true' "$ROOT"
jq -e '.january_unfreeze_audit_ok == true' \
release-evidence/audit/january_unfreeze_audit_receipt_v1.json
echo "january_unfreeze: OK"
Wire as required check before fest branch promote in GitHub Actions—after manual January week passes once.
Proof table
| Evidence | Proves | Fail signal |
|---|---|---|
| jq capstone log | U1 boolean scan | Hidden *_ok: false |
| diff / Compare-Object | Row drift since freeze | Surprise build_label |
| mlr join output | U3 upload parity | Promote without CSV row |
| rg orphan scan | U5 path integrity | Broken child pointer |
| Audit receipt JSON | U6 human gate | Verbal "we checked" |
| Printable checklist | Producer sign-off | Missing U4 re-entry link |
Scenarios A–G
| ID | Situation | Move |
|---|---|---|
| A | First January week after GREEN re-entry | Run four-tool minimum + file receipt |
| B | build_label changed during holiday |
U2 RED until re-entry or SHIP exception documented |
| C | Contractor edited child receipt only | rg + jq; update root BUILD_RECEIPT same commit |
| D | Upload log missing channel row | U3 RED; fix CSV before February RC |
| E | Solo dev, no mlr installed | Use csvkit or manual VLOOKUP—document tool substitution in receipt |
| F | Capstone child YELLOW waiver | U1 YELLOW allowed with defer ID—not silent false |
| G | Audit GREEN, first defer merge | Set defer_work_resumed: true; run Thursday row review same week |
One-afternoon worked schedule
| Time | Action | Gate |
|---|---|---|
| 13:00 | Confirm re-entry receipt path | U4 |
| 13:15 | fd inventory + rg orphan scan | U5 |
| 13:30 | jq U1 + U2 capstone scan | U1, U2 |
| 14:00 | diff vs promoted snapshot | review |
| 14:20 | mlr upload_log join | U3 |
| 14:40 | Fill printable checklist | sign-off |
| 15:00 | Write audit receipt; update BUILD_RECEIPT | U6 |
Format ladder (January cluster)
| Artifact | Role |
|---|---|
| January re-entry | Baseline binary smoke |
| This listicle | Tooled capstone audit before defer resume |
| February RC label | RC label unity before upload |
| 7-day RC challenge forward (#4) | Daily smoke calendar |
| Resource #35 forward | Bookmark-expanded tool matrix |
Common mistakes
| Mistake | Fix |
|---|---|
| Skipping audit because re-entry was GREEN | Re-entry ≠ capstone scan |
| Manual Discord "all GREEN" | File receipt with jq log |
| Auditing once, merging all month | Re-run after each capstone-touching PR |
| Using only Steam build ID | mlr join on channel + build_id |
| Deleting promoted snapshot at freeze | Archive BUILD_RECEIPT-promoted-YYYY-Www.json |
Counterarguments (honest limits)
"We already ran Friday capstone review."
December latch proves pre-freeze truth. January audit catches holiday drift before defer work resumes.
"jq crosswalk is enough."
Crosswalk proves build_label. U3 upload join and U5 orphan scan need mlr and rg—different failure modes.
"Fourteen tools is overkill."
Minimum stack is four. Tools 5–14 are optional depth for partner zip and CI wiring—skip until manual four-tool pass works.
Outbound references
- jq manual —
paths,getpath, slurpfile patterns - Miller CSV join — upload log joins
- ripgrep guide — receipt path scans
Related GamineAI reads
- January re-entry Wednesday smoke
- February RC branch-label receipt
- Thursday BUILD_RECEIPT row review
- Friday November capstone row review
- jq November capstone crosswalk
- jq January reentry capstone pointer — J1–J6 pointer to November truth before February RC
- December defer FREEZE playbook
- BUILD_RECEIPT beginner pipeline
- 12 GitHub Actions concurrency patterns
- February 2027 prep calendar
- Steam Playtest isolation resource
Key takeaways
- January unfreeze needs a tooled capstone audit—not only GREEN re-entry smoke.
- Four-tool minimum: jq, diff, rg, mlr—file receipt before defer #1 merge.
- Gates U2–U4 block promote when label, upload log, or re-entry lineage drifts.
january_unfreeze_audit_receipt_v1.jsonrecords tools used and evidence paths.january_unfreeze_audit_okon BUILD_RECEIPT latches audit completion.- Pair jq November crosswalk for U2—not duplicate J1–J6 intent.
- Thursday row review runs weekly after merges resume.
- Printable checklist gives producers a sign-off surface.
- Tools 5–14 optional until partner zip or CI automation needs them.
- Resource #35 forward expands bookmark matrix.
- Forward #4 seven-day RC challenge assumes audit GREEN first—run 7-day February RC smoke challenge during RC week.
- Re-run audit after any PR touching capstone child receipts.
- Git LFS pointer drift case study when January hotfix merges touch
*.bank—add bank stub scan to U1 pass.
FAQ
Is this the same as jq November crosswalk?
No. Crosswalk proves child build_label alignment (J1–J6). This audit scans *all `_ok` booleans**, upload log joins, and orphan paths (U1–U6).
Can I unfreeze without the audit receipt?
Not recommended. December defer assumes documented gates—not verbal all-clear.
Must I install all fourteen tools?
No. Start with the four-tool minimum. Document substitutions in receipt tools_used[].
When does defer work resume?
After U1–U6 GREEN, producer sign-off, and intentional defer_work_resumed: true on audit receipt.
How does this relate to February RC label receipt?
Run this audit before bumping to fest-demo-2027-02-rc*—February evening assumes capstone rows current.
Windows-only team?
Tools 1–4, 9–10 work on Windows; use PowerShell Compare-Object and Get-FileHash equivalents.
Closing
January unfreeze fails quietly when capstone booleans drift while Discord still says "we froze in December." Fourteen free tools—starting with jq, diff, rg, and mlr—turn that anxiety into exit codes, printable checklists, and january_unfreeze_audit_receipt_v1.json evidence.
Audit before you merge defer #1. File the receipt before February RC promotion. Let tools disagree with your memory early, when fixes are cheap.
Next: backlog #5 — Git LFS pointer drift case study; see 7-day RC challenge for RC-week discipline.