Amin Mousavi 98e2599535 fix(voice): stop the review sheet from contradicting itself about a target
A tooth named twice — once bare, once with a job — was counted as jobless.
joblessProsthesisTargets adds an uncovered target inside the loop, but a LATER
assignment can still cover it, and nothing re-checked at the end. The sheet then
showed 13 with its crown AND struck through as "no prosthesis heard".

prosthesisTargetLines also returns a line per target including one with nothing
applied and nothing refused, so the sheet printed a dangling "13: " beside the
jobless entry for the same tooth. The sheet now renders only lines carrying a
code; the unfiltered list still feeds the chart, so a target pending a material
pick stays selected. A line whose codes were all refused no longer opens with a
leading " + ".

applyVoiceResult now reads labCaseDraftsRef.current rather than the state. Every
other handler writes that ref beside setLabCaseDrafts precisely because a save
in the same tick reads it; this path was the one left reading state, so a draft
added earlier in the same tick could be dropped.

Found by /code-review. One new test, verified to fail without the fix.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-11 22:42:18 +08:00

Dyolink

Monorepo: NestJS backend (backend/), Next.js frontend (frontend/), Docker stack under infrastructure/..

Local development: see backend/README.md and frontend/README.md.

Cursor AI: project conventions for agents are in AGENTS.md, .cursor/rules/, and .cursor/skills/.


Production deploy (https://nudentic.ir)

Full guide: infrastructure/DEPLOY.md

Git tag v1.0.1 → Gitea workflow .gitea/workflows/prod-tag-deploy.yml builds images (URLs baked for nudentic.ir), pushes to Gitea registry, SSH-deploys the Linux stack.

First-time SSL / Hub fallback: same DEPLOY.md.


Staging deploy (https://wixur.ir)

Full guide: infrastructure/STAGING-DEPLOY.md

Merge or push to master → Gitea Actions builds images → deploys to https://wixur.ir (Gitea: http://wixur.ir:3000).

Workflow: .gitea/workflows/registry-build-deploy.yml


Path Role
backend/Dockerfile API image
frontend/Dockerfile Web image (standalone + copy public/ for catalog icons)
infrastructure/STAGING-DEPLOY.md Staging setup, CI variables, testing
infrastructure/docker-compose.registry.yml Pull-only staging stack (registry images + nginx + postgres)
infrastructure/deploy.registry.env.example Template for deploy.registry.env
Description
The whole dockerized structure of the project repo
Readme 10 MiB
Languages
TypeScript 97.4%
Shell 1.1%
CSS 0.8%
JavaScript 0.3%
Dockerfile 0.3%
Other 0.1%