Write a polite but firm email to a landlord who has not fixed the heating for three weeks. I want the repair, not a fight.
Claude Fable 5.1
Here's a draft you can adapt. I've left placeholders in brackets.
Subject: Heating repair at [address] – request for a firm repair date
Dear [Landlord's name],
I'm writing about the heating at [address], which has not been working since [date], now just over three weeks ago. I first reported it on [date] by [phone/email/text] and followed up on [dates].
I understand repairs can take time to arrange, and I appreciate that you may be waiting on a contractor or parts. However, three weeks without heating is a significant problem, especially at this time of year, and I'd like to get it resolved as soon as possible.
Could you please confirm, by [date – e.g., end of this week]:
What the cause of the fault is, if known;
The name of the contractor or engineer handling the repair; and
A specific date when the repair will be carried out.
If it would help, I'm happy to arrange access at short notice, including evenings or weekends, so that scheduling isn't a barrier.
I'd much prefer to sort this out directly with you rather than take it further. If I don't hear back by [date], though, I'll need to look into the other options available to me, which may include contacting [the local council's housing department / a tenants' advice service / the relevant housing authority]. I'm mentioning this so that you know where things stand, not because I expect it to come to that.
Thank you for your attention to this. I look forward to hearing from you.
Kind regards, [Your name] [Phone number] [Address / flat number]
A few notes on using this:
Keep the paper trail. Send it by email (or whatever leaves a record), and keep copies of your earlier messages. If you've only called so far, this email becomes the written record.
Fill in the dates precisely. Specific dates make the timeline hard to dispute and show you've been patient.
The "options" line is deliberately mild. It signals you know your rights without threatening. If you'd rather keep it softer still, you can delete that paragraph entirely for this round and add it only if you get no reply.
Check local rules before escalating. Heating is usually treated as an essential service, and in many places landlords must fix it within a set period. Your local council or a tenants' advice line can tell you what applies to you and whether you have any right to withhold rent or arrange the repair yourself — don't do either without checking first, as it can backfire.
Offer access and be flexible. This removes the most common excuse for delay and shows you're being reasonable.
If you tell me where you're based or how the earlier conversations went, I can adjust the tone or the escalation wording.
Asked Nov 1, 2026. Unedited.
Write a React hook that debounces a value and cancels on unmount. Include the TypeScript types.
Claude Fable 5.1
Here's a typed useDebounce hook. It returns the debounced value and clears the pending timer whenever the input changes or the component unmounts, so you never get a state update on an unmounted component.
import { useEffect, useState } from "react";
/**
* Returns a debounced copy of `value` that only updates after `delayMs`
* milliseconds have passed without `value` changing.
*
* The pending update is cancelled when `value` or `delayMs` changes,
* and when the component unmounts.
*/
export function useDebounce<T>(value: T, delayMs: number = 300): T {
const [debouncedValue, setDebouncedValue] = useState<T>(value);
useEffect(() => {
const timeoutId: ReturnType<typeof setTimeout> = setTimeout(() => {
setDebouncedValue(value);
}, delayMs);
// Cleanup runs before the next effect and on unmount.
return () => {
clearTimeout(timeoutId);
};
}, [value, delayMs]);
return debouncedValue;
}Usage
function Search() {
const [query, setQuery] = useState("");
const debouncedQuery = useDebounce(query, 400);
useEffect(() => {
if (!debouncedQuery) return;
// Fire the request only after the user pauses typing for 400ms.
fetch(`/api/search?q=${encodeURIComponent(debouncedQuery)}`);
}, [debouncedQuery]);
return (
<input
value={query}
onChange={(e) => setQuery(e.target.value)}
placeholder="Search…"
/>
);
}Notes
Generic
Tmeans it works for strings, numbers, objects, etc., with full type inference at the call site.ReturnType<typeof setTimeout>keeps the timer ID type correct in both browser (number) and Node (Timeout) environments.Cancellation on unmount comes for free from the effect cleanup — React calls it when the component unmounts, so
setDebouncedValueis never invoked afterward.If you need an immediate update when
delayMsis0, you can short-circuit at the top of the effect withif (delayMs <= 0) { setDebouncedValue(value); return; }.
Asked Nov 1, 2026. Unedited.
A drug test is 99% accurate, and 0.5% of people use the drug. Someone tests positive. What is the probability they use it, and why does the answer surprise people?
Claude Fable 5.1
The answer: about 33%
Even though the test is "99% accurate," a person who tests positive has only roughly a 1-in-3 chance of actually using the drug.
The calculation (Bayes' theorem)
Assume "99% accurate" means the test correctly identifies 99% of users (sensitivity) and correctly clears 99% of non-users (specificity).
P(user) = 0.005, P(non-user) = 0.995
P(positive | user) = 0.99
P(positive | non-user) = 0.01
$$ P(\text{user} \mid +) = \frac{0.99 \times 0.005}{0.99 \times 0.005 + 0.01 \times 0.995} = \frac{0.00495}{0.00495 + 0.00995} \approx 0.332 $$
The intuitive version: imagine 10,000 people
| Count | Test positive | |
|---|---|---|
| Drug users | 50 | ~49 or 50 (true positives) |
| Non-users | 9,950 | ~99 or 100 (false positives) |
| Total positives | ~150 |
Of the ~150 people who test positive, only ~50 actually use the drug. So 50 / 150 ≈ 33%.
Why it surprises people
Base-rate neglect. People focus on the test's 99% accuracy and ignore how rare drug use is. Because non-users outnumber users 199-to-1, even a tiny 1% false-positive rate applied to that huge group produces more false positives than the test produces true positives from the small group of users.
Confusing two different conditional probabilities. "99% accurate" tells you P(positive | user) — if you use, you'll probably test positive. People intuitively flip this into P(user | positive) — if you test positive, you probably use. These are not the same thing, and the gap between them is entirely driven by the base rate. (This flip is sometimes called the "inverse fallacy" or, in courtrooms, the "prosecutor's fallacy.")
"99%" sounds like certainty. It feels like a 1% error rate should mean 1% of results are wrong. But the relevant question isn't "how often is the test wrong?" — it's "among the positive results, how many are wrong?" And that depends on what you're screening for.
The practical takeaway
This is why screening for rare conditions is almost always followed by a second, confirmatory test. A second independent 99%-accurate test on the ~150 positives would raise the probability of true use from 33% to about 98%, because the prior is no longer 0.5% — it's 33%.
Asked Nov 1, 2026. Unedited.
What it’s good at
Ranked against 42 models, from public leaderboards and our own blind tests where we have them. How we rank
- #2of 42 for writing
- #2of 42 for research
- #3of 42 for coding
The facts
Claude Fable 5.1 is one of Anthropic’s top models, and one of the most expensive we rank. It reads images and PDFs as well as text.
Scores from artificialanalysis.ai and lmarena.ai.
- Made by
- Anthropic
- API price, per 1M tokens
- $10 in, $50 out
- Speed
- 70 tokens a second
- Artificial Analysis Index
- 53.4
- LMArena text
- 1,513
- LMArena coding
- 1,531
- Updated
- Oct 26, 2026