یک حباب کوچک و شیشهای با فونت تکعرض در فوتر ستون کناری، کنار دکمهٔ خروج:
- `font-mono` — پشتهٔ فونتهای سیستمی (ui-monospace، SFMono، Menlo،
Consolas) که همیشه نصباند؛ پس نسخه روی هر دستگاه یکسان رندر میشود،
بدون انتظار برای وبفونت، و رقمها جابهجا نمیشوند.
- شیشهای با translucent و blur: `bg-white/5` + `border-white/10` +
`backdrop-blur-sm`. بدون gradient و بدون shadow، مطابق §12 پلن.
- `ltr-inline` تا الگوریتم bidi در پوستهٔ RTL رشتهٔ لاتین را جابهجا نکند،
و `tabular-nums` تا عرض numeralها ثابت بماند.
نسخه از `src/lib/version.ts` میآید — بهجای import کردن کل
`package.json` که کل manifest را برای یک رشته به باندل کلاینت میکشید.
هزینهٔ این انتخاب drift است، پس `version.test.tsx` میسنجد که با
`apps/web/package.json` یکی باشد.
تستهای جدید: ۵ (نسخه و نشان نسخه در پوسته).
- Adapter اکانتمحور با چرخش round-robin و بنچشدن خودکار روی ۴۲۹/۴۰۱
- ورود ادمین از طریق URL بازگشتی گوگل (PKCE) و ذخیرهٔ رمزنگاریشدهٔ refresh token
- صفحهٔ مدیریت اکانتهای agy در پنل ادمین به همراه تست و فعال/غیرفعالسازی
- مهاجرت Alembic b1c2d3e4f5a6 برای ستونهای اکانت agy
- seed همیشه کاتالوگ agy را میسازد و فقط با AI_DEFAULT_PROVIDER=agy مسیریابی میشود
چندین سطح تعاملی (منوی سازمان، منوی کاربر، لینکهای بردکرامب، آیتمهای
پالت فرمان، دکمهٔ ساخت سازمان، لینک ردیابی) رنگ را در hover یکباره
تغییر میدادند و بقیهٔ رابط نرم بود. اکنون همه یکسان transition
میگیرند.
واژگان مشترک حرکت در globals.css: شش @keyframes و شش کلاس .anim-*
بههمراه .anim-stagger برای ورود آبشاری. همهٔ مدتزمانها پشت custom
property هستند تا یک override کل اپ را تنظیم کند.
- packages/ui: Button، Card، Stat، Loading/Empty/ErrorState، UsageBar،
Timeline، Modal، Drawer، Table، ToastStack و ArtifactViewer
- ریشهٔ هر صفحهٔ (app) با .anim-stagger وارد میشود
- AppShell: محتوا fade، منوی کنار stagger، منوهای کشویی slide-up
- prefers-reduced-motion مدتزمانها را به ۰.۰۱ms میرساند تا
وضعیت پایانی حفظ شود
- قرارداد motion در src/test/motion.test.tsx تست میشود تا
بازنویسی بعدی آن را بیصدا حذف نکند
- تستهای فرانتاند: ۳۵ ← ۴۵
دو شکاف رسیدگیشده از بازبینی PLAN.md و TODO.md:
- پالت فرمان: جستوجو و رفتن سریع بین بخشها با ⌘K/Ctrl+K، پیمایش با
کلیدهای جهتدار، Enter برای رفتن، و Escape برای بستن. گروه اختصاصی
«کنسول مالک سامانه» فقط برای مالک سامانه نمایش داده میشود.
- صفحهٔ /admin/usage: گزارش مصرف سراسری به تفکیک سازمان. اندپوینت
`GET /admin/usage` و کلاینت `adminUsage()` از قبل وجود داشتند و توسط
صفحات نمای کلی و سازمانها مصرف میشدند؛ این صفحهٔ اختصاصی آن است.
همچنین `NAV_ITEMS` به `lib/nav.ts` منتقل شد تا sidebar و پالت فرمان
هرگز از هم واگرا نشوند.
تست: ۱۰ تست جدید برای پالت فرمان. مجموع تستهای فرانتاند از ۲۵ به ۳۵
رسید. tsc، eslint و ruff تمیز.
نام نمایشی و هویت اپلیکیشن در همهٔ سطوح کاربر-پسند از «AGY Web» به
«Smart Organization» تغییر کرد:
- UI: عنوان تب مرورگر، صفحهٔ ورود، برند و لوگوی پوستهٔ اپ (AG → SO)
- بکاند: مقدار پیشفرض app_name، نام و توضیح توزیع پایتون
- مانیفستها: package.json ریشه و چهار پکیج، pyproject.toml
- مستندات: README، PLAN، TODO و دو سند docs
شناسههای داخلی عمداً دستنخورده ماندهاند: scope پکیجهای @agy/*،
کلیدهای localStorage، نامهای logger، نام فایل پایگاهٔ داده، و اطلاعات
اتصال پایگاه داده در .env.example و infra/docker/docker-compose.yml.
مخزن اختصاصی برنامهٔ وب؛ محتوای پوشهٔ web در ریشهٔ مخزن قرار گرفت.
تاریخچهٔ پروژهٔ ربات (agy-bot) در این مخزن وجود ندارد و هیچ وابستگی runtime به آن نیست.