Skip to content

Retire "decision support" from the app's own copy, and give the user a guide - #25

Closed
pablo-tech wants to merge 1 commit into
devfrom
fix/copy-and-guide
Closed

pablo-tech wants to merge 1 commit into
devfrom
fix/copy-and-guide

Conversation

@pablo-tech

Copy link
Copy Markdown
Contributor

Phase 7 of the Ad Grant launch warp. Three things the grant rests on, in one change, plus a deletion whose gate was proved rather than asserted.

The phrase

apps/BRANDING.md (the copy manual for every LexiTar surface, in the websites repository) forbids "decision support", and the app said it twice:

  • the About overlay opened "This is a decision-support system that analyzes one patient's laboratory and body-marker data over time", and
  • the print footer of every page a user carries into an appointment read "LexiTar-Generated decision support, not a diagnosis".

Both are also the FDA's own term of art for the category LIABILITY.md argues this tool sits outside of — so the app was describing itself as the one thing its liability analysis says it is not. The opening sentence additionally failed the manual's criterion-2 diagnostic boundary ("analyzes your") and is rewritten with its §4 lexicon: compile, translate, map, reference.

"patient" and "clinical" are avoided in the replacement and nowhere else — both stay wherever they describe the data model (report-sections.ts) or quote a regulation (LIABILITY.md). What they do on a screen is invite a skimming reviewer to file the Foundation as a hospital, which Google for Nonprofits excludes. That is an eligibility matter, not a style one.

The guide

DPGA.md §5 carried this as a DPG Standard gap, and nothing in the repository or the product closed it:

No end-user guide. Nothing explains, for a patient, how to import a report, read a translation, or share with a clinician.

Four plain-language steps now sit in the About overlay — bring your record in, see what changed, ask in your own words, walk in prepared — each naming the surface it refers to, and each claim checked against the code rather than written from the feature list. Import's accepted types are capability-gated (supports("extract", "documents")), so the step says the pane itself names what this deployment can read.

The overlay is the guide's one home: the user is its audience and it is the surface they already open. DPGA.md 5.3 moves ❌ → 🟡 and names what an assessor would still ask for — sharing with a clinician is still unexplained anywhere, and a guide living in a Svelte component is one a repository-only reviewer reads as source.

Two ranges

Found while retiring the phrase, and the same category of claim: two rendered section blurbs said "your healthy ranges" and "your personal healthy range". §4 forbids exactly that — a range is a demographic reference, never a statement of what is healthy for you, which is a judgement only a physician makes. The arithmetic is untouched: PersonalizedRange still adjusts for age, gender, height and recorded conditions. What moved is the claim.

Three documents deleted

FEATURES.md, PASSPORT.md and TRAVEL.md now live in finca-madre/corporate-vault at tars-501c3/grant/. The deletion was gated on proving that rather than believing it — all three blobs are byte-identical to the vault's origin/main copies:

document blob
FEATURES.md 02e4626aa728
PASSPORT.md 7283f8586636
TRAVEL.md 7aae629b4772

The last two are a priced commercial travel product and its channel strategy, which do not belong in a public repository under a 501(c)(3)-owned app folder and are out of scope for a grant that may not advertise a commercial product. No file in this repository links to any of the three — measured, not assumed. LIABILITY.md's travel-product comparison is self-contained and unaffected.

Measured

check result
npm run check 1719 files, 0 errors, 22 pre-existing warnings
oxlint --deny-warnings clean
npm test 4310 passed (348 files)
npm run build clean
playwright — the one e2e that opens the overlay 1 passed

The e2e assertion is inverted rather than updated. It used to require the literal "decision-support system"; it now requires "health literacy tool" and forbids /decision[ -]support/i, so it breaks when the positioning regresses rather than when the copy is edited.

Two occurrences survive in the bundle, and neither is this repository's

@pablotech/akesi's model prompt tells the model "your output is decision support, not a diagnosis" and lists a Decision Support input section. Prompt text is not rendered copy, so no reviewer reads it — but the system prompt and the disclaimer now disagree. That is a finding for pilos, not a change that can be made here.

🤖 Generated with Claude Code

…a guide

Three things the Google Ad Grant rests on, in one change.

**The phrase.** `apps/BRANDING.md` — the copy manual for every LexiTar surface,
in the websites repository — forbids "decision support", and the app said it
twice: the About overlay opened "This is a decision-support system that analyzes
one patient's ... data", and the print footer of every page a user takes to an
appointment read "LexiTar-Generated decision support, not a diagnosis". Both are
also the FDA's own term of art for the category `LIABILITY.md` argues this tool
sits outside of, so the app was describing itself as the one thing its liability
analysis says it is not. The opening sentence additionally failed the manual's
criterion-2 diagnostic boundary ("analyzes your") and is rewritten with its §4
lexicon — compile, translate, map, reference. "patient" and "clinical" are
avoided in the replacement and nowhere else: both stay wherever they describe
the data model or quote a regulation. What they do on a screen is invite a
skimming reviewer to file the Foundation as a hospital, which Google for
Nonprofits excludes — an eligibility matter rather than a style one.

**The guide.** `DPGA.md` §5 carried "No end-user guide. Nothing explains, for a
patient, how to import a report, read a translation, or share with a clinician"
as a DPG Standard gap, and nothing in the repository or the product closed it.
Four plain-language steps now sit in the About overlay — bring your record in,
see what changed, ask in your own words, walk in prepared — each naming the
surface it refers to, and each claim checked against the code rather than
written from the feature list: Import's accepted types are capability-gated, so
the step says the pane names what this deployment can read. The overlay is the
guide's one home, because the user is its audience and it is the surface they
already open. `DPGA.md` 5.3 moves ❌ → 🟡 and names what an assessor would still
ask for: sharing with a clinician is still unexplained, and a guide living in a
Svelte component is one a repository-only reviewer reads as source.

**Two ranges.** Found while retiring the phrase, and the same category of claim:
two rendered section blurbs said "your healthy ranges" and "your personal
healthy range". §4 forbids exactly that — a range is a demographic reference,
never a statement of what is healthy *for you*, which is a judgement only a
physician makes. The arithmetic is untouched; `PersonalizedRange` still adjusts
for age, gender, height and recorded conditions. What moved is the claim.

**Three documents deleted.** `FEATURES.md`, `PASSPORT.md` and `TRAVEL.md` are in
`finca-madre/corporate-vault` at `tars-501c3/grant/`, and the deletion was gated
on proving it rather than asserting it: all three blobs are byte-identical to
the vault's `origin/main` copies (`02e4626aa728`, `7283f8586636`,
`7aae629b4772`). The last two are a priced commercial travel product and its
channel strategy, which do not belong in a public repository under a
501(c)(3)-owned app folder and are out of scope for a grant that may not
advertise a commercial product. No file in this repository links to any of the
three — measured, not assumed. `LIABILITY.md`'s travel-product comparison is
self-contained and unaffected.

Measured: `npm run check` 1719 files / 0 errors; `oxlint` clean; `npm test` 4310
passed (348 files); `npm run build` clean; and the one e2e that asserts the
overlay passes against a real browser with the assertion inverted — it used to
require "decision-support system" and now requires "health literacy tool" and
forbids /decision[ -]support/i, so it breaks when the positioning regresses
rather than when the copy is edited.

Two occurrences survive in the built bundle and neither is this repository's:
`@pablotech/akesi`'s model prompt tells the model "your output is decision
support, not a diagnosis" and lists a "Decision Support" input section. Prompt
text is not rendered copy, so no reviewer reads it — but the system prompt and
the disclaimer now disagree, which is a finding for `pilos` and not a change
that can be made here.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying health-dash-main with  Cloudflare Pages  Cloudflare Pages

Latest commit: 22680b9
Status: ✅  Deploy successful!
Preview URL: https://f9089503.health-dash-prod.pages.dev
Branch Preview URL: https://fix-copy-and-guide.health-dash-prod.pages.dev

View logs

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying health-dash-dev with  Cloudflare Pages  Cloudflare Pages

Latest commit: 22680b9
Status: ✅  Deploy successful!
Preview URL: https://069fb251.health-dash-aex.pages.dev
Branch Preview URL: https://fix-copy-and-guide.health-dash-aex.pages.dev

View logs

@pablo-tech

Copy link
Copy Markdown
Contributor Author

Superseded by #26 — the identical tree on a commit carrying the Signed-off-by trailer the required dco check demands. Adding it in place would have been a history rewrite, which the protocol's push guard refuses without asking first, so the commit was re-made and pushed as a new branch instead: nothing replaced, this record left readable.

The remote branch fix/copy-and-guide is deliberately left in place rather than deleted — push.sh denies a ref deletion whatever its merge state, and routing around it through the API to tidy up litter is not a trade worth making. It goes at warp close with the worktrees.

@pablo-tech pablo-tech closed this Oct 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant