0.2.31 - Bill core consistency and download hash
ASCII lowercase currency labels now normalize inside BillCheck.check, including programmatic callers. UI relies on the core and displays its normalized label. Invalid/non-ASCII labels still rejected.
Restores the 0.2.29 rule lost in 0.2.30: duplicate_label is true only when a repeated case/NFC-normalized label has a different unit price from its first occurrence. Same-price repeats not flagged. UI/JSON scope explain this is a review cue, not duplicate-billing proof or arithmetic failure. Clear decimal-format examples restored.
Hosted download page publishes the ZIP SHA256 outside the archive. verify.py remains a workspace utility, not shipped.
Brian KEEP retest was synthetic core tests/code reading, not guided-form clicks. Build-lane Chrome checks covered add/remove/use-lines validation and Clear at 320/390/1280; not independent Brian reproduction. Windows, Safari, Firefox and screen readers remain untested.

0.2.30 - guided Bill Check form
- Type an item name, whole-number quantity, unit price and printed line total.
- Click 'Use these lines' to copy form entries into CSV. Review the CSV, then click 'Check bill'.
- Remove lines and clear all inputs. Incomplete or invalid entries show an error.
- Lowercase ASCII currency labels become uppercase; other characters are rejected.
- Bill form/core matches reviewed standalone release; other product implementations unchanged.
- No photo/PDF import, model calls or real payments. Windows remains untested.

0.2 - October 3, 2026
Doug QA feedback: KEEP all four (helper verdict, not independent product adoption).
Bill Check: normalized headers, column/value errors, properly grouped thousands in quoted CSV, dead OCR remnants removed.
Reply Compare: top-level action/decision risky-verb notices and accurate limits.
Decision Audit: unexpected actions, mistyped gates and action-completion prose flagged; plain JSON/JSONL errors.
Assistant Audit: Luhn card check with dotted separators, curly apostrophes, did-send/pay/book assertions, more secret formats, stronger evidence references, no-flags wording. Dashed SSN detection only; other SSN forms and bank account numbers out of scope.
One shared Decision Audit core (v3-alpha) used by Decision Audit and Reply Compare.
33 targeted synthetic regression checks plus browser samples/downloads. Not execution proof, safety certification or real-world validation.
Max earlier Reply Compare and Decision Audit fixes retained.
Visual QA follow-up: Assistant Audit main landmark, padded Toolkit home touch targets, hidden unlabeled OCR textarea removed. 320/390 Chrome checked; iPhone Safari, file picker and keyboard-only not independently verified.

0.2.1: landing download and tool home links minimum 44px height; visible keyboard focus. Added 1280px and keyboard interaction checks. No audit logic change.

0.2.2: yellow focus ring for summary toggles; buttons, inputs, selects and summaries have a minimum 44px target; release-note spacing corrected. No audit logic change.

Reviewer follow-up, 3 October 2026: Doug reports the 0.2.2 summary focus, 44px control targets and release-note spacing fixes hold in headless Chrome at 320, 390 and 1280. His email says "nothing left from my side." This is Doug's review claim, separate from build checks. iPhone Safari, Firefox and screen readers remain unchecked. Max and Brian verdicts pending.

0.2.3 - October 4, 2026
Bill Check: live standalone page updated to the release core, matching the offline ZIP. Corrected grouped-comma guidance and added parsed values/quoting guidance to column errors. Negative item amount errors identify row, field and value. Currency label must be three uppercase letters; this validates format only, not a registered currency code or exchange conversion. Existing exact-cent arithmetic unchanged.
0.2.2 publication clarification: code ZIP SHA256 9674e33fcba949f2bde8a9808e3cce486d07dbd0916553699e342d7c7f4942ec was reviewed by Doug. A later reviewer-status-only RELEASE-NOTES append changed the ZIP hash to 2abd134c0dec1e226aade137a1b11814bdfd9fae22a7386984e68390b83ff2c0; no executable code changed in that append.
0.2.3 independent recheck pending. Safari, Firefox and screen-reader checks remain incomplete.

0.2.4 - October 4, 2026
Negative tax, fees, discount and total errors now name the field and entered value. Currency entry change since 0.2.2: an empty label errors instead of defaulting to USD; lowercase usd errors. Enter exactly three uppercase letters such as USD. Missing currency in programmatic calls still defaults to USD. Format only, not registered currency-code validation or conversion.
Doug reports all five 0.2.3 fixes held, the published ZIP hash and live core matched, and he ran 57 synthetic cases. This is his review claim relayed by main, not independently retrieved by this build lane. 0.2.4 follow-up not independently checked.

0.2.5 - October 4, 2026
Expanded selected action/execution-like values: paid, processed, booked, refunded, charged, submitted, scheduled, pay_now and transfer_funds. A processed/status assertion may be benign; flags are review cues, not proof of execution. Nested assertions no longer duplicate parent-container and child findings.
Assistant Audit: sk-proj-/sk-ant-api03- key-like values and line-start PEM private-key headers; selected we-will/I-can refund language, sign-in numeric codes and short passcode/PIN values. Script flag threshold lowered to five Latin letters; not language detection. Reworded model-origin claim to match the actual approved-provider-without-evidence check. Model-authorship or identity-versus-label verification is not performed. Pattern checks are not exhaustive.
Build regression and Chrome checks only. Independent 0.2.5 review pending; Safari, Firefox and screen readers unchecked.

0.2.6 - October 4, 2026
PEM private-key headers matched anywhere in a message, including JSON values, assignment and parentheses. Broad refund/reimbursement/credit/waiver wording without selected beneficiary or amount forms is now medium-severity review, since it can be policy discussion. Selected beneficiary/amount forms remain high. Pattern checks still cannot determine permission or whether a promise was made.
Build checks only; independent 0.2.6 review pending.

0.2.7 - October 4, 2026
Promise severity is scored per matched phrase, so one policy-like refund phrase cannot downgrade a separate guarantee/refund promise. Only selected request/policy-discussion forms get medium review; other matched promises, including it/the purchase price/named beneficiaries, remain high. PGP private-key block headers now flagged. These are text heuristics, not permission judgments. This is the final planned audit-rule QA round unless Max/Brian request more.

0.2.8 - October 4, 2026
Reply Compare file workflow: shows loaded filename/byte count; validates one-object files before loading; rejects JSONL batches instead of comparing only the first object. Clear, sample, manual edit or a newer selection cancels an in-flight read; compare is disabled while reading. Invalid files clear the affected reply and stale downloadable report. Text paste behavior unchanged. Existing file pickers are not a new feature. No audit rule/core changes.
Chrome build checks: local file input, downloaded report, empty/oversized/scalar/duplicate/fenced files, and delayed-read races at 320/390/1280. Source labels and layouts visually inspected. Safari/Firefox/screen readers and native OS picker dialogs not independently verified. Max/Brian product verdicts still pending.

0.2.9 - October 4, 2026
Reply Compare file errors name the affected side once and separate sentences correctly. Invalid-JSON guidance now explicitly includes NaN/Infinity alongside JSONL/prose, without claiming to diagnose which syntax is present. No core changes.
Doug reports 0.2.8 file workflow passed Chrome; this is his claim relayed by main, separate from build testing. 0.2.9 independent review pending.

0.2.10 - October 4, 2026
Assistant Audit has a concise polite/atomic result status for success, errors and edited input. It does not move focus on sample selection or announce the entire findings list. Reply Compare file inputs now have distinct Before file / After file labels. No audit core changes.
Doug reports a keyboard-only Chrome/ZIP pass on 0.2.9; his claim was relayed by main. Build checks verify live-region attributes/content, distinct accessible names and layout. Actual screen-reader speech, Safari/Firefox and native OS picker dialogs remain unverified.

0.2.11 - October 4, 2026
Reply Compare saved-comparison workspace: reopen local downloaded v2 report (up to 5 MB), restore both JSON objects and recalculate differences. Saved changes/notices/verdict and extra fields are ignored. Original prose/wrapper notices are not restored. No persistent storage or uploads. Clear/sample/edit/input selection cancels stale report reads; failed import clears both replies and stale results. Reports include both supplied objects, so inspect before sharing.
Assistant Audit result text singularizes one message and resets its concise live status before a delayed update to permit repeated announcements. Actual screen-reader speech remains unverified.
Doug reports 0.2.10 ZIP/live byte matching and fixes hold in Chrome; parent-relayed claim, not build-lane independent evidence. Workspace is a repeat-use product hypothesis; Max/Brian demand verdicts still absent. Chrome build checks only; Safari/Firefox/native OS dialogs and screen readers unverified.

0.2.12 - October 4, 2026
Saved report imports name oversized embedded replies as Saved before/after reply exceeds 2 MB. A saved same/changes field that disagrees with recalculation gets a mismatch notice; saved values are not authenticated. Failed imports still clear both replies. No audit rule changes.
Doug tested 0.2.11 in Chrome, reported no blocking bugs and supplied the wording/mismatch notes applied here; parent-relayed claim. He did not retest 0.2.12. Release 0.2.12 was build-checked only; Safari/Firefox/screen-reader speech unverified.

0.2.13 - October 4, 2026
New paired-run review page: imports 1-100 cases, supplied expected fields and before/after replies; runs existing Decision Audit and Reply Compare cores, optional conversation/bill cores; exports one JSON review bundle. Duplicate IDs/keys, empty expectations, missing replies and oversized input rejected. Invalid/unparseable replies remain explicit, never silently counted as passes. Comparison errors and optional invalid inputs are preserved. No new model call, scoring rule, statistics, connector, authenticity or improvement claim. Metadata, restrictions and expectations are supplied only. Default optional conversation policy labels match existing Audit UI. No storage/uploads; inspect complete input-bearing bundle before sharing.
Chrome build checks at 320/390/1280. Safari/Firefox/screen-reader speech/native file dialogs unverified. Max/Brian repeat-use demand verdicts absent.

0.2.14 - October 4, 2026
Paired-review headline includes fail/unparseable/invalid/risk counts and separates pass from risk. Specific schema/empty/overlimit errors; duplicate IDs named; IDs trimmed, case-sensitive. Null/empty-string expected values rejected recursively. Supplied gates require booleans. Bill object/CSV/options validation avoids raw JS errors. Removed duplicated full payloads in audit/comparison results; differences/findings can still repeat values. Two-case sample and plainer input guidance. 0.2.12 reviewer wording corrected: Doug tested 0.2.11, not 0.2.12.
Build checks only. Reviewer claims are separate, no model use or improvement proof. Browser/screen-reader limits unchanged.

0.2.15 - October 4, 2026
Paired-review root array/prose guidance clearer; sample reordered synthetic-1 then synthetic-2; risk-row label singularized. No audit-rule changes. Doug reports 0.2.14 seven fixes held and one partial, with these minor notes; parent-relayed claim. Build checks distinct.

0.2.16 - October 4, 2026
Optional-only bill/conversation cases no longer require placeholder replies/expectations. They receive no paired score and are excluded from pass/fail denominators. Partial paired fields still rejected. Bundle states paired and optional-only case counts. No model calls, measurement claim or audit-rule change.

0.2.17 - October 4, 2026
Paired review headline now counts optional checks separately: complete, invalid input, and checks with findings. Bill total/line mismatches and warnings, conversation verdict/findings and invalid-input errors appear in collapsed row summaries. Optional-only rows still have no paired score, and remain excluded from pass/fail counts. Singular optional-only case wording corrected. No audit-rule changes. Build tests are synthetic; independent review pending.
API engine patch notes are in API-PATCH-SAMPLES.txt. These are separate hosted API patches, not offline-toolkit core changes. Historical signed certificates are preserved, not rescored; lexical grading remains heuristic.

0.2.18 - October 4, 2026
Optional conversation rows name missing model/provider label findings, not just an action-needed verdict. API follow-up: scenario-specific trust responses and null walked trust final_offer; contraction/negation clause fixes; strategy guesses require 3 observed rounds, valid vocabulary and compatible/read-eligible metrics. Heuristic limits remain. Old certificates unchanged. Independent reviewer retest pending.

0.2.19 - October 4, 2026
API follow-up only, offline rules unchanged. Scenario trust replies alternate; empty guesses reject. Desk-side integrity detector, lawful dollar-goodwill offer counting, policy brief instead of undefined percent. Per-turn requested/used engine and fallback reason in transcript/certificate; stable name and single engine-turn event; invalid engine rejects. Verify notes deleted server receipt separately from kept signature validity. Export now binds transcript hash and chain root to certificate and rejects non-active certificates. Broader synthetic API checks passed for progress/profile/teach/export; revoked status checked in isolated process, not public production-list mutation. Actual paid model responses and all language variants not verified.

0.2.20 - October 4, 2026
Manifest now distinguishes API version0.8.0 from build_id20261004-toolkit-0.2.20 and documents ChatML versus DPO input shapes. DPO requires chosen and rejected run artifacts; no export conversion logic changed. Two fresh scripted runs exported as one DPO pair; missing rejected and tampered rejected artifacts rejected401. Toolkit UI and rules unchanged. Doug confirmed listed0.2.19 fixes; his remaining DPO/build-id comments are addressed here, pending independent recheck. Doug did not test paired-review in a browser or llm fallback. Safari/Firefox paired-review remains untested; actual paid model responses remain untested.

0.2.21 - October 4, 2026
DPO rejects identical run IDs or transcript hashes400. min_score filters chosen score, returning200/count0 when below or missing; rejected score is not filtered. Caller preference labels are not inferred rankings. Fresh live synthetic tests: distinct pair count1; identical400; min_score99 count0; min_score0 count1; tampered/missing rejected401. Manifest build_id updated. Paired-review file label on its own line,8px gap. Doug confirmed0.2.20 DPO/tamper and Chrome UI tests; his Safari/Firefox/native picker/screen reader/real-file upload/ZIP contents remained untested. No paid calls.

0.2.23 - October 4, 2026
Landing/START-HERE paired-review link has padded44px minimum target. Bill Check error explicitly asks0.50 instead of.5 and5.00 instead of5.; parsing unchanged. Reply Compare explicitly names uninspected nested actions/result.status beside usage. Decision Audit explicitly names checked keys and unscanned free note/message prose for object-valued outputs; heuristics unchanged. min_score null remains invalid: remove key for no filter. This preserves0.2.22 strict number0-100 contract. Doug confirmed0.2.21 offline paired-review and four other tool pages/landing in Chrome; no nonlocal network requests. Safari/Firefox/native picker/speech remain untested.

0.2.26 - October 4, 2026 (historical)
Added selected refund-sent and refund-issued phrases and sentence exclusions. This entry describes that older build, not the current detection limits.

0.2.27 - October 4, 2026
Completion checks split selected clauses at semicolons, the word "but", or "and" followed by "I". A clause containing "cannot", "can't" or "you said" is skipped by the completion check. The selected "processed" pattern can match "refund" up to 60 characters later. Evidence references are not opened or verified. Doug's targeted QA passed; general condition and quotation handling remains incomplete.

Known limits: Toolkit 0.2.27 and 0.2.30 (same cores), MCP 0.1.4
"Refund issued only after review" does not flag. "I have processed your order and refund" does flag. A comma-joined clause containing "cannot", "can't" or "you said" can suppress a later true completion claim; tested versions joined with "and I" or a period flag. "Refund issued after approval", "Refund sent only if you confirm", "Refund sent after approval", "Refund sent only after review", and "Refund issued after you confirm" all flag. These conditional forms can be false positives. These are verified variants, not complete condition or quotation handling. Flags are review cues, not proof of action or permission. No evidence reference is opened or verified.


0.2.30 - October 4, 2026
Paired-review exports now label toolkit_version 0.2.30, the package version. Review rules are unchanged. Windows and a real desktop MCP host remain untested. The hosted API remains a separate build; its manifest explains the older build label.

The hosted API build_id stays 20261004-toolkit-0.2.24 and is separate from offline Toolkit 0.2.30 and MCP 0.1.4.
