When someone keeps saying “tomorrow”

A promise with a date on it is the one part you can check.

Last updated


Not romance

“Tomorrow” is a dated promise, which makes it the only part of a stalled job, repair, refund or delivery that you can actually test — the date either arrived with work attached or it did not, and your message thread already recorded which. Not a lie detector. Inconsistency is not proof of deception. Trades run late for real reasons, landlords wait on contractors who wait on parts, freelancers lose a week to illness they would rather not describe, and a person can miss three dates in a row while fully intending to turn up on the fourth. What this page checks is narrower and more useful than intent: whether the promises in your thread behave like a schedule or like a way of ending each conversation.

This is the method page for the disputes cluster — the contractor, the landlord, the seller, the manager, the freelancer. It runs on the thread you already have, in the app you already use, and it produces one thing: a dated record of what was asked, what was promised, and what happened. That record is the asset. Everything a licensing board, a small-claims filing, a platform dispute or a housing inspector can do for you starts with it, and none of them can do anything with a recollection.

What does “tomorrow” actually promise, and how do you check it?

“Tomorrow” promises one specific thing — an action on a named day — and it is checkable because your thread records both the promise and what followed it, without either party having to remember anything.

Write the promise down as three fields: the date it was given, the date it named, and what arrived on that named date. The third field has only three possible values, and they are not equally informative. Either the work happened, or a message arrived on or before the named date explaining why not, or nothing arrived and the next contact was yours. That third value is the one worth counting, because it is the only one that cannot be explained by the difficulty of the job. Supply problems, weather, a subcontractor pulling out and a broken van all explain why the work did not happen. None of them explains why nobody mentioned it.

The check is cheap because you are not evaluating a reason, which is unfalsifiable from where you sit. You have no way to verify that the supplier really did send the wrong size, and trying to verify it is how these disputes turn into arguments about plumbing. You do have a complete record of who spoke next, and that record is entirely within your reach. A person managing a genuinely delayed job produces messages you did not ask for, because a delay creates news and news gets passed on. A person managing you produces messages only in reply.

Why the reason is not the evidence

The reason attached to a missed date carries almost no information on its own, and spending your attention on it is the most common way people waste weeks here. Every reason in this category is individually plausible: vans do break down, suppliers do send the wrong part, subcontractors do vanish mid-week, and a landlord really can be waiting on a roofer who is not returning calls either. You cannot rank these by credibility from a text thread, and any page that offers you a list of suspicious excuses is selling you a coin-flip dressed as a method. What you can rank is behaviour around the reason — when it was offered, whether you had to ask, and whether the next reason builds on it or replaces it.

Is one missed date a problem, or do you need a pattern?

One missed date is not a problem and carries no useful information; the unit of evidence in this category is the third or fourth missed date, because that is the first point at which the reasons can be compared against each other.

A single slip is the base rate of the trades, of property management, and of freelance work, and treating it as a signal will make you unbearable to work with and will not make your job happen sooner. Two slips with one continuous reason is still a delayed job: the part is late, and it is still late, and that is one fact reported twice. The shape only becomes readable at the point where you have several reasons to lay side by side, because it is the relationship between reasons — not their individual quality — that distinguishes an overrunning schedule from an absent one.

Two patterns diverge sharply once you have four data points. In the first, the reasons develop: the part was ordered, then held at the depot, then arrived damaged, then reordered — a single narrative that moves forward, contains bad news the other person volunteered, and is broadly consistent with a job someone still intends to do. In the second, the reasons reset: a family emergency, then a different job that overran, then a van, then a supplier, each unrelated to the last, each introduced only after you chased, and each moving the finish line back to roughly the same distance it was at before. The second pattern does not tell you why it is happening — cash-flow trouble, a job taken on that was never going to fit, a person who cannot say no and cannot say sorry — but it does tell you that waiting for the next date is unlikely to be productive.

How do you build a promise ledger from a text thread?

You build a promise ledger by scrolling your thread from the first contact and writing one line for every message that contains a date, a duration, or a next step — the timestamp of the message, who sent it, and the exact words of the commitment.

Take the exact wording rather than your summary of it, because the wording is where the case is won or lost and because your summary will drift toward what you expected to hear. “Should be able to get to you Thursday” and “I’ll be there Thursday morning” are different commitments, and the difference matters both to a dispute process and to a fair reading of what the other person actually said. Copy the phrase. Where a promise was made on a phone call, log it as a call and mark it unconfirmed unless you texted afterwards to confirm it, which is the habit that separates a usable record from a frustrating one.

Then add two columns that most people skip and that do most of the work. Column one: who sent the message immediately before this promise — you or them. Column two: what arrived on the promised date. Fill those in for every row and the ledger stops being a list of grievances and becomes a shape. Five promises where the preceding message was always yours, and five promised dates where the following message was also always yours, is a specific, quotable, checkable finding: across ten opportunities, the other party initiated contact zero times. That sentence is worth more in a complaint than three paragraphs about how the experience made you feel, and it came out of your phone.

Dates you agreed to and dates you were given

Mark each row for who supplied the date, because a date you proposed and they accepted is weaker evidence than a date they proposed unprompted. “Can you do the 12th?” answered with “yeah should be fine” is an agreement obtained under social pressure to agree, and people say yes to those without having checked a calendar. A date the other person volunteered — “I can start you on the 12th” — is a claim they constructed themselves, and a pattern of volunteered dates that pass is much harder to explain as politeness. If your ledger turns out to be mostly dates you supplied, that is worth knowing before you escalate, and the fix is in the section on getting a real date below.

Who restarts the conversation — and why does that matter more than the excuses?

Whoever restarts the conversation after each silence is the most reliable signal in a stalled-job thread, because initiating contact requires no skill, costs nothing, and cannot be explained away by any of the reasons that explain the delay itself.

Every reason for missing a date is a reason for sending a message. The van broke down — that is a fifteen-second text. The supplier let them down — a text. Another job overran — a text, and one most customers accept without complaint if it arrives before the date rather than after it. There is no version of a genuine scheduling problem that also prevents a person from telling you about it, which is why the absence of unprompted messages is a fact about priority rather than a fact about circumstances. It is also, usefully, the fact least sensitive to your interpretation: you do not have to judge whether an excuse is plausible to count who spoke first.

Read it fairly, though, because there is a common and entirely ordinary version. Some people work reactively and always have — they deal with whoever contacted them most recently, they find proactive updates genuinely difficult, and they nonetheless finish the work. If your thread shows reactive replying combined with real progress on site, you have a communication mismatch and the answer is a scheduled check-in you both agree to, not an escalation. The combination that matters is reactive replying plus a moving date plus no visible progress. Any one of those alone is noise. All three together is the pattern this cluster exists to name.

Does the wording of a promise tell you anything?

The wording of a promise tells you how much of it is checkable, and that is the only property of it worth reading: a commitment that names a day, a time and a next communication can be tested tomorrow, while one that names a rough period cannot be tested at all.

Sort the promises in your ledger onto a gradient. At the vague end sit phrases with no testable content whatsoever — “soon”, “next week hopefully”, “as soon as I’m free”, “I’ll try to fit you in”. These are not lies and are frequently sincere; they are simply statements that cannot fail, which is what makes them comfortable to give. In the middle sit named days without times: “Thursday”. At the specific end sit commitments that carry their own verification: “Thursday, I’ll message when I set off, should be with you by ten”. That last form contains a second, earlier checkpoint — the setting-off message — which is why it is the form worth asking for.

The direction of travel across your thread is more informative than any single position on it. A person whose promises start specific and get vaguer over the weeks is withdrawing from commitment in a way that is visible in the text itself, and it usually precedes the silence rather than following it. A person whose promises are vague throughout may simply talk that way, and pinning them down is a conversation to have rather than a conclusion to draw. Track the trend, note where it turned, and note what was happening at the point it turned — very often it is immediately after a payment cleared, which is a fact about incentives worth having in the record.

What if the reason is different every time?

A reason that changes every time is not evidence of dishonesty, but it does defeat the usual defence of a delayed job — that one specific obstacle is holding everything up — because four unrelated obstacles in four weeks describe a person with no capacity for your work rather than a job with a problem.

Group the reasons in your ledger by type. Supply reasons, staffing reasons, health reasons, other-customer reasons, payment reasons, weather. A cluster within one type across several weeks is coherent, and coherent is credible: a run of supply problems is exactly what a supply problem looks like from the outside. One reason from each category in sequence is the pattern that has no innocent structural explanation, though it does have innocent human ones. The most common by far is overcommitment — a person who has taken on more work than exists time for, who is being chased by four other customers in exactly the same way, and who is telling each of you a true story about why you specifically got moved this week. Nothing in that requires malice, and none of it makes waiting a better plan.

There is a second thing to look for, which is the reason that arrives pre-defended. Genuine bad news is usually delivered plainly and briefly, because the person delivering it wants the conversation over. A reason that comes with an unprompted rebuttal of a complaint you did not make — a paragraph about how hard they have been working, how unreasonable other customers are, how nobody understands the trade — is doing work beyond explaining the delay. Treat it as a signal about the conversation you are about to have, not as proof about the delay. It usually means the next chase will be met with grievance rather than a date, and that is worth knowing before you send it.

What does a genuine delay look like from the outside?

A genuine delay looks like bad news arriving early, in detail you did not request, with a revised date that is further away than you hoped and a specific reason attached to a specific thing.

The counter-intuitive marker is the direction the revised date moves. People stalling give short extensions, because a short extension ends the current conversation and a long one invites you to make other arrangements; that is why the date so often lands three or four days out no matter how many times it slips. People with a real problem frequently give longer, worse-sounding dates, because they are describing an actual constraint — the part has a fourteen-day lead time, the scaffolding is booked until the eighth — and a real constraint has a real size. A revised date that is worse than you expected and does not move again is one of the better signs available in this category.

The other marker is proportional detail. A person explaining an actual obstacle tends to give more information than is strictly needed, including parts of it that reflect badly on them, because they are recounting events rather than constructing a rationale. Detail is not proof — a fluent story is easy to produce and some honest people are terse by nature — so read it as mild support rather than confirmation. Where it becomes checkable is over time: a detailed account creates commitments you can look back at. If the fourteen-day part arrives on day fourteen and gets mentioned, the account held. If day fourteen passes with no reference to the part that dominated three messages, that is a specific and legitimate thing to ask about, quoting their own words back with the date attached.

How do you get a date that is actually a date?

You get a real date by removing the incentive to give you an early one: state that you would rather have a date they are confident about than a soon one, name the dates already promised, and ask for a single date in writing.

Most of the useless dates in your thread were produced by pressure to say something reassuring. A person asked “can you come Thursday?” is being invited to agree, and agreeing is the cheapest way to end an uncomfortable exchange; that is how you end up with a ledger full of dates you supplied yourself. Inverting it costs one sentence and changes what the answer means. “I am not chasing you for this week — I would rather have a date you are sure of. What does the week of the 24th look like?” gives a cooperative person permission to be honest about their backlog, which frequently produces a later date that actually holds, and gives an evasive person no comfortable answer, because the usual reassurance has been declined in advance.

Then close it as a written commitment, in one message, with the record attached and the consequence named plainly rather than threatened. Something with this shape: the dates agreed so far, the amount paid so far, what remains outstanding, the date now proposed, and one sentence saying what you will do if that date passes — arrange another tradesperson, contact the letting agent, open a platform dispute, file with the licensing body. Say it without heat and without adjectives. A message like that does three jobs at once: it is a fair, final chance for someone who intends to perform, it is the document a dispute process will ask you for, and it converts the next silence from an ambiguous non-event into a dated, evidenced failure to meet a stated deadline. If you want the sequence laid out step by step for a repair dispute specifically, building the record for a landlord is the same procedure written out in order.

What to do before you send it

Export the thread first. Phones are lost, accounts get deleted, platforms close chats when a listing ends, and a dispute six weeks from now is far easier if the record was saved while the conversation was still live. Save it as a file rather than as screenshots where the app allows it, because a continuous export carries the timestamps and the ordering that individual screenshots lose, and because a set of screenshots invites an argument about what was cropped out. Do not edit anything, do not delete your own less-patient messages, and keep the parts that make you look impatient — a record that includes them is worth considerably more than one that has been curated, and the other side has the same thread anyway.

When is the record complete enough to escalate?

The record is complete enough to escalate when it can answer three questions on its own, without you narrating it: what was agreed, what was paid, and what happened on each promised date.

Test it by handing it to someone who was not involved. If a friend can read your ledger and tell you the sequence of events without asking clarifying questions, the record is ready, because every body you might take it to — a licensing board, a small-claims court, a housing inspector, a platform’s resolution team, a card issuer processing a chargeback — is exactly that friend with less time and no interest. If they have to ask when you paid, or what precisely was supposed to happen on the 12th, then the gap is in the record rather than in your case, and it is usually fixable with a single confirming message sent now.

Escalation routes differ by relationship and by jurisdiction, and this is the point at which generic advice stops being useful: a licensed trade, a rented home, a marketplace purchase and a workplace promise sit under different rules, different bodies, and different time limits, and those bodies are not the same in one country or state as in the next. What does not differ is the ledger. So the next question is not which body to contact, it is whether the thread on your phone would survive being read by a stranger — and if you want to see the promised dates laid against what actually happened without building the table by hand, you can run the conversation through the analyser or paste it into the timeline tool below, which stays in your browser.

Every dispute in this cluster, checked the same way

  • Is this a romance scam? The patterns that repeatThe sequence that repeats across romance frauds: fast intensity, a video call that is always impossible for a new reason, escalating crises, and a money request whose justification renews. How to check it against your own thread, and the one step that is time-sensitive.
  • Marketplace messages that don’t add upBuyer side and seller side, separately: what the messages that don't add up have in common, why the story always removes the in-person option, the one question only someone holding the item can answer, and terms that stay safe without accusing anyone.
  • Landlord and repair texts: building the recordA procedure for turning a scattered repair thread into a defensible record: one issue per message, the effect rather than the diagnosis, a date rather than a promise, confirming texts after every call, and the two numbers an inspector reaches for.

Free tool · runs in your browser

Not a lie detector. Inconsistency is not proof of deception. This counts what is in your thread — timestamps, gaps, wording. It cannot tell you whether someone is lying.

Nothing you paste leaves this browser. No account, no upload, no model call.

Flag gaps over

This counted the gaps. It cannot read the messages. Run the actual conversation →

Common questions

What does it mean when a contractor keeps saying tomorrow?
A contractor who keeps saying tomorrow is giving you a promise that has stopped functioning as a date and started functioning as a way to end the conversation. The distinction is testable from your own message thread: a real date is followed by either the work or an unprompted message explaining why not, while a placeholder date is followed by silence until you chase again. Count how many of the promised dates were followed by a message you did not have to ask for. If that number is zero across four or five promises, the pattern is about the promises, not about any single day’s weather, van, or supplier.
How many missed deadlines is too many before you escalate?
There is no universal number, because a single missed date means almost nothing and a moving date means a great deal. Escalate when the shape changes rather than when a counter hits a threshold: when the reason changes every time instead of developing, when you are the only person restarting the conversation, and when the new date is always given in response to being chased rather than offered in advance. Two missed dates with one consistent, developing reason and unprompted updates is a delayed job. Four missed dates with four unrelated reasons and no unprompted contact is a different problem, and the fourth date is not worth waiting for.
Do text messages count as proof that someone promised a date?
Text messages are contemporaneous written evidence of what was said and when, and in most disputes that is the most useful record either side has. What they are not is proof of intention or proof that the promise was ever capable of being kept — this is not a lie detector, and inconsistency is not proof of deception. A thread showing five promised dates and five silences establishes a pattern of non-performance without establishing that anyone set out to deceive you, and that is usually the right claim to make anyway, because non-performance is what a licensing board, a small-claims court, or a platform dispute process is actually equipped to assess.
What is the difference between a delay and being strung along?
A delay has a reason that develops and a person who volunteers information; being strung along has a reason that resets and a person who only responds. In a genuine delay the story moves forward between updates — the part was ordered, then it was delayed at the depot, then it arrived damaged — and you learn things without asking. When you are being strung along, each new reason is unrelated to the last, arrives only after you chase, and returns the timeline to roughly the same distance away it was before. The second pattern is visible in a text thread without knowing anything about the person.
How do you ask for a firm date without sounding aggressive?
You ask for a firm date by supplying the record rather than the accusation: name the dates already promised, state what you need, and ask for one date the other person is confident about, in writing. A message like “we agreed the 3rd, then the 10th, then last Tuesday — I would rather have a date you are sure of than an early one, so what does the week of the 24th look like?” gives a cooperative person an easy answer and gives an evasive person nowhere obvious to go. It also produces a written promise with a date attached, which is the thing your record was missing.
Is it a red flag when someone only replies after you chase them?
Replying only when chased is one of the more informative patterns in a dispute thread, but it is not by itself evidence of bad faith. Some tradespeople, landlords and freelancers genuinely operate reactively, dealing with whoever contacted them most recently, and they perform the work eventually. What makes the pattern matter is its combination with a moving date: if every promise arrives only in response to a chase and every promised date passes without a message, then the promises exist to end conversations rather than to describe plans, and the person is managing you rather than scheduling you.
What should you do when someone stops replying entirely?
When the replies stop, switch from chasing to closing the record: send one dated message stating what was agreed, what has been paid, what remains outstanding, and a specific deadline, then send the same thing through a second channel such as email or post. Silence after a clear, dated, single-channel-independent message is a much stronger fact than silence after fifteen texts, because it removes the one honest explanation that undermines everything else — that the messages were never seen. Do not delete the thread, do not edit screenshots, and export the conversation before anything happens to the phone it lives on.

A suspicion score, not a lie detector. It measures what does not line up — nothing more. Everything else is your call, which is the only place it can honestly sit.

Run your conversation through it · See pricing