Repository navigation
fix(bridges): the bot congratulated "them" on the owner's own store - #230
Merged
Merged
Conversation
A friend forwarded the owner's OWN announcement ("we are opening a Crispy
Cones store in Brambleton, VA") back to him and said "congratulations". The
bot replied "congrats to them, that's exciting" — then asked the friend
whether a store was opening near HIM. In front of a contact, about the single
biggest thing in the owner's life.
Not a reasoning failure. The fact was UNREPRESENTABLE.
1. There was no bucket for a public fact.
`## Facts` is typed (marital status, spouse, kids, key dates) and is
private-by-default: contacts get "never confirm, never deny". The 12 lines
that DID mention Brambleton live in `## Private`, sealed from contacts by
design. So the bot had nowhere to hold "I am opening a store", and even if
it had been in Facts the model would have been TOLD not to confirm it.
Added `## Public` (also `## Announced` / `## What I'm up to` /
`## Shareable`): free-form bullets, parsed into `publicFacts`, kept OUT of
prose like Facts, rendered by `publicBlock()`, injected into the persona
for BOTH audiences with the OPPOSITE framing — this is the one kind of
fact the model may openly confirm, and a congratulations about it is about
the OWNER: thank them as the person it happened to, never as an outsider,
never ask whether it is happening near them.
Wired into both bridges. The fact itself is written into the owner's
profile (the owner stated it directly: "we are opening crispy cones
franchise on Sep 10").
2. "Brambleton, VA" was French.
The romanized-lexicon scorer accepted ANY single token hit. The French
list has "va" (also "ma", "ce", "tu"); "Brambleton, VA" scored French at
0.95, "see you in MA next week" scored Bengali, and the language-modality
hint engaged on the owner's own English announcement. A single hit now
only counts when the token is >= 3 chars — 2-letter function words cannot
classify a message alone. 3 rather than 4 because "ela unnav" is a real
greeting whose only lexicon hit is the 3-letter "ela" (a stricter first
cut regressed it; caught by the test, not by luck).
3. The owner's own Telugu was not in the detector.
CLAUDE.md documents the owner's short forms — "vasta", "cheptha",
"matladtham". None were in the Telugu lexicon, so the owner's own dialect
scored as ENGLISH on the original code too. Added them plus common
inflections. Pre-existing, found while verifying (2).
Also observed, not fixed here: the contact had no relationship entry, so the
confidence tier fired with zero signals ("MEDIUM ()"). The bot replied about
the owner's biggest news to someone it knew nothing about.
Tests pin the invariants: `## Public` parses and does not leak into prose,
Facts or the vault; the persona carries the ownership rule; a US state code
cannot classify a message; real romanized one-word messages still do.
1506/1506 bridge-core, 57/57 imessage-bridge, both bridges typecheck clean
(real exit codes — the first pass hid a TS2322 behind a pipe).
Contributor
🔎 Codex cross-audit (agent:audit)Blocking
Verification
|
Contributor
🔷 Gemini cross-audit (agent:audit-gemini)Audit Report: Unified PR Patch AnalysisVerdict: APPROVED (Green) — Zero blocking correctness, security, or regression issues. The diff is extremely high-quality, elegant, and robust. Key Strengths & Solved Issues
Non-Blocking Edge-Case Analysis
|
Contributor
🛡️ Vuln scan — ❌ vulnerable dependency found |
…anked chacha20 Three new findings on the `vuln` gate, none in this PR's diff, all in the runtime-manager's Wasmtime stack — the layer invariant #5 relies on to isolate untrusted code, so not something to merge past because the check is "not required". RUSTSEC-2026-0269 wasmtime 46.0.2 filesystem sandbox escape via trailing slashes in paths/symlinks RUSTSEC-2026-0268 wasmtime 46.0.2 guest-controlled host heap allocation through WASIp3 streams chacha20 0.10.0 yanked (via wasmtime-wasi -> rand); cargo audit treats a yank as a failure `cargo update -p wasmtime` alone was a no-op: the wasmtime family pins itself with `=`, so wasmtime-environ stayed at 46.0.2 and the resolver refused 46.0.3. Updating `wasmtime` and `wasmtime-wasi` together moves the whole family (and cranelift 0.133.2 -> 0.133.3, pulley 46.0.3, cap-std 3.4.6). Stays on the 46.x line — no API change, `cargo check` clean in 31s. Lockfile only. `make audit` (govulncheck + cargo audit x3) exits 0.
dshakes
added a commit
that referenced
this pull request
Sep 4, 2026
…sured reply loop (#231) The plan behind PRs #224–#230, written down so it outlives the session that produced it. Fourteen root-caused production failures from 2026-08-23 to 2026-09-04 are the Context; five workstreams derived from them are the Decision. The three findings the plan rests on: - none of the fourteen threw an error — every one was silent - the owner told the assistant the facts and they never reached the bot - static classifiers pre-empt the model at every gate a contact can see And the three things the 2026 literature says NOT to do, so nobody relitigates them: no more exemplars, no fine-tuning, no multi-agent fan-out on the reply path. Sequenced so the deploy step comes first (three services ran stale code for weeks) and the measurement loop comes before any voice change it would have to judge.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A friend forwarded the owner's own announcement back and said "congratulations". The bot replied "congrats to them, that's exciting" — then asked the friend whether a store was opening near him.
Not a reasoning failure. The fact was unrepresentable.
1. No bucket for a public fact
## Factsis typed (spouse, kids, key dates) and private-by-default — contacts get "never confirm, never deny". The 12 lines that did mention Brambleton live in## Private, sealed from contacts by design.So the bot had nowhere to hold "I am opening a store" — and had it been in Facts, the model would have been told not to confirm it.
Added
## Public(aliases:## Announced,## What I'm up to,## Shareable). Parsed intopublicFacts, kept out of prose like Facts, injected into the persona for both audiences with the opposite framing: the one kind of fact the model may openly confirm. A congratulations about it is about the owner — thank them as the person it happened to, never as an outsider, never ask if it's happening near them.2. "Brambleton, VA" was French
The scorer accepted any single token hit. The French list contains
va(alsoma,ce,tu). "Brambleton, VA" → French 0.95; "see you in MA next week" → Bengali. A foreign-language reply mode engaged on the owner's English announcement.Single hit now requires ≥3 chars. Not 4 — "ela unnav" is a real greeting whose only hit is the 3-letter
ela; a stricter first cut regressed it and the test caught it.3. The owner's own Telugu wasn't in the detector
CLAUDE.md documents the owner's short forms —
vasta,cheptha,matladtham. None were in the lexicon, so the owner's own dialect scored as English on the original code. Added, with inflections. Pre-existing; found while verifying (2).Observed, not fixed
The contact had no relationship entry → confidence fired with zero signals (
MEDIUM ()). The bot discussed the owner's biggest news with someone it knew nothing about.Verification
undefinedin the array) behind a pipe; caught on the re-run with real exit codes