Releases: gulmezeren2-byte/ihalent
Release list
ihalent 0.3.1 — fix piped-output crash on Windows
Fixes a crash when output is piped on Windows. Worth upgrading if you're on Windows or run this in CI.
A piped stdout on Windows gets the legacy code page rather than UTF-8. This tool prints a firm name like ÖZKAN İNŞAAT LTD. ŞTİ. or a label like kırım — and those characters raised UnicodeEncodeError, taking the whole command down. Piping into a file or a parser, and any CI step capturing the log, failed on entirely ordinary data.
Output streams are now asked for UTF-8, and the guard never fails if a stream won't take it. Regression tests cover both the legacy-code-page path and a stream with no reconfigure().
Found by reproducing the defect class that had just been fixed in claude-skills-doctor, then confirming it here against real Turkish content — the bug was worse in these tools, because the characters that break are the data itself rather than decoration.
🤖 Generated with Claude Code
v0.3.0 — procurement red flags
Procurement red flags. ihalent flags surfaces the per-award risk signals that transparency and audit work looks for — the same family as single-bid, generalised:
ihalent flags awards.jsonl
ihalent flags awards.jsonl --low-discount 5 # widen the near-estimate band
ihalent flags awards.jsonl --json
Each flag is a reason to open the file, never a verdict:
- single_bid — one valid bid: no competing offer.
- low_discount — the contract landed at or above the public estimate (negative discounts included): no downward price pressure.
- no_estimate — no estimate was published, so the award can't be audited.
- high_dropout — many firms took the documents, almost none submitted a valid bid.
An award can raise several at once; the ones raising the most flags — and the most money — sort to the top, and the coverage travels with the counts. On the bundled example it surfaces a real award that closed 2.96% above its estimate.
Available three ways: the CLI command, a flags MCP tool, and ihalent.analytics.risk_flags.
Full changelog: https://github.com/gulmezeren2-byte/ihalent/blob/main/CHANGELOG.md
v0.2.0 — winner concentration (HHI)
Winner concentration (HHI). ihalent single-bid flags a lack of competition within a tender; this new command flags it across tenders — whether the same few firms win everything a buyer puts out.
ihalent concentration awards.jsonl
ihalent concentration awards.jsonl --authority "İl Özel İdaresi" # within one buyer
ihalent concentration awards.jsonl --json --top 10
It reports the Herfindahl-Hirschman Index (0..1 over win counts) plus the leading firms and their win shares:
- Spelling variants fold together, and each award is attributed to its lead winner, so shares sum to 1 and the HHI is meaningful.
- The coverage travels with the number — high concentration in a thin slice (a small authority with few tenders) is arithmetic, not evidence. It is a place to look, not a conclusion.
- As a rough guide (US DOJ/FTC thresholds rescaled to 0-1): below 0.15 unconcentrated, 0.15-0.25 moderate, above 0.25 highly concentrated.
Available three ways: the CLI command, a concentration MCP tool (with --authority/--province slicing), and ihalent.analytics.concentration.
Full changelog: https://github.com/gulmezeren2-byte/ihalent/blob/main/CHANGELOG.md