pediatric-ai-scribe-v3/test
Daniel 993442f98a feat: the API describes itself, at /api/openapi.json
docs/api-reference.md was hand-written, and by the time anyone checked
it was documenting twenty-three endpoints that answer 404 while missing
others that exist. That is what hand-written reference material does: it
is correct on the day it is written and silently wrong afterwards. A
second hand-written document, in YAML this time, would rot the same way.

So paths, methods and mount points are read from the Express router
stack at request time. They cannot disagree with the app, because they
are the app: 186 paths, 215 operations, and — checked — no /learning
endpoints, which is what the prose version went on claiming for weeks
after that feature was deleted.

What introspection cannot know is what an endpoint is *for*. That half
lives in src/utils/openapiRoutes.js, keyed by "METHOD /path", and it is
the half that rots, so it is the half that is enforced: a Playwright
spec fetches the live document and fails when the number of operations
without a summary rises above 199 — the debt as measured today. A
ratchet, not a target. Adding an endpoint pushes the count over and
fails the build; describing one lowers the number. The failure lists the
operations by name, so it says what to write.

Whether an operation is public is stated per route rather than inferred
from middleware. Guessing wrong there is worse in both directions:
calling a public endpoint protected hides a hole, and the reverse
invites a bug report.

The contract spec lives in e2e rather than the unit suite because it
needs the whole app mounted, and requiring server.js from node:test
pulls in the database pool and hangs the run — that has happened here
before.

Also: e2e now runs in CI on dev, gated by a shell check inside the step
rather than a job-level "if", which this Forgejo dispatches anyway and
then kills with "Early termination".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dv6sqaY6Vq3ChZHMem3cnU
2026-09-13 00:52:55 +02:00
..
account-boundary.test.js feat: retire Learning Hub 2026-09-12 20:14:20 +02:00
admin-clinical-assistant-wiring.test.js refactor: remove the embedding settings, whose only consumer is gone 2026-09-12 21:47:09 +02:00
admin-docs-toc.test.js
assistant-attachment-roundtrip.test.js fix: an assistant attachment must be the image type it claims to be 2026-09-12 19:00:10 +02:00
assistant-autosave.test.js
assistant-citation-modal.test.js
assistant-citations.test.js fix: stream the assistant's answer a block at a time 2026-09-12 21:36:51 +02:00
assistant-component-css.test.js
assistant-enter-to-send.test.js feat: Enter sends in the assistant, and the person chooses 2026-09-12 18:05:36 +02:00
assistant-export-owner.test.js
assistant-image-attachments.test.js fix: an assistant attachment must be the image type it claims to be 2026-09-12 19:00:10 +02:00
assistant-image-done.test.js
assistant-image-intent.test.js feat: a text-only model can ask a model that can see; and the image regex is gone 2026-09-12 15:43:36 +02:00
assistant-math-mhchem.test.js
assistant-message-actions.test.js
assistant-mobile.test.js
assistant-saved-tables.test.js
assistant-sharing-boundary.test.js
assistant-sources-cleaning.test.js
assistant-streaming-blocks.test.js fix: stream the assistant's answer a block at a time 2026-09-12 21:36:51 +02:00
assistant-translate.test.js feat: a text-only model can ask a model that can see; and the image regex is gone 2026-09-12 15:43:36 +02:00
assistant-user-markdown.test.js
assistant-voice-mode.test.js fix: voice mode reads the answer that just arrived, and reads what the page shows 2026-09-11 21:10:50 +02:00
assistant-voice.test.js
assistant-workspace-layout.test.js feat: retire Learning Hub 2026-09-12 20:14:20 +02:00
attachment-magic-bytes.test.js fix: an assistant attachment must be the image type it claims to be 2026-09-12 19:00:10 +02:00
backend-hardening.test.js refactor: remove the embedding settings, whose only consumer is gone 2026-09-12 21:47:09 +02:00
bedside-respiratory-ventilation.test.js
build-id.test.js
calc-math.test.js
calculators-data.test.js
chat-model-discovery-filter.test.js wip: invite codes stay copyable 2026-09-12 21:00:22 +02:00
clinical-assistant-prompt-pool.test.js
clinical-conversation.test.js feat: a text-only model can ask a model that can see; and the image regex is gone 2026-09-12 15:43:36 +02:00
clinical-generation-options.test.js
clinical-mcp-session-lifecycle.test.js
clinical-notes-entrypoints.test.js
clinical-release-integration.test.js refactor: rebuild the admin settings page around what each card does 2026-09-12 21:42:27 +02:00
clinical-retrieval-title.test.js
clinical-table-preservation.test.js
corpus-retrieval.test.js feat: retire Learning Hub 2026-09-12 20:14:20 +02:00
crypto-context-binding.test.js feat: a ciphertext now only decrypts in the row it was written for 2026-09-12 21:25:24 +02:00
deck-review.test.js feat: modifying a deck can see it 2026-09-12 06:55:16 +02:00
deck-theme-sample.test.js feat: a theme is shown by a sample deck you download, not a picture 2026-09-12 22:24:05 +02:00
deck-themes.test.js feat: a theme is shown by a sample deck you download, not a picture 2026-09-12 22:24:05 +02:00
doc-spec.test.js feat: Word is built by python-docx from the same typed source as the deck 2026-09-11 21:58:53 +02:00
e2e-harness.test.js test(e2e): repair the harness, taking the browser suite from 96 failures to 11 2026-09-11 18:54:03 +02:00
empty-answer.test.js fix: an empty answer from the model was the one failure never caught 2026-09-12 07:41:04 +02:00
extension-transfer.test.js
frontend-prompt-env.test.js refactor: rebuild the admin settings page around what each card does 2026-09-12 21:42:27 +02:00
frontend-rendering-safety.test.js
generated-image-cache.test.js feat: an image library — every picture this account has made 2026-09-12 14:36:30 +02:00
generated-image-storage.test.js
generated-image-tools.test.js feat: retire Learning Hub 2026-09-12 20:14:20 +02:00
generated-images-ui.test.js feat: retire Learning Hub 2026-09-12 20:14:20 +02:00
image-fallback-chain.test.js feat: image fallback chains for every workflow, and a library worth looking at 2026-09-12 14:53:04 +02:00
image-key-collision.test.js fix: a second deck reused the first deck's pictures 2026-09-12 08:26:09 +02:00
image-library.test.js feat: image fallback chains for every workflow, and a library worth looking at 2026-09-12 14:53:04 +02:00
login-codes.test.js feat: sign in with a code emailed to you, offered beside the password 2026-09-11 20:12:03 +02:00
mcp-shutdown.test.js
metrics.test.js
model-defaults.test.js feat: retire Learning Hub 2026-09-12 20:14:20 +02:00
model-roster-pruning.test.js feat: send a resource to your own Nextcloud, as the rendered file 2026-09-12 20:34:58 +02:00
models-changed-propagation.test.js fix: a newly added model reaches every picker, including the user-facing ones 2026-09-12 17:46:18 +02:00
module-entrypoints.test.js feat: retire Learning Hub 2026-09-12 20:14:20 +02:00
my-resources-refine.test.js feat: a theme is shown by a sample deck you download, not a picture 2026-09-12 22:24:05 +02:00
my-resources-stale-results.test.js fix: the last run's illustration no longer sits under an empty form 2026-09-12 17:43:19 +02:00
my-resources.test.js feat: retire Learning Hub 2026-09-12 20:14:20 +02:00
nextcloud-login-flow.test.js fix: "Sign in with Nextcloud" opens the sign-in page 2026-09-12 21:36:51 +02:00
notes-sanitize.test.js
openapi.test.js feat: the API describes itself, at /api/openapi.json 2026-09-13 00:52:55 +02:00
patient-takehome.test.js feat: a text-only model can ask a model that can see; and the image regex is gone 2026-09-12 15:43:36 +02:00
pe-guide-data.test.js
policy-flows.test.js refactor: rebuild the admin settings page around what each card does 2026-09-12 21:42:27 +02:00
policy-ui.test.js feat: retire Learning Hub 2026-09-12 20:14:20 +02:00
prompt-administration.test.js refactor: remove the embedding settings, whose only consumer is gone 2026-09-12 21:47:09 +02:00
release.test.js ci: fix the failing job, split deploy out, and drop the Android build 2026-09-12 23:30:52 +02:00
resource-to-nextcloud.test.js feat: a ciphertext now only decrypts in the row it was written for 2026-09-12 21:25:24 +02:00
review-model-vision-guard.test.js feat: a text-only model can ask a model that can see; and the image regex is gone 2026-09-12 15:43:36 +02:00
session-quiz-ed-regressions.test.js feat: retire Learning Hub 2026-09-12 20:14:20 +02:00
slide-shapes.test.js feat: record what a deck wanted and could not have 2026-09-11 22:51:15 +02:00
slide-spec.test.js fix: a deck the model fumbles once is asked for again, not abandoned 2026-09-12 05:34:14 +02:00
stt-provider.test.js
transcription-memory-policy.test.js
tts-provider.test.js chore: Kitten and Supertonic retired; Kokoro is the local voice 2026-09-12 16:45:05 +02:00
vision-tool.test.js fix: the active library view is unmistakable, and a leading question cannot mislead the vision model 2026-09-12 16:27:21 +02:00
web-search.test.js feat: My Resources says what it is, offers its sources in one place, and Modify gets them too 2026-09-11 18:54:17 +02:00
well-visit-data.test.js