See what a rewrite changed about what was promised
Paste a text on the left and the version it was rewritten into on the right. The page lists the obligation words, conditions, dates and amounts that moved — and nothing else. It is not a line diff, and it does not judge whether the rewrite reads better.
What this does not do
- It is not a general diff. Spelling, punctuation, grammar, order and phrasing are outside the four lists, so a heavily reworded paragraph can come back as no changes matched.
- It does not understand meaning. It matches closed word lists, so a gentler wording that shifts the promise without using a listed word produces no row at all.
- It does not open, read, upload, sync or store your text. You paste it; the page sends it nowhere.
- It does not decide which version is right, who is owed what, or whether a date is real. It reports candidates and you mark each one.
- It does not score, grade, rank or recommend either version.
Two texts, four lists
The left box holds the text as it stands, the right box holds the rewrite. Press Compare to list what moved between them.
The version you are comparing against.
The version you are checking.
Nothing compared yet.
Paste both texts and press Compare. The list of changes appears here.
Fictional example loaded. The client message and the rewrite are invented for this walkthrough, and every row below comes from comparing those two invented texts. Nothing here is a real message, a real client or a real price.
What moved between the two texts
Counts only: no score, no percentage and no verdict on the rewrite.
No comparison yet.
The six fields travel with the CSV and the Markdown: Position, Original snippet, Revised snippet, Change type, Status and Notes. Each row waits at Not checked, because finding a change is not the same as agreeing to it. Unassigned marks a row nobody has taken on yet: it records who owns the row, not whether the change is acceptable. Set Pass when the change was intended and the text can go out as written, and Fail when it was not intended or the earlier promise has to be put back. Add a row when you spot a change the lists cannot name, and write it in your own words.
Take the list with you
The CSV uses the same six column names in the same order as the row fields above.
Nothing exported yet.
How to read a change row
Each row names the sentence on the left, the sentence on the right, the value that moved, one of six change types, and a state you set. The six types are the only six.
- Obligation strengthened — the rewrite promises more: a word moved up the ladder ("may" to "will"), or a condition such as "if the pilot is approved" was dropped. Losing a condition turns a conditional plan into a flat promise, which is why a delete counts as a strengthening even though the sentence got shorter.
- Obligation weakened — the rewrite promises less: a word moved down the ladder ("will" to "may"), or a condition was added.
- Date or deadline changed — both values are shown. A deadline and the date inside it are separate tokens, so one moved deadline can produce two rows; the weekday and the date are read separately.
- Amount, currency or unit changed — "$1,500" against "$2,500", or "5 seats" against "12 seats".
- Responsibility sentence added — a sentence carrying an obligation word, a condition, a date or an amount appears in the rewrite with no sentence like it in the original.
- Responsibility sentence removed — the same the other way round.
Why "review" becoming "deliver" is not a row here
A rewrite that turns "we will review the deck" into "we will deliver the deck" changes what the reader is entitled to expect, and neither "review" nor "deliver" is in any of the four lists. The ladder does not move and no date or amount changed, so this page reports nothing for that sentence. The gap is printed here rather than hidden: catch that kind of swap by hand and add a row for it, or use a line-by-line diff when the wording itself is what you need to see.
Why "may" becoming "will" changes what the reader does
Someone reading "we may extend to 12 seats" plans around an extension that might never come; the same person reading "we will extend to 12 seats" starts booking the work. The two sentences share almost every word and the consequence is not the same, because the second one is something a reader can hold the writer to. A condition disappearing does the same work in reverse: "if the budget allows" was the way out of the sentence, and removing it removes the way out.
Press Compare again and the list is rebuilt from the two texts, so export what you have marked before you re-compare. Nothing is stored between visits.
The lists this page runs on
Four closed lists are the whole rule set. A change that is not in one of them is not reported, which is why the lists are printed in full here instead of being described.
Obligation levels
Each sentence is reduced to the strongest obligation word it contains, and that word decides its level. Moving up the ladder is reported as strengthened; moving down is reported as weakened.
- 1 · Speculative — may, might, could, possibly, perhaps, maybe, potentially
- 2 · Intended — can, should, aim to, aims to, plan to, plans to, intend to, intends to, hope to, hopes to, expect to, expects to, target, targets, try to, tries to, looking to
- 3 · Committed — will, shall, going to, agree to, agrees to, agreed to, committed to, commits to, commit to, guarantee, guarantees
- 4 · Obligated — must, required to, requires, mandatory, obliged to, contractually
Conditions
A condition that disappears strengthens what is left; a condition that appears weakens it.
if approved · if the pilot is approved · if it is approved · if this is approved · subject to approval · subject to sign-off · pending approval · pending sign-off · if the budget allows · assuming · provided that · if the client agrees · if all goes well · contingent on · on condition that · if we can
Dates, deadlines and periods
The wording "by", "before" or "no later than" followed by a date is read as a deadline, and a dated deadline reads as a commitment even when the sentence carries no obligation word: "send it by Friday" is not a suggestion.
ISO date (2026-09-14) · Slash date (14/09 or 14/09/2026) · Day then month (3 June or 3 June 2026) · Month then day (June 3 or June 3, 2026) · Weekday (Friday or Fri) · Counted period (within 5 working days) · Relative period (next week) · End or start of a period (end of quarter) · Quarter (Q3) · Short deadline (EOD, EOW, COB)
Amounts, currencies and units
Symbol currency (£4,200 or $1,500) · Currency code first (GBP 4,200) · Currency code last (4,200 GBP) · Percentage (12% or 12 percent) · Number with a unit (3 revisions, 5 seats) · Hedged quantity (up to 3, approximately 10) · File size (12 GB)
A bare number with no currency and no unit — "phase 2", "the second draft" — is deliberately out of scope, so it is never reported as an amount change. Letter case is ignored when the lists are matched, so "Friday" and "friday" are one token, while the row always shows the text the way you pasted it.
Where it stops
- Soft wording. "We will do our best to look at it" against "we will look at it" can pass without a row: "do our best" is in no list, and the two sentences share enough words to be paired without a ladder move. Nothing on this page reads intent, so an indirect change of promise can be missed.
- Pairing. Sentences are paired by shared words — a pair needs an overlap above about a third of the two word sets. A rewrite that splits, merges or reorders sentences can therefore be paired differently, and a change can appear as a sentence added or removed instead of changed. Read the Position field as a hint, not as proof.
- Words, not facts. The page has no access to your contract, price list, calendar or mailbox. It cannot tell you whether a new date is achievable or whether the rewrite is allowed to promise it.
- Unassigned records ownership, not a verdict. Use it for a change row nobody has taken on yet; it says nothing about whether the change is acceptable.
- Not checked is not a pass. Every row starts at Not checked because the page only found a candidate. Deciding whether the rewrite may go out stays with you.
- Only what you paste. A promise made elsewhere in the thread, or shown in an attachment, is invisible here.
Where your text goes
Everything happens in this browser tab. The two texts are read by the script on this page and compared there; they are not uploaded, not sent to a server, not written to a cookie or to browser storage, and not logged. There is no file upload, no account and no form submission on this page.
The CSV and the Markdown are built in the tab as well. The download is created by your own browser, and the Markdown is handed to your clipboard only when you press the copy button. Closing the tab discards the texts and the list; if you want a record, export or print before you leave.
Guides and other tools
- Rewrite an email without changing what you promised — the guide this page was built to sit beside.
- Check an AI summary against its source document — the same habit applied to a summary instead of a rewrite.
- Write meeting action items someone can actually close
Other tools: preflight checks before a file leaves your desk, the action register, the claim ledger, and the tools index for the whole set.
Method & next step
The four lists printed above are the entire method. ToolVerity keeps no private list of extra words, and no part of this page reaches the network: the comparison, the counts and both exports run in your browser. State words are fixed across this site: Pass — checked and it holds; Fail — checked and it does not hold; Not checked — not checked yet; Unassigned — nobody has taken the row on yet. Pass, Fail and Not checked are the three verdicts on a row; Unassigned records who owns it, not whether it holds. On this page a row is one detected change, so "holds" means you read the change and accepted it. No score, percentage, grade or ranking is produced anywhere. Sentences are paired by shared words, and the paired sentences are then compared token by token against the four lists.
How we check pages · Next guide: rewrite an email without changing what you promised
Questions
Is this a text diff?
No. A line diff shows every change including commas and spacing. This page ignores all of that on purpose and reports only what its four lists can name, so a paragraph rewritten in different words can come back as "No changes matched". Use a line diff when the wording itself is what you need to read.
Why does every row start at Not checked?
Because the page can only say that a value moved, not whether the move is acceptable. It found the change; deciding whether the rewrite may go out stays with you. A row marked Fail asks for a note, so the reason is in the export rather than only in your head. Unassigned is the fourth word in the same list: it marks a row nobody has taken on yet, so the count shows work that has not been picked up.
What happens to a change the lists cannot see?
It is not reported, and the page will tell you no changes matched even though the promise moved. That is the same gap as "review" becoming "deliver": add a row yourself and write the change in the Notes field, so the record is complete even where the lists are blind.
Runs entirely in your browser. Nothing you type or paste is sent anywhere.