Safety Framing: Awareness, Not Safety

This is the single most important design doctrine in SenseBridge, and the project’s primary liability shield. Read this before touching any spoken output, alert, UI copy, or onboarding text.

The rule

SenseBridge never claims safety. It never guarantees obstacle detection, never guarantees crosswalk detection, and never says or implies “safe to cross.” It provides cautious, probabilistic awareness — “possible stairs ahead,” “something may be in front of you” — and explicitly, repeatedly tells users that it is not a mobility or safety device and does not replace a cane, a guide dog, or orientation-and-mobility training.

This mirrors how Apple itself disclaims its own detection features, and it is not just an ethical stance — it is the legal foundation the project’s disclaimers and Terms of Service depend on. See legal/DISCLAIMER.md and legal/TERMS_AND_CONDITIONS.md.

Where this framing must appear

If a change adds or edits any of the above, and it doesn’t preserve this hedging, that’s a release-blocking defect, not a style nit — see the accessibility risk table in docs/ACCESSIBILITY.md, which lists “over-confident output” as a named risk with the same severity as an unlabeled control.

Why this is the hard part, not a footnote

The reliability priority order for this product is unusual: correct hedging first, then not crashing, then performance. A tool that crashes occasionally is annoying. A tool that confidently says the wrong thing about the physical world can get someone hurt. Treat any bug that produces over-confident, safety-adjacent language as the highest-severity class of bug in the codebase — above crashes, above performance regressions.

A language model may never write the final sentence

Scene descriptions are composed by an on-device language model (FoundationModelsSceneComposer), and the temptation is to let it produce the whole sentence. It may not. The model is constrained by @Generable to return a noun phrase, and Phrasing applies the hedge afterwards.

The reason is that a hedge carried in a prompt is a hedge that survives only until the next model or prompt change, and no test can prove it survived — generation is not deterministic, so “the output usually hedges” is the strongest claim available. Structuring it so the model cannot emit the final wording converts that into a property of the code. The Certainty fed to Phrasing also comes from the detector’s confidence, not the model’s, so fluent output cannot upgrade a doubtful detection into a stronger hedge.

The same rule applies to any future generative component: a model may supply what is named, never how certainly it is asserted.

Continuous, worn use raises the bar, it does not lower it

Hands-free awareness is meant for a phone worn on the body while walking — the closest this app comes to the shape of a mobility device. Two consequences follow, and both are implemented rather than merely stated:

Real-time navigation guidance is explicitly out of scope

The original concept included real-time navigation guidance. This plan reframes that permanently as awareness, never guidance, because navigation guidance is the most dangerous feature shape this project could build: it invites exactly the false confidence this doctrine exists to prevent. See docs/ROADMAP.md for what’s deliberately not being built and why.


Need help? See SUPPORT.md.