diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index 41284fd6..3f2022c3 100644 --- a/docs/ux-ui-external-acceptance.md +++ b/docs/ux-ui-external-acceptance.md @@ -1,6 +1,6 @@ # UX/UI: протокол внешней приёмки 12.5 -Статус на2026-10-07: основнойbackend4c12c55/frontend673e5ba развёрнуты,healthy иrealbrowser smoke passed. PG-1/2/5 иPG-3/4 принятывописанныхконтрольныхграницах; integratedPG-6 принятдляодногоisolatedbackend в12.5.17 (HTTP/UDP/scheduler/backgroundSQL/restore/restart),безкоординациидругихпроцессов. PG-7 ранееHTTP-RBAC,Portal/browserrestore ещёнеприняты. NativeTCPspeed ипервыйотказподключенияпройдены;остальнойROS/Q/интеграции открыты. [Паспорт](ux-ui-test-server.md),[журнал](ux-ui-progress.md). +Статус на2026-10-08: backend4c12c55/frontend673e5ba healthy; PG-1/2/3/4/5 принятывописанныхграницах,PG-6 integratedдляодногоisolatedinstance,PG-7 realJWT/processcounts иbrowserrestore200/errorguard12.5.18 passed. PortalSSO/мультиэкземпляры/PG-8/остальныеROS/Q/интеграции остаютсяоткрытыми. [Паспорт](ux-ui-test-server.md),[журнал](ux-ui-progress.md). ## Паспорт стенда @@ -105,3 +105,7 @@ BGP-prefix evaluator, отдельное live GRE расписание и recove ## IntegratedPG-6 иdeployment — 2026-10-07 [12.5.17](ux-ui/acceptance/integrated-pg6-2026-10-07.json) подтвердилsingle-instanceadmission/drainHTTP/UDP/scheduler/backgroundwrite,restore200 ивозобновлениеUDP. [Deployment](ux-ui/acceptance/deployed-4c12c55-2026-10-07.json) основнойbackend4c12c55healthy/контрольБДpassed,frontend673e5ba прежний. Multi-instance/Portal/browserrestore/остальныеинтеграции требуютпродолжения12.5.18. + +## RBAC иbrowser restore — 2026-10-08 + +12.5.18 [realJWT/processPG-7](ux-ui/acceptance/rbac-4c12c55-2026-10-08.json) и[browserrestore200/400/guard/reload](ux-ui/acceptance/browser-restore-2026-10-08.json) прошли. ИзоляцияfrontendпроверяласьмаркеромБД:runtimeURLoverride не менялbakedNextrewrites,поэтомуиспользованавременнаяотдельнаяDocker network/backendalias. Основнойстенднеизменён,temporarycontainers/network/tunnelудалены. PortalSSO/commit-loss/PG-8/остальныеинтеграции ещёнеприняты. diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index b0f33748..80d8a3e5 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -1,6 +1,6 @@ # План реализации UX/UI по пятичасовым окнам -Актуальное продолжение 2026-10-07:12.5.17 завершён — integratedPG-6 принятдляодногоisolatedbackend (HTTP/UDP/SQL/scheduler/background drain→restore→restart). Backend4c12c55 собран/развёрнутнаосновномтестовомстенде,healthy/контрольБД/3API200/browser3screens320px passed. Frontend673e5ba сохранён. Следующий12.5.18 — browser/RBAC restore иоставшиесясценариипротокола;12.5 остаётсяоткрытой. +Актуальное продолжение 2026-10-08:12.5.18 завершён — PG-7 realJWT401/403/нулевыеchildprocesses,adminbackup200; realbrowserrestore200/архивныйконтроль и400/файлсохранён/unknownguard/reload/явныйreset passed наотдельнойБД. Backend4c12c55/frontend673e5ba сохраняются,основнаяБДнеизменена. Следующий12.5.19 — PG-8 commit acknowledgement/speed persistence иоставшиесяnative/integration сценарии;12.5 открыта. Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-07. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат. diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index 5bf7bb49..9efe2c9c 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -1,6 +1,6 @@ # UX/UI: журнал реализации -Актуальное продолжение 2026-10-07:12.5.17 завершён — integratedPG-6 принятдляодногоisolatedbackend (HTTP/UDP/SQL/scheduler/background drain→restore→restart). Backend4c12c55 собран/развёрнутнаосновномтестовомстенде,healthy/контрольБД/3API200/browser3screens320px passed. Frontend673e5ba сохранён. Следующий12.5.18 — browser/RBAC restore иоставшиесясценариипротокола;12.5 остаётсяоткрытой. +Актуальное продолжение 2026-10-08:12.5.18 завершён — PG-7 realJWT401/403/нулевыеchildprocesses,adminbackup200; realbrowserrestore200/архивныйконтроль и400/файлсохранён/unknownguard/reload/явныйreset passed наотдельнойБД. Backend4c12c55/frontend673e5ba сохраняются,основнаяБДнеизменена. Следующий12.5.19 — PG-8 commit acknowledgement/speed persistence иоставшиесяnative/integration сценарии;12.5 открыта. Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md). @@ -34,6 +34,16 @@ | 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 | | 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в описанных границах:12.3.83,main1186/1186,context221/221. Этап остаётся в работе: стенд12.5.1–3 развёрнут,bootstrap/smoke проверены;остальные сценарии12.5 не выполнены. | +## 12.5.18 — реальные права backup/restore и сценарии восстановления в браузере (2026-10-08) + +Блокначат7октября,завершён8октября поAsia/Novosibirsk; отчётыдатированыподатеокончания. [PG-7 evidence](ux-ui/acceptance/rbac-4c12c55-2026-10-08.json): temporarycontainerсреальнымimageux-4c12c55, AUTH_REQUIRED=true,mmapp_acceptance_20261007. JWTтестовогоissuerсозданытольковпамяти, безPortalSSO. 16GETbackup/POSTrestore:anonymous/wrongissuer/expired/invalidsignature401;settingsreader/writer/trafficadmin/missingapp403. Instrumentation productionchild_process.spawn (безподменывыполнениякоманд) подтвердилаpg_dump0/pg_restore0/psql0длявсехотказов; контрольныеservers/retention/sequence/speed послеотказовсовпали. Adminmm:settings:adminbackup200/478183bytes/PGDMP запустилровноодиннастоящийpg_dump. ЭтоусиливаетпрежниеHTTP-onlyPG-7 проверкинаблюдениемпроцессов. + +[Real browser restore](ux-ui/acceptance/browser-restore-2026-10-08.json): temporaryfrontend673e5ba/backend4c12c55,localhost3018черезотдельныйSSHтуннель, AUTHfalseдляbrowserсценария,выделеннаяБД. Передлюбойwriteмаркерserver3/192.0.2.250/disabled проверен. Перваяпроверкаотказала:Next.jsrewrites bakedприbuildигнорировалruntimeBACKEND_INTERNAL_URL ивременныйfrontendчиталосновнуюБД. Guard остановилсценарийдополученияархива/изменениянастроек/restore. Временныйfrontendотсоединёнотmmapp-test_default иподключёнкmmapp-browser-only,гдеaliasbackendуказывалтольковременныйbackend; повторныймаркерподтвердилвыделеннуюБД. Основнойfrontend/router configurationне менялись. + +Backup478920bytesиспользовантольковпамятиNode/browser input,локальный.dumpнесохранён. Контрольretention14→19 сделанAPIввыделеннойБД. ЧерезнастоящийsettingsUI:выборфайла→Продолжить→подтверждение→restore200→подпись «База приложения восстановлена»; GETuptimesettings независимоподтвердилretention14. ЗатемPGDMP-invalid-fixture получил400:controlretention14сохранён,filenameвдиалогесохранён,unknowncaptionвиден,restoreкнопказаблокирована. Guardпережилreload, «Выбрать файл»disabled; послефактическойпроверкиcontrolнажато «Я проверил состояние — разрешить новый запрос»,кнопкавновьenabled. POSTstatusesровно[200,400],автоповторанет;0JSerrors,320px dialogfits. HTTP-моковнет. ЭтоbrowserPG-3/errorUX,неPortalSSO иневсеfailure/commit-lossварианты. + +Temporaryfrontend/backend/самостоятельныйRBACcontainerудалены--rm, privateDocker networkудалена, временныйтуннель3018закрыт. Основнойтуннель3000/8000/стендсохранены;backend4c12c55healthy,основнаяБДserver1–2/retention14безизменений,AUTHfalseкакдоэтогоблока. Продуктовыйкодне менялся. PG-7 иbrowserrestoreпринятывуказанныхграницах; полный12.5 ещёоткрыт. Следующий12.5.19 — PG-8 speedpersistence/потеряcommitacknowledgement иостальныеROS/Q/integrationсценарии. Локальныйкоммитбезpush. + ## 12.5.17 — общая проверка PG-6 и обновление backend тестового стенда (2026-10-07) [Integrated PG-6 evidence](ux-ui/acceptance/integrated-pg6-2026-10-07.json): source4c12c55, настоящееbuildApp/API/worker/PG18.6, temporarycontainer иmmapp_acceptance_20261007. SQLsettings temporarilyвключилиUDP4749 внутриконтейнера иlocalhostexporter map; CHR traffic-flow конфигурациянеизменялась. ArchiveполученреальнымGETbackup. ВодноминтервалезадержаныHTTPhandler, workerSQLчерезACCESS EXCLUSIVE lock settingstable иbackground SQLtask черезproductionregistry. diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index 516e01ee..6b8b05af 100644 --- a/docs/ux-ui-stage-12.md +++ b/docs/ux-ui-stage-12.md @@ -1,6 +1,6 @@ # Этап 12: итоговая приёмка UX/UI -Актуальное продолжение 2026-10-07:12.5.17 завершён — integratedPG-6 принятдляодногоisolatedbackend (HTTP/UDP/SQL/scheduler/background drain→restore→restart). Backend4c12c55 собран/развёрнутнаосновномтестовомстенде,healthy/контрольБД/3API200/browser3screens320px passed. Frontend673e5ba сохранён. Следующий12.5.18 — browser/RBAC restore иоставшиесясценариипротокола;12.5 остаётсяоткрытой. +Актуальное продолжение 2026-10-08:12.5.18 завершён — PG-7 realJWT401/403/нулевыеchildprocesses,adminbackup200; realbrowserrestore200/архивныйконтроль и400/файлсохранён/unknownguard/reload/явныйreset passed наотдельнойБД. Backend4c12c55/frontend673e5ba сохраняются,основнаяБДнеизменена. Следующий12.5.19 — PG-8 commit acknowledgement/speed persistence иоставшиесяnative/integration сценарии;12.5 открыта. План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push. @@ -1124,3 +1124,13 @@ Restore ждалHTTPhandler,новыеAPIGET409. ПослеHTTPcleanup UDPsocket ComposeдобавленoptionalBACKEND_IMAGE_TAG, которыйпереопределяеттолькоbackend; default сохраняетMMAPP_IMAGE_TAG. На стендеMMAPP_IMAGE_TAG=ux-673e5ba/BACKEND_IMAGE_TAG=ux-4c12c55: frontendнепересобирался,егоimage/revision673e5ba прежние. ComposeSHA3052bd6ab5d9865f97605cebfb5ff27a4410cd3357b81153a65a87fb7c92582f совпаллокально/насервере,config--quiet passed. AUTH_REQUIREDfalse/SSH-only ports сохранены. Backendhealthy,health/APIauthconfig/servers/speed-test-runs200. Первыйsmoke ошибочноиспользовал/uptime/speed/history404; correctedcanonical/uptime/speed-test/runs200,продуктовогодефектаздесьнет. [Real browser smoke](ux-ui/acceptance/deploy-browser-4c12c55-2026-10-07.json): dashboard/servers/filters200,320px fits,0JSerrors/0API>=400,HTTP-моковнет. RestoreосновнойБД не выполнялся;разрушающиесценарииоставалисьввыделеннойБД. Полныйпротоколещёоткрыт:Portal/browserrestore flow,остальныеnative/network/integrations иmulti-instanceконтрольнеприняты. Следующий12.5.18 — browser/RBACrestore иоставшиесясценарии. Локальныйкоммитбезpush. + +## 12.5.18 — реальные права backup/restore и сценарии восстановления в браузере (2026-10-08) + +Блокначат7октября,завершён8октября поAsia/Novosibirsk; отчётыдатированыподатеокончания. [PG-7 evidence](ux-ui/acceptance/rbac-4c12c55-2026-10-08.json): temporarycontainerсреальнымimageux-4c12c55, AUTH_REQUIRED=true,mmapp_acceptance_20261007. JWTтестовогоissuerсозданытольковпамяти, безPortalSSO. 16GETbackup/POSTrestore:anonymous/wrongissuer/expired/invalidsignature401;settingsreader/writer/trafficadmin/missingapp403. Instrumentation productionchild_process.spawn (безподменывыполнениякоманд) подтвердилаpg_dump0/pg_restore0/psql0длявсехотказов; контрольныеservers/retention/sequence/speed послеотказовсовпали. Adminmm:settings:adminbackup200/478183bytes/PGDMP запустилровноодиннастоящийpg_dump. ЭтоусиливаетпрежниеHTTP-onlyPG-7 проверкинаблюдениемпроцессов. + +[Real browser restore](ux-ui/acceptance/browser-restore-2026-10-08.json): temporaryfrontend673e5ba/backend4c12c55,localhost3018черезотдельныйSSHтуннель, AUTHfalseдляbrowserсценария,выделеннаяБД. Передлюбойwriteмаркерserver3/192.0.2.250/disabled проверен. Перваяпроверкаотказала:Next.jsrewrites bakedприbuildигнорировалruntimeBACKEND_INTERNAL_URL ивременныйfrontendчиталосновнуюБД. Guard остановилсценарийдополученияархива/изменениянастроек/restore. Временныйfrontendотсоединёнотmmapp-test_default иподключёнкmmapp-browser-only,гдеaliasbackendуказывалтольковременныйbackend; повторныймаркерподтвердилвыделеннуюБД. Основнойfrontend/router configurationне менялись. + +Backup478920bytesиспользовантольковпамятиNode/browser input,локальный.dumpнесохранён. Контрольretention14→19 сделанAPIввыделеннойБД. ЧерезнастоящийsettingsUI:выборфайла→Продолжить→подтверждение→restore200→подпись «База приложения восстановлена»; GETuptimesettings независимоподтвердилretention14. ЗатемPGDMP-invalid-fixture получил400:controlretention14сохранён,filenameвдиалогесохранён,unknowncaptionвиден,restoreкнопказаблокирована. Guardпережилreload, «Выбрать файл»disabled; послефактическойпроверкиcontrolнажато «Я проверил состояние — разрешить новый запрос»,кнопкавновьenabled. POSTstatusesровно[200,400],автоповторанет;0JSerrors,320px dialogfits. HTTP-моковнет. ЭтоbrowserPG-3/errorUX,неPortalSSO иневсеfailure/commit-lossварианты. + +Temporaryfrontend/backend/самостоятельныйRBACcontainerудалены--rm, privateDocker networkудалена, временныйтуннель3018закрыт. Основнойтуннель3000/8000/стендсохранены;backend4c12c55healthy,основнаяБДserver1–2/retention14безизменений,AUTHfalseкакдоэтогоблока. Продуктовыйкодне менялся. PG-7 иbrowserrestoreпринятывуказанныхграницах; полный12.5 ещёоткрыт. Следующий12.5.19 — PG-8 speedpersistence/потеряcommitacknowledgement иостальныеROS/Q/integrationсценарии. Локальныйкоммитбезpush. diff --git a/docs/ux-ui-test-server.md b/docs/ux-ui-test-server.md index b5ca30ee..9a356577 100644 --- a/docs/ux-ui-test-server.md +++ b/docs/ux-ui-test-server.md @@ -113,3 +113,7 @@ ssh -N -L 3000:127.0.0.1:3000 -L 8000:127.0.0.1:8000 root@161.104.46.222 ## Обновление backend иPG-6 — 2026-10-07 12.5.17 [integratedquiescence/restore/restart](ux-ui/acceptance/integrated-pg6-2026-10-07.json) passedдляодногоisolatedbackend. [Основнойbackend4c12c55](ux-ui/acceptance/deployed-4c12c55-2026-10-07.json) собран/развёрнут,healthy/sourcefullrevision/version1.0.0-test.4c12c55. Frontend673e5ba прежний. BACKEND_IMAGE_TAG=ux-4c12c55,MMAPP_IMAGE_TAG=ux-673e5ba. Приватныйpre-updatebackup вdata/acceptance-private,контрольосновнойБДserver1–2/retention14/9миграций совпал. [3realbrowser screens](ux-ui/acceptance/deploy-browser-4c12c55-2026-10-07.json) 200/320fits/безJS/APIerrors. Полный12.5 иmulti-instanceприёмкаещёоткрыты. + +## RealRBAC иbrowserrestore — 2026-10-08 + +12.5.18 [RBAC16denials/childprocess0/adminbackup200](ux-ui/acceptance/rbac-4c12c55-2026-10-08.json),[browserrestore200/архивныйcontrol/400guardreload](ux-ui/acceptance/browser-restore-2026-10-08.json) passedнавыделеннойБД. Временныеfrontend/backend использовалиизолированнуюDocker network,посколькуNextrewritesфиксированыприbuild; guardпредотвратилwritesприошибкемаршрутизации. Temporarycontainers/network/3018tunnelудалены,основнойbackend4c12c55/frontend673e5ba/server1–2/retention14/AUTHfalse сохранены. PortalSSO иполный12.5 ещёоткрыты. diff --git a/docs/ux-ui/acceptance/browser-restore-2026-10-08.json b/docs/ux-ui/acceptance/browser-restore-2026-10-08.json new file mode 100644 index 00000000..62ec0842 --- /dev/null +++ b/docs/ux-ui/acceptance/browser-restore-2026-10-08.json @@ -0,0 +1,37 @@ +{ + "date": "2026-10-08", + "backendSource": "4c12c55", + "frontendSource": "673e5ba", + "database": "mmapp_acceptance_20261007", + "base": "http://localhost:3018", + "mocks": false, + "archiveBytes": 478920, + "success": { + "status": 200, + "retentionRestored": 14, + "confirmedCaption": true + }, + "failure": { + "status": 400, + "retentionUnchanged": 14, + "filePreserved": true, + "unknownCaption": true, + "restoreDisabled": true, + "guardSurvivedReload": true, + "explicitResetEnabled": true, + "noAutomaticRetry": true, + "mobileFits": true + }, + "restoreStatuses": [ + 200, + 400 + ], + "pageErrors": [], + "limits": [ + "Auth false for isolated browser stand; JWT RBAC tested separately", + "Archive used only in memory, no local dump file saved", + "Main database not restored; real Portal SSO not tested" + ], + "startedClientDate": "2026-10-07", + "isolationCorrection": "Initial DB marker guard stopped before archive/download/mutation/restore; build-time Next.js rewrites ignored runtime URL override. Temporary frontend moved to private Docker network with backend alias, marker verified, tests then passed." +} \ No newline at end of file diff --git a/docs/ux-ui/acceptance/rbac-4c12c55-2026-10-08.json b/docs/ux-ui/acceptance/rbac-4c12c55-2026-10-08.json new file mode 100644 index 00000000..3613c96d --- /dev/null +++ b/docs/ux-ui/acceptance/rbac-4c12c55-2026-10-08.json @@ -0,0 +1,140 @@ +{ + "date": "2026-10-08", + "source": "4c12c55", + "database": "mmapp_acceptance_20261007", + "authRequired": true, + "realChildProcesses": true, + "denials": [ + { + "label": "anonymous", + "method": "GET", + "path": "backup", + "status": 401 + }, + { + "label": "anonymous", + "method": "POST", + "path": "restore", + "status": 401 + }, + { + "label": "settings-reader", + "method": "GET", + "path": "backup", + "status": 403 + }, + { + "label": "settings-reader", + "method": "POST", + "path": "restore", + "status": 403 + }, + { + "label": "settings-writer", + "method": "GET", + "path": "backup", + "status": 403 + }, + { + "label": "settings-writer", + "method": "POST", + "path": "restore", + "status": 403 + }, + { + "label": "traffic-admin", + "method": "GET", + "path": "backup", + "status": 403 + }, + { + "label": "traffic-admin", + "method": "POST", + "path": "restore", + "status": 403 + }, + { + "label": "missing-app", + "method": "GET", + "path": "backup", + "status": 403 + }, + { + "label": "missing-app", + "method": "POST", + "path": "restore", + "status": 403 + }, + { + "label": "wrong-issuer", + "method": "GET", + "path": "backup", + "status": 401 + }, + { + "label": "wrong-issuer", + "method": "POST", + "path": "restore", + "status": 401 + }, + { + "label": "expired", + "method": "GET", + "path": "backup", + "status": 401 + }, + { + "label": "expired", + "method": "POST", + "path": "restore", + "status": 401 + }, + { + "label": "invalid-signature", + "method": "GET", + "path": "backup", + "status": 401 + }, + { + "label": "invalid-signature", + "method": "POST", + "path": "restore", + "status": 401 + } + ], + "mainDatabaseTouched": false, + "deniedChildProcessCounts": { + "pg_dump": 0, + "pg_restore": 0, + "psql": 0 + }, + "deniedControlsUnchanged": true, + "adminBackup": { + "status": 200, + "bytes": 478183, + "childProcessCounts": { + "pg_dump": 1, + "pg_restore": 0, + "psql": 0 + } + }, + "limits": [ + "JWT generated only in memory with configured test issuer; real Portal SSO not tested", + "No browser restore UI and no successful admin restore in this RBAC block", + "Instrumentation observes production child_process.spawn without replacing command execution" + ], + "healthMainAfter": { + "status": "ok", + "timestamp": "2026-10-07T17:00:26.577Z", + "version": "1.0.0-test.4c12c55", + "eventLoopDelayMs": 20, + "flowWorker": { + "alive": false, + "bound": false, + "pendingSize": 0, + "dropped": 0, + "packetsReceived": 0 + } + }, + "startedClientDate": "2026-10-07" +} \ No newline at end of file