Bachelor-Check

A command-line tool that checks local text files for AI-written content with the Pangram detector. It runs free mock checks by default, and it guards paid live checks behind clear consent. A detector score is a signal, not proof of misconduct.

Status

Phase
Live
CLI works, thesis case stored
Tests
48/48
6 files, typecheck clean
Live spend
$0
GUI report used, no API call
Last updated
2026-09-03
HQ bootstrap
Thesis flag is severe, not final. Pangram 4 marks 81.2% of the test document as AI-written. This is not proof. Use draft history, source notes, and an oral review before any academic step.

What this is

The tool reads a local .txt or .md file and asks: does this read as human, AI, or mixed? Four modes cover four needs. Mock (the default) gives a fixed local answer with no network and no cost. Offline answers honestly with “unknown” and makes no call. Hosted calls the real Pangram web service and spends credits. Bulk checks many texts in one call at 20% lower cost, with a hard cap of 1,000 billed units. Paid modes need two flags together (--allow-network and --accept-cost), show the cost first, and block unknown price tags. Usage logs store word counts and hashes only - never text, file names, or keys.

Log

2026-09-03 · feature
Web HQ live at localhost:8601
Dashboard serves from web-hq/ via a login launchd agent that restarts on crash. First server config 404'd because macOS privacy rules block system Python from reading the Desktop folder when launchd starts it; fixed by using Homebrew Python and a working-directory setting, the same pattern as the factory HQ.
launchctl print com.luca.web-hq.bachelor-check → running · curl http://localhost:8601/ → 200
2026-09-03 · proof
Full suite green: 48 tests pass, typecheck clean
All 6 test files pass (map, telemetry, cost, adapter, CLI, bulk). Run takes under 1 second.
pnpm run test → 6 files, 48 tests passed · pnpm run typecheck → clean
2026-09-03 · feature
Thesis GUI report and analysis inputs stored
Pangram 4 GUI report on the full test document: 81.2% AI-written, 18.6% human, 11,270 words. No API call was made, so repo-side spend stays at $0. See AI_WRITING_CHECK.md for the full result.
commit ca94fd7 · AI_WRITING_CHECK.md · data/reports/pangram-ai-report-bach-26-history.pdf
2026-09-03 · feature
Bulk runner ships with consent gates and unit cap
One call checks a full list of texts. Cost is 20% below single checks. Runs above 1,000 units stop before spend. Reports strip window text and store base names only.
commit fccc2ce · src/detector/bulk.ts · src/bulk-cli.ts · tests/bulk.test.ts (14 tests)
2026-09-03 · decision
Free mode shows cost, polling keeps stage limits, privacy files ignored
Fix run after review: cost math fixed for free runs, server polling honors stage bounds, private thesis files stay untracked.
commit 12b3d9b
2026-09-03 · feature
Mock-first CLI ships with cost and privacy guards
First working build: mock default, honest offline mode, hosted Pangram path with dual consent, append-only logs without text or keys.
commit bd50514 · README.md · src/cli.ts · src/detector/
2026-09-03 · proof
Prices checked on 2026-09-03: Pangram 4 costs $0.05 per 100 words
Unknown models stay blocked for paid runs until a checked price lands in src/cost/pricing.ts.
README.md pricing table · src/cost/pricing.ts · tests/cost.test.ts (6 tests)

Open questions

Next steps

  1. Run Pangram GUI on the rewrite files and store the report next to the baseline (data/reports/).
  2. Confirm free API credits before any bulk call (pnpm bulk stays gated until then).
  3. Commit pending thesis artifacts or keep them untracked per the privacy rule (student files stay out of git).