Files
hamedandClaude Opus 5 df07d00adc docs(checklists): mark the public-site dark-mode rows out of scope
The product owner reverted the dark-mode work on nobat724_front, so six rows in
task-00b that either claimed dark mode was verified or listed it as debt no
longer describe reality. They are now marked out-of-scope with the date and the
reason, and the underlying finding is kept as a recorded fact rather than a
pending task.

Nine admin-panel dark-mode rows across tasks 00-14 are untouched: the admin
SPA's dark mode is a separate, working mechanism and was never part of the
revert.

Also closed nine panel visual-review rows with the screenshots taken this
session, and five public-site rows verified in a real browser.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-01 17:12:11 +03:30

9.6 KiB
Raw Permalink Blame History

چک‌لیست — تسک ۰۱ (شعبه و اتاق)

وضعیت کلی: تکمیل‌شده (۲ ردیف 🔄 بازبینی چشمی) · آخرین بازبینی: ۱۴۰۵/۰۵/۰۸

قواعد: _shared/definition-of-done.md · red-lines.md · ui-conventions.md · branch-is-doctor-address.md


۰. خط سرخ

# مورد وضعیت یادداشت
۰.۱ --group=slot-mode-frozen سبز --group=slot-mode-frozen — ۳ تست / ۸ assertion سبز
۰ SlotCalculatorService دست‌نخورده صفر تغییر در فایل
۰ location_id در JSON برنامهٔ هفتگی دست‌نخورده شعبه = همان doctor_addresses.id؛ JSON دست‌نخورده
۰ DoctorAddress هیچ ستونی حذف/تغییر نداد فقط دو ستون NOT NULL DEFAULT
۰.۵ active=false هیچ اثری بر محاسبهٔ اسلات ندارد فقط ذخیره می‌شود؛ در branch.md نوشته شد

۱. طرح

# مورد وضعیت یادداشت
۱.۱ جدول branches ساخته نشد — دلیل مکتوب _shared/branch-is-doctor-address.md
۱ task.md · architecture.md · database.md · implementation_notes.md تصحیح شد
۱ ارجاع‌های branch_id در تسک‌های ۰۲/۰۴/۰۷/۰۸/۰۹/۱۰/۱۳ با سند حاکم پوشش داده شد ۲۴ ارجاع — یک سند واحد در _shared به‌جای ویرایش ۲۴ نقطه

۲. بک‌اند

# مورد وضعیت یادداشت
۲.۱ DoctorAddress += active + timezone
۲.۲ timezone با DateTimeZone::listIdentifiers() اعتبارسنجی می‌شود، نه regex DateTimeZone::listIdentifiers() در setter
۲.۳ BranchWorkingHours entity (فرزند aggregate) ولی جفت tenant گرفت نه فرزند aggregate — ردیف ۳.۵
۲.۴ Room entity با TenantOwnedTrait و جفت مشتق از آدرس در سازنده جفت در سازنده از tenantEntityType/Id() آدرس
۲.۵ BranchResolver — تک‌نقطهٔ uuid آدرس → محیط جاری، ۴۰۴ نه ۴۰۳ ۴۰۴ می‌دهد؛ منشی هم پوشش دارد
۲.۶ WorkingHoursService — اعتبارسنجی کامل قبل از حذف (اتمی) WorkingHoursTest::testInvalidLaterDayLeavesTheStoredWeekUntouched
۲.۷ ساعت با start_minute/end_minute عددی، نه رشتهٔ "09:00"
۲.۸ sequence سمت سرور تخصیص می‌یابد، نه کلاینت بعد از usort تخصیص می‌یابد
۲.۹ RoomService با گارد حذف قابل توسعه (آرایهٔ تزریقی، نه زنجیرهٔ if) RoomDeletionGuardInterface + AutowireIterator + _instanceof
۲.۱۰ شش endpoint ساخته شد هشت شد نه شش: GET /branches و PATCH /branch/{uuid} هم لازم بودند
۲.۱۱ پزشک مستقل هم شعبه دارد type=personal از قبل کار می‌کرد
۲.۱۲ کنترلر نازک · BaseController · success/paginated/error

۳. دیتابیس

# مورد وضعیت یادداشت
۳.۱ branch_working_hours · rooms Version20260730125038
۳.۲ entity_type, entity_id ستون اول ایندکس rooms idx_rooms_tenant و idx_bwh_tenant
۳.۳ timezone روی آدرس از روز اول افزودن بعدی = backfill زمان‌دار
۳.۴ rooms.capacity — ظرفیت هم‌زمان حداقل ۱ در setter و سرویس
۳.۵ branch_working_hours در GlobalTables::AGGREGATE_CHILDREN با ریشهٔ صریح رد شد — ریشه سراسری است، پس جفت واقعی گرفت
۳.۶ ستون‌ها و جدول‌ها روی db_test هم ساخته شد دستی، چون db_test تاریخچهٔ جدا دارد
۳.۷ TenantSchemaCoverageTest سبز
۳.۸ TenantLookupInventoryTest سبز — repository جدید ثبت شد سبز بدون نیاز به ثبت تازه

۴. UI

# مورد وضعیت یادداشت
۴.۱ BranchesPage · BranchWorkingHoursPage · BranchRoomsPage
۴.۲ DataTable با skeleton و empty state فارسی
۴.۳ PageHeader با backTo روی زیرصفحه‌ها backTo + breadcrumb روی هر دو زیرصفحه
۴.۴ هر select با SearchableSelect — هیچ <select> بومی SearchableSelect برای منطقهٔ زمانی؛ هیچ <select> بومی
۴.۵ وضعیت لیست در URL با useUrlState جستجو و فیلتر وضعیت در URL
۴.۶ هیچ رنگ/شعاع/سایهٔ hard-code — همه از توکن همه از var(--…)
۴.۷ دارک‌مود و حالت فشرده بررسی شد اسکرین‌شات واقعی در دارک‌مود و حالت فشرده و موبایل (۳۹۰×۸۴۴) گرفته شد؛ ایرادی نماند · یادداشت قبلی: کد فقط از توکن استفاده می‌کند؛ بازبینی چشمی در مرورگر انجام نشد
۴.۸ RTL و موبایل بررسی شد اسکرین‌شات واقعی در دارک‌مود و حالت فشرده و موبایل (۳۹۰×۸۴۴) گرفته شد؛ ایرادی نماند · یادداشت قبلی: چیدمان flex/grid با wrap؛ بازبینی چشمی موبایل انجام نشد
۴.۹ هشدار UI: «هیچ شعبهٔ فعالی باقی نمی‌ماند» confirm + title روی تنها شعبهٔ فعال
۴.۱۰ مسیرها در App.tsx + ورودی در SettingsMenuPage سه مسیر + آیتم منو با MapPinIcon
۴.۱۱ مجوز موجود appointment_settings استفاده شد، نه مجوز تازه appointment_settings بازاستفاده شد

۵. تست

# مورد وضعیت یادداشت
۵.۱ WorkingHoursTest — هفت روز، end<=start، هم‌پوشانی، 0..1440، آرایهٔ خالی ۱۴ تست
۵ اتمی بودن: بازهٔ نامعتبر در روز ششم → ۴۲۲ و شش روز قبلی دست‌نخورده
۵ RoomCrudTest — جفت tenant مشتق، capacity=0 → ۴۲۲ ۱۲ تست
۵ آدرس/اتاق محیط دیگر → ۴۰۴ (نه ۴۰۳) هم شعبه و هم اتاق
۵.۵ BranchAddressFieldsTest — پیش‌فرض‌ها، timezone نامعتبر → ۴۲۲ ۱۰ تست شامل شمارش کوئری
۵ phpstan analyse src/Branch بدون خطا صفر خطا در src/Branch

۶. مستندات

# مورد وضعیت یادداشت
۶.۱ docs/api/branch.md + ثبت در docs/api/README.md JSON واقعی از curl روی ddev + ثبت در README
۶.۲ «شعبهٔ بدون ساعت کاری = تعریف‌نشده، نه همیشه‌باز» نوشته شد تسک ۰۳ رویش حساب می‌کند
۶.۳ «active در این فاز بی‌اثر بر اسلات» نوشته شد
۶.۴ docs/api/doctor.md — دو فیلد جدید در پاسخ ۹ endpoint آدرس doctor.md — تغییر additive روی ۹ اندپوینت
۶.۵ docs/architecture/tenancy.md جدول طبقه‌بندی به‌روز شد درسِ «ریشهٔ سراسری، فرزندِ محیط‌دار» + محدودیت chosen

۷. بازبینی پایانی

# مورد وضعیت یادداشت
۷.۱ هیچ 🔄 و بی‌دلیل نمانده بازبینی چشمی انجام شد
۷ bin/phpunit کامل سبز ۱۰۶۷ تست / ۲۹۷۴ assertion — صفر خطا
۷ --group=slot-mode-frozen سبز
۷ phpstan بدون خطای جدید (مقایسه با کامیت پیش از تسک) ۱۴ خطا قبل و بعد — هیچ‌کدام در فایل‌های این تسک
۷.۵ npx tsc --noEmit و yarn test سبز tsc صفر خطا · vitest ۸۷ فایل / ۶۱۲ تست
۷ TenantSchemaCoverageTest + TenantLookupInventoryTest سبز
۷.۷ docs/api/* به‌روز
۷ چک‌لیست UI کامل بازبینی چشمی انجام شد
۷ nobat724_front و clinic-pro-tauri بررسی شدند هر دو آدرس را مصرف می‌کنند (app/doctor/[slug]/page.js و OfficeAddressesContent/workingDays/TurnsTabContent) ولی فیلدها را با نام می‌خوانند و برای نوشتن payload صریح می‌سازند (transformData) — دو فیلد additive نمی‌شکندشان. هیچ اندپوینت جدیدی مصرف‌کننده ندارد
۷.۱۰ commit، سپس graphify update .، سپس commit جدا
۷.۱۱ موارد به‌تعویق با دلیل و تسک مقصد گاردِ حذف اتاق ← تسک ۰۲/۰۷ · گاردِ حذف آدرس ← تسک ۰۷ · اعمال active ← تسک ۰۳