chore(test): зафиксировать выпуск сертификата и препятствие продлению

This commit is contained in:
Denozordec committed 2026-10-14 21:43:57 +07:00
1 parent 37a9c828d3
commit e78bc2d7cb
11 files changed
+229 -9

No files matched your search

+17 -1
View File
@@ -1,6 +1,6 @@
# UX/UI: протокол внешней приёмки 12.5
Актуальное продолжение 2026-10-14: 253 — подготовлена реальная приёмка renewal для exact mmt253-8e62a941.pngs.top на CHR104, read-only DNS empty/оба REST200. TLS/native SHA-256 comparator: positive и11 false-success отказов passed, syntax/lint passed. Никаких выдач/изменений253 не запускали. Runtime backend ux-certificates252/frontend ux-certificates251. Далее согласовать два выпуска/renewal с назначением SSL и полным откатом по deploy/TEST-ACME.md; этап12.5 открыт.
Актуальное продолжение 2026-10-14: 254 — разрешённый первый выпуск exact mmt253-8e62a941.pngs.top выполнен через UI, native leaf/private-key совпал с доверенным TLS SHA-256. Renewal не запускался: RouterOS даты без timezone дают canonical unknown/null; guard252 сохранён. Полный own cleanup/DNS0/SQL settings/native stable export подтверждён, оба CHR доступны. Backend252/frontend251 сохранены. Следующий255 — корректное определение времени native сертификата без угадывания timezone, затем реальный renewal по сохранённому разрешению. Этап12.5 открыт.
IPsec78: реальный PSK responder established, mode-config198.18.78.10 и online=true подтверждены API; точные собственные объекты удалены. Сертификатный/DN online, late failure и history restore остаются открытыми. [Отчёт](ux-ui/acceptance/ipsec-mode-config-2026-10-09.json), [журнал](ux-ui-progress.md).
@@ -18,6 +18,22 @@ OSPF84: real GRE Full adjacency/private routes/Ping3/3 и4 live PC/320px URL/bro
BFD85: Up/Full/own route/Ping,4 live UI и loss/withdrawal/recovery приняты; exact own cleanup8 коллекций×2 passed. Withdrawal5,245ms не подтверждает sub-second BFD timing; этот вопрос открыт. Runtime routing83 без новой сборки. [Отчёт](ux-ui/acceptance/ospf-bfd-loss-2026-10-09.json).
## 12.5.254 — реальный выпуск и выявленное препятствие renewal (2026-10-14)
Пользователь разрешил first issue + scheduler renewal + полный откат для exact mmt253-8e62a941.pngs.top на CHR104. Сняты свежие приватные native/SQL baselines: сертификаты0, issue jobs0, CF token отсутствует. Renewal временно выключен штатным API. Token/zone/account проверены200; один UI POST с сохранённым requestId → terminal done/stepdone, UI завершение и JS errors0. [UI](ux-ui/acceptance/acme254-live-ui.json).
Native leaf exact name/private-key=true, SHA-256 89b6bd15857aaa548a26137fed6378aa2750440565ba0516240ff22e3a5e7e91. Acceptance helper сделал доверенный TLS к104:443 с SNI, rejectUnauthorized=true: hostname/private-key metadata/native fingerprint совпали с served leaf. [TLS before](ux-ui/acceptance/acme254-tls-before.json). Это первый выпуск, не подтверждение смены leaf после renewal.
Препятствие из реального state: native invalid-before=2026-10-14 15:37:47 и invalid-after=2027-01-12 15:37:46 без timezone. Канонический parser принимает offset-qualified datetime, поэтому validFrom/validUntil/daysLeft=null и statusunknown. По процедуре253 второй order не запускался, порог90/enable/run-now не применялись; unknown guard252 не обходился и время устройства не менялось. [Renewal limitation](ux-ui/acceptance/acme254-renewal.json). Следующий255 — определить корректную семантику native времени/публичного X509 без предположения о timezone и только затем повторить реальный scheduler renewal в рамках уже данного разрешения.
Откат: www-ssl/api-ssl исходные поля восстановлены, own certificates/PEM files/job удалены. TXT приложение очистило; собственная A удалена по exact name/type/content/ID; оба имени DNS0. [DNS](ux-ui/acceptance/acme254-cloudflare.json). ACME/renew settings восстановлены полностью; scheduler refresh применил исходное enabled/interval, после его пустого run metadata восстановлена ещё раз и exact SQL comparison passed. Секреты/private baselines/restore SQL удалены с Debian и локальный token fixture удалён. Historical event приложения/публичная CA запись не объявляются отозванными.
Native первый strict whole-collection assertion остановился на volatile metadata, а не неполном удалении: flash directory last-modified изменился при записи собственных файлов, /ip/service включает dynamic connections. Повтор только read-only сравнил exact configured services, file IDs/name/type/size и certificates; исключены directory mtime и dynamic connections, normalized full export совпал. [Native](ux-ui/acceptance/acme254-native.json). Один контрольный REST read вернул401, следующий read resource/certificate/file/services200 со старым паролем; Portal после cleanup оба устройства читает без ошибок. Не делаем вывод о смене пароля из transient401.
Дополнительная read-only калибровка254: system/clock Europe/Warsaw, gmt-offset +02:00, autodetect=true. Доверенный X509 before=13:37:47Z и until=13:37:46Z; оба native timestamps15:37 соответствуют текущему +02:00, включая будущий январский expiry. Поэтому нельзя просто дописать Z или применить исторический/будущий Warsaw offset +01:00 к январскому endpoint. Нужен явно наблюдаемый offset и проверка его стабильности вместе с чтением native дат; при неизвестном/сменившемся offset сохранять null. Это доказано для конкретного CHR7.24.5, не для всех версий RouterOS.
Production source/images не менялись, backend ux-certificates252/frontend ux-certificates251; rebuild/regression не повторялись. Продление и замена leaf ещё не приняты; ограничения описаны без объявления failed/blocked теста успешным.
## 12.5.253 — подготовка проверки реальной замены сертификата при renewal (2026-10-14)
Подготовлен exact mmt253-8e62a941.pngs.top/certName mmt253-8e62a941 на CHR104/server2. Read-only preflight с Debian: точный FQDN и challenge name имеют0 Cloudflare records, оба CHR REST200 с прежними паролями. Ни DNS/settings/native writes, ни ACME orders не выполнялись. Это не свежий приватный baseline для будущей мутации: его нужно снять непосредственно перед запуском.
+17 -1
View File
@@ -1,9 +1,25 @@
# План реализации UX/UI по пятичасовым окнам
Актуальное продолжение 2026-10-14: 253 — подготовлена реальная приёмка renewal для exact mmt253-8e62a941.pngs.top на CHR104, read-only DNS empty/оба REST200. TLS/native SHA-256 comparator: positive и11 false-success отказов passed, syntax/lint passed. Никаких выдач/изменений253 не запускали. Runtime backend ux-certificates252/frontend ux-certificates251. Далее согласовать два выпуска/renewal с назначением SSL и полным откатом по deploy/TEST-ACME.md; этап12.5 открыт.
Актуальное продолжение 2026-10-14: 254 — разрешённый первый выпуск exact mmt253-8e62a941.pngs.top выполнен через UI, native leaf/private-key совпал с доверенным TLS SHA-256. Renewal не запускался: RouterOS даты без timezone дают canonical unknown/null; guard252 сохранён. Полный own cleanup/DNS0/SQL settings/native stable export подтверждён, оба CHR доступны. Backend252/frontend251 сохранены. Следующий255 — корректное определение времени native сертификата без угадывания timezone, затем реальный renewal по сохранённому разрешению. Этап12.5 открыт.
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-14. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
## 12.5.254 — реальный выпуск и выявленное препятствие renewal (2026-10-14)
Пользователь разрешил first issue + scheduler renewal + полный откат для exact mmt253-8e62a941.pngs.top на CHR104. Сняты свежие приватные native/SQL baselines: сертификаты0, issue jobs0, CF token отсутствует. Renewal временно выключен штатным API. Token/zone/account проверены200; один UI POST с сохранённым requestId → terminal done/stepdone, UI завершение и JS errors0. [UI](ux-ui/acceptance/acme254-live-ui.json).
Native leaf exact name/private-key=true, SHA-256 89b6bd15857aaa548a26137fed6378aa2750440565ba0516240ff22e3a5e7e91. Acceptance helper сделал доверенный TLS к104:443 с SNI, rejectUnauthorized=true: hostname/private-key metadata/native fingerprint совпали с served leaf. [TLS before](ux-ui/acceptance/acme254-tls-before.json). Это первый выпуск, не подтверждение смены leaf после renewal.
Препятствие из реального state: native invalid-before=2026-10-14 15:37:47 и invalid-after=2027-01-12 15:37:46 без timezone. Канонический parser принимает offset-qualified datetime, поэтому validFrom/validUntil/daysLeft=null и statusunknown. По процедуре253 второй order не запускался, порог90/enable/run-now не применялись; unknown guard252 не обходился и время устройства не менялось. [Renewal limitation](ux-ui/acceptance/acme254-renewal.json). Следующий255 — определить корректную семантику native времени/публичного X509 без предположения о timezone и только затем повторить реальный scheduler renewal в рамках уже данного разрешения.
Откат: www-ssl/api-ssl исходные поля восстановлены, own certificates/PEM files/job удалены. TXT приложение очистило; собственная A удалена по exact name/type/content/ID; оба имени DNS0. [DNS](ux-ui/acceptance/acme254-cloudflare.json). ACME/renew settings восстановлены полностью; scheduler refresh применил исходное enabled/interval, после его пустого run metadata восстановлена ещё раз и exact SQL comparison passed. Секреты/private baselines/restore SQL удалены с Debian и локальный token fixture удалён. Historical event приложения/публичная CA запись не объявляются отозванными.
Native первый strict whole-collection assertion остановился на volatile metadata, а не неполном удалении: flash directory last-modified изменился при записи собственных файлов, /ip/service включает dynamic connections. Повтор только read-only сравнил exact configured services, file IDs/name/type/size и certificates; исключены directory mtime и dynamic connections, normalized full export совпал. [Native](ux-ui/acceptance/acme254-native.json). Один контрольный REST read вернул401, следующий read resource/certificate/file/services200 со старым паролем; Portal после cleanup оба устройства читает без ошибок. Не делаем вывод о смене пароля из transient401.
Дополнительная read-only калибровка254: system/clock Europe/Warsaw, gmt-offset +02:00, autodetect=true. Доверенный X509 before=13:37:47Z и until=13:37:46Z; оба native timestamps15:37 соответствуют текущему +02:00, включая будущий январский expiry. Поэтому нельзя просто дописать Z или применить исторический/будущий Warsaw offset +01:00 к январскому endpoint. Нужен явно наблюдаемый offset и проверка его стабильности вместе с чтением native дат; при неизвестном/сменившемся offset сохранять null. Это доказано для конкретного CHR7.24.5, не для всех версий RouterOS.
Production source/images не менялись, backend ux-certificates252/frontend ux-certificates251; rebuild/regression не повторялись. Продление и замена leaf ещё не приняты; ограничения описаны без объявления failed/blocked теста успешным.
## 12.5.253 — подготовка проверки реальной замены сертификата при renewal (2026-10-14)
Подготовлен exact mmt253-8e62a941.pngs.top/certName mmt253-8e62a941 на CHR104/server2. Read-only preflight с Debian: точный FQDN и challenge name имеют0 Cloudflare records, оба CHR REST200 с прежними паролями. Ни DNS/settings/native writes, ни ACME orders не выполнялись. Это не свежий приватный baseline для будущей мутации: его нужно снять непосредственно перед запуском.
+18 -2
View File
@@ -1,6 +1,6 @@
# UX/UI: журнал реализации
Актуальное продолжение 2026-10-14: 253 — подготовлена реальная приёмка renewal для exact mmt253-8e62a941.pngs.top на CHR104, read-only DNS empty/оба REST200. TLS/native SHA-256 comparator: positive и11 false-success отказов passed, syntax/lint passed. Никаких выдач/изменений253 не запускали. Runtime backend ux-certificates252/frontend ux-certificates251. Далее согласовать два выпуска/renewal с назначением SSL и полным откатом по deploy/TEST-ACME.md; этап12.5 открыт.
Актуальное продолжение 2026-10-14: 254 — разрешённый первый выпуск exact mmt253-8e62a941.pngs.top выполнен через UI, native leaf/private-key совпал с доверенным TLS SHA-256. Renewal не запускался: RouterOS даты без timezone дают canonical unknown/null; guard252 сохранён. Полный own cleanup/DNS0/SQL settings/native stable export подтверждён, оба CHR доступны. Backend252/frontend251 сохранены. Следующий255 — корректное определение времени native сертификата без угадывания timezone, затем реальный renewal по сохранённому разрешению. Этап12.5 открыт.
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
@@ -36,7 +36,23 @@
| 10 | Маршрутизация, диагностика, карта и терминал | Завершён в границах локальной приёмки 2026-10-01; блоки 10.1–10.71, внешние ограничения в 10.71 |
| 11А | Пользователи, контейнеры, сертификаты и резервные копии | Завершён в границах локальной приёмки 2026-10-01; 11А.1–11А.33, внешние ограничения в 11А.33 |
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная12.3.83; внешняя12.5 открыта, завершённые блоки1–253 (253 — подготовка) в записанных scopes. Runtime backend ux-certificates252/frontend ux-certificates251. Общая регрессия249 и профиль сертификатов252 прошли; реальный renewal остаётся открытым. |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная12.3.83; внешняя12.5 открыта, блоки1–254 в записанных scopes (254 — renewal остановлен на unknown dates) в записанных scopes. Runtime backend ux-certificates252/frontend ux-certificates251. Общая регрессия249 и профиль сертификатов252 прошли; реальный renewal остаётся открытым. |
## 12.5.254 — реальный выпуск и выявленное препятствие renewal (2026-10-14)
Пользователь разрешил first issue + scheduler renewal + полный откат для exact mmt253-8e62a941.pngs.top на CHR104. Сняты свежие приватные native/SQL baselines: сертификаты0, issue jobs0, CF token отсутствует. Renewal временно выключен штатным API. Token/zone/account проверены200; один UI POST с сохранённым requestId → terminal done/stepdone, UI завершение и JS errors0. [UI](ux-ui/acceptance/acme254-live-ui.json).
Native leaf exact name/private-key=true, SHA-256 89b6bd15857aaa548a26137fed6378aa2750440565ba0516240ff22e3a5e7e91. Acceptance helper сделал доверенный TLS к104:443 с SNI, rejectUnauthorized=true: hostname/private-key metadata/native fingerprint совпали с served leaf. [TLS before](ux-ui/acceptance/acme254-tls-before.json). Это первый выпуск, не подтверждение смены leaf после renewal.
Препятствие из реального state: native invalid-before=2026-10-14 15:37:47 и invalid-after=2027-01-12 15:37:46 без timezone. Канонический parser принимает offset-qualified datetime, поэтому validFrom/validUntil/daysLeft=null и statusunknown. По процедуре253 второй order не запускался, порог90/enable/run-now не применялись; unknown guard252 не обходился и время устройства не менялось. [Renewal limitation](ux-ui/acceptance/acme254-renewal.json). Следующий255 — определить корректную семантику native времени/публичного X509 без предположения о timezone и только затем повторить реальный scheduler renewal в рамках уже данного разрешения.
Откат: www-ssl/api-ssl исходные поля восстановлены, own certificates/PEM files/job удалены. TXT приложение очистило; собственная A удалена по exact name/type/content/ID; оба имени DNS0. [DNS](ux-ui/acceptance/acme254-cloudflare.json). ACME/renew settings восстановлены полностью; scheduler refresh применил исходное enabled/interval, после его пустого run metadata восстановлена ещё раз и exact SQL comparison passed. Секреты/private baselines/restore SQL удалены с Debian и локальный token fixture удалён. Historical event приложения/публичная CA запись не объявляются отозванными.
Native первый strict whole-collection assertion остановился на volatile metadata, а не неполном удалении: flash directory last-modified изменился при записи собственных файлов, /ip/service включает dynamic connections. Повтор только read-only сравнил exact configured services, file IDs/name/type/size и certificates; исключены directory mtime и dynamic connections, normalized full export совпал. [Native](ux-ui/acceptance/acme254-native.json). Один контрольный REST read вернул401, следующий read resource/certificate/file/services200 со старым паролем; Portal после cleanup оба устройства читает без ошибок. Не делаем вывод о смене пароля из transient401.
Дополнительная read-only калибровка254: system/clock Europe/Warsaw, gmt-offset +02:00, autodetect=true. Доверенный X509 before=13:37:47Z и until=13:37:46Z; оба native timestamps15:37 соответствуют текущему +02:00, включая будущий январский expiry. Поэтому нельзя просто дописать Z или применить исторический/будущий Warsaw offset +01:00 к январскому endpoint. Нужен явно наблюдаемый offset и проверка его стабильности вместе с чтением native дат; при неизвестном/сменившемся offset сохранять null. Это доказано для конкретного CHR7.24.5, не для всех версий RouterOS.
Production source/images не менялись, backend ux-certificates252/frontend ux-certificates251; rebuild/regression не повторялись. Продление и замена leaf ещё не приняты; ограничения описаны без объявления failed/blocked теста успешным.
## 12.5.253 — подготовка проверки реальной замены сертификата при renewal (2026-10-14)
+19 -3
View File
@@ -1,11 +1,27 @@
# Оставшаяся внешняя приёмка — 2026-10-14
Актуальное продолжение 2026-10-14: 253 — подготовлена реальная приёмка renewal для exact mmt253-8e62a941.pngs.top на CHR104, read-only DNS empty/оба REST200. TLS/native SHA-256 comparator: positive и11 false-success отказов passed, syntax/lint passed. Никаких выдач/изменений253 не запускали. Runtime backend ux-certificates252/frontend ux-certificates251. Далее согласовать два выпуска/renewal с назначением SSL и полным откатом по deploy/TEST-ACME.md; этап12.5 открыт.
Актуальное продолжение 2026-10-14: 254 — разрешённый первый выпуск exact mmt253-8e62a941.pngs.top выполнен через UI, native leaf/private-key совпал с доверенным TLS SHA-256. Renewal не запускался: RouterOS даты без timezone дают canonical unknown/null; guard252 сохранён. Полный own cleanup/DNS0/SQL settings/native stable export подтверждён, оба CHR доступны. Backend252/frontend251 сохранены. Следующий255 — корректное определение времени native сертификата без угадывания timezone, затем реальный renewal по сохранённому разрешению. Этап12.5 открыт.
Это актуальная матрица после 12.5.253. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
Это актуальная матрица после 12.5.254. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-certificates252`, frontend `ux-certificates251`; production lab с195 использует AUTH_REQUIRED=true и Portal1.3.1. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись.
## 12.5.254 — реальный выпуск и выявленное препятствие renewal (2026-10-14)
Пользователь разрешил first issue + scheduler renewal + полный откат для exact mmt253-8e62a941.pngs.top на CHR104. Сняты свежие приватные native/SQL baselines: сертификаты0, issue jobs0, CF token отсутствует. Renewal временно выключен штатным API. Token/zone/account проверены200; один UI POST с сохранённым requestId → terminal done/stepdone, UI завершение и JS errors0. [UI](ux-ui/acceptance/acme254-live-ui.json).
Native leaf exact name/private-key=true, SHA-256 89b6bd15857aaa548a26137fed6378aa2750440565ba0516240ff22e3a5e7e91. Acceptance helper сделал доверенный TLS к104:443 с SNI, rejectUnauthorized=true: hostname/private-key metadata/native fingerprint совпали с served leaf. [TLS before](ux-ui/acceptance/acme254-tls-before.json). Это первый выпуск, не подтверждение смены leaf после renewal.
Препятствие из реального state: native invalid-before=2026-10-14 15:37:47 и invalid-after=2027-01-12 15:37:46 без timezone. Канонический parser принимает offset-qualified datetime, поэтому validFrom/validUntil/daysLeft=null и statusunknown. По процедуре253 второй order не запускался, порог90/enable/run-now не применялись; unknown guard252 не обходился и время устройства не менялось. [Renewal limitation](ux-ui/acceptance/acme254-renewal.json). Следующий255 — определить корректную семантику native времени/публичного X509 без предположения о timezone и только затем повторить реальный scheduler renewal в рамках уже данного разрешения.
Откат: www-ssl/api-ssl исходные поля восстановлены, own certificates/PEM files/job удалены. TXT приложение очистило; собственная A удалена по exact name/type/content/ID; оба имени DNS0. [DNS](ux-ui/acceptance/acme254-cloudflare.json). ACME/renew settings восстановлены полностью; scheduler refresh применил исходное enabled/interval, после его пустого run metadata восстановлена ещё раз и exact SQL comparison passed. Секреты/private baselines/restore SQL удалены с Debian и локальный token fixture удалён. Historical event приложения/публичная CA запись не объявляются отозванными.
Native первый strict whole-collection assertion остановился на volatile metadata, а не неполном удалении: flash directory last-modified изменился при записи собственных файлов, /ip/service включает dynamic connections. Повтор только read-only сравнил exact configured services, file IDs/name/type/size и certificates; исключены directory mtime и dynamic connections, normalized full export совпал. [Native](ux-ui/acceptance/acme254-native.json). Один контрольный REST read вернул401, следующий read resource/certificate/file/services200 со старым паролем; Portal после cleanup оба устройства читает без ошибок. Не делаем вывод о смене пароля из transient401.
Дополнительная read-only калибровка254: system/clock Europe/Warsaw, gmt-offset +02:00, autodetect=true. Доверенный X509 before=13:37:47Z и until=13:37:46Z; оба native timestamps15:37 соответствуют текущему +02:00, включая будущий январский expiry. Поэтому нельзя просто дописать Z или применить исторический/будущий Warsaw offset +01:00 к январскому endpoint. Нужен явно наблюдаемый offset и проверка его стабильности вместе с чтением native дат; при неизвестном/сменившемся offset сохранять null. Это доказано для конкретного CHR7.24.5, не для всех версий RouterOS.
Production source/images не менялись, backend ux-certificates252/frontend ux-certificates251; rebuild/regression не повторялись. Продление и замена leaf ещё не приняты; ограничения описаны без объявления failed/blocked теста успешным.
## 12.5.253 — подготовка проверки реальной замены сертификата при renewal (2026-10-14)
Подготовлен exact mmt253-8e62a941.pngs.top/certName mmt253-8e62a941 на CHR104/server2. Read-only preflight с Debian: точный FQDN и challenge name имеют0 Cloudflare records, оба CHR REST200 с прежними паролями. Ни DNS/settings/native writes, ни ACME orders не выполнялись. Это не свежий приватный baseline для будущей мутации: его нужно снять непосредственно перед запуском.
@@ -266,7 +282,7 @@ Portal offline JWT действует доexp после logout/role change; э
## Следующая последовательность — 2026-10-14
1. **Сертификаты254:** подготовка253 завершена; согласовать и выполнить first issuance + scheduler renewal exact mmt253-8e62a941.pngs.top с native/TLS fingerprint и откатом. Реальный renewal пока не принят. CA revoke/remote publishing/multi-instance — отдельные scopes.
1. **Сертификаты255:** устранить неизвестные native dates без угадывания timezone; повторить first issuance + scheduler renewal/fingerprint по разрешению254, с новым baseline и полным откатом. Первый выпуск254/TLS приняты, renewal не запускался.
2. **Профильный контроль:** для новых изменений выполнять затронутые SQL/API/UI проверки. Общая регрессия192 выполнена; не повторять её без изменений общей основы или нового основания.
3. **Внешние зависимости:** Portal issuer/login/revoke, Telegram bot/chat/разрешённое сообщение, клиентские ОС, независимые WAN/public IPv6 и scale/multi-instance — отдельные группы по таблице выше. Ограничения текущего стенда не превращать в обещание приёмки всех конфигураций.
+17 -1
View File
@@ -1,6 +1,6 @@
# Этап 12: итоговая приёмка UX/UI
Актуальное продолжение 2026-10-14: 253 — подготовлена реальная приёмка renewal для exact mmt253-8e62a941.pngs.top на CHR104, read-only DNS empty/оба REST200. TLS/native SHA-256 comparator: positive и11 false-success отказов passed, syntax/lint passed. Никаких выдач/изменений253 не запускали. Runtime backend ux-certificates252/frontend ux-certificates251. Далее согласовать два выпуска/renewal с назначением SSL и полным откатом по deploy/TEST-ACME.md; этап12.5 открыт.
Актуальное продолжение 2026-10-14: 254 — разрешённый первый выпуск exact mmt253-8e62a941.pngs.top выполнен через UI, native leaf/private-key совпал с доверенным TLS SHA-256. Renewal не запускался: RouterOS даты без timezone дают canonical unknown/null; guard252 сохранён. Полный own cleanup/DNS0/SQL settings/native stable export подтверждён, оба CHR доступны. Backend252/frontend251 сохранены. Следующий255 — корректное определение времени native сертификата без угадывания timezone, затем реальный renewal по сохранённому разрешению. Этап12.5 открыт.
План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push.
@@ -4152,6 +4152,22 @@ Real Portal/browser API, provider local verified: создан один job ро
Runtime backend ux-backup234/frontend ux-routing218 healthy; новое application image для volume-only fix не требовалось. Пароли CHR не менялись, S3 mutations0 в235, configs body/JWT не опубликованы, private local manifest удалён. Исходные10 missing local files не восстановлены и records не удалены. Force-recreate — не host reboot/power loss/fsync/DR приёмка. Далее236 — UX недоступных local files, затем version retention границы и оставшиеся7 группы матрицы; multi-instance guard не принимается. Этап12.5 открыт.
## 12.5.254 — реальный выпуск и выявленное препятствие renewal (2026-10-14)
Пользователь разрешил first issue + scheduler renewal + полный откат для exact mmt253-8e62a941.pngs.top на CHR104. Сняты свежие приватные native/SQL baselines: сертификаты0, issue jobs0, CF token отсутствует. Renewal временно выключен штатным API. Token/zone/account проверены200; один UI POST с сохранённым requestId → terminal done/stepdone, UI завершение и JS errors0. [UI](ux-ui/acceptance/acme254-live-ui.json).
Native leaf exact name/private-key=true, SHA-256 89b6bd15857aaa548a26137fed6378aa2750440565ba0516240ff22e3a5e7e91. Acceptance helper сделал доверенный TLS к104:443 с SNI, rejectUnauthorized=true: hostname/private-key metadata/native fingerprint совпали с served leaf. [TLS before](ux-ui/acceptance/acme254-tls-before.json). Это первый выпуск, не подтверждение смены leaf после renewal.
Препятствие из реального state: native invalid-before=2026-10-14 15:37:47 и invalid-after=2027-01-12 15:37:46 без timezone. Канонический parser принимает offset-qualified datetime, поэтому validFrom/validUntil/daysLeft=null и statusunknown. По процедуре253 второй order не запускался, порог90/enable/run-now не применялись; unknown guard252 не обходился и время устройства не менялось. [Renewal limitation](ux-ui/acceptance/acme254-renewal.json). Следующий255 — определить корректную семантику native времени/публичного X509 без предположения о timezone и только затем повторить реальный scheduler renewal в рамках уже данного разрешения.
Откат: www-ssl/api-ssl исходные поля восстановлены, own certificates/PEM files/job удалены. TXT приложение очистило; собственная A удалена по exact name/type/content/ID; оба имени DNS0. [DNS](ux-ui/acceptance/acme254-cloudflare.json). ACME/renew settings восстановлены полностью; scheduler refresh применил исходное enabled/interval, после его пустого run metadata восстановлена ещё раз и exact SQL comparison passed. Секреты/private baselines/restore SQL удалены с Debian и локальный token fixture удалён. Historical event приложения/публичная CA запись не объявляются отозванными.
Native первый strict whole-collection assertion остановился на volatile metadata, а не неполном удалении: flash directory last-modified изменился при записи собственных файлов, /ip/service включает dynamic connections. Повтор только read-only сравнил exact configured services, file IDs/name/type/size и certificates; исключены directory mtime и dynamic connections, normalized full export совпал. [Native](ux-ui/acceptance/acme254-native.json). Один контрольный REST read вернул401, следующий read resource/certificate/file/services200 со старым паролем; Portal после cleanup оба устройства читает без ошибок. Не делаем вывод о смене пароля из transient401.
Дополнительная read-only калибровка254: system/clock Europe/Warsaw, gmt-offset +02:00, autodetect=true. Доверенный X509 before=13:37:47Z и until=13:37:46Z; оба native timestamps15:37 соответствуют текущему +02:00, включая будущий январский expiry. Поэтому нельзя просто дописать Z или применить исторический/будущий Warsaw offset +01:00 к январскому endpoint. Нужен явно наблюдаемый offset и проверка его стабильности вместе с чтением native дат; при неизвестном/сменившемся offset сохранять null. Это доказано для конкретного CHR7.24.5, не для всех версий RouterOS.
Production source/images не менялись, backend ux-certificates252/frontend ux-certificates251; rebuild/regression не повторялись. Продление и замена leaf ещё не приняты; ограничения описаны без объявления failed/blocked теста успешным.
## 12.5.253 — подготовка проверки реальной замены сертификата при renewal (2026-10-14)
Подготовлен exact mmt253-8e62a941.pngs.top/certName mmt253-8e62a941 на CHR104/server2. Read-only preflight с Debian: точный FQDN и challenge name имеют0 Cloudflare records, оба CHR REST200 с прежними паролями. Ни DNS/settings/native writes, ни ACME orders не выполнялись. Это не свежий приватный baseline для будущей мутации: его нужно снять непосредственно перед запуском.
+17 -1
View File
@@ -1,6 +1,6 @@
# Тестовый сервер UX/UI — 2026-10-10
Актуальное продолжение 2026-10-14: 253 — подготовлена реальная приёмка renewal для exact mmt253-8e62a941.pngs.top на CHR104, read-only DNS empty/оба REST200. TLS/native SHA-256 comparator: positive и11 false-success отказов passed, syntax/lint passed. Никаких выдач/изменений253 не запускали. Runtime backend ux-certificates252/frontend ux-certificates251. Далее согласовать два выпуска/renewal с назначением SSL и полным откатом по deploy/TEST-ACME.md; этап12.5 открыт.
Актуальное продолжение 2026-10-14: 254 — разрешённый первый выпуск exact mmt253-8e62a941.pngs.top выполнен через UI, native leaf/private-key совпал с доверенным TLS SHA-256. Renewal не запускался: RouterOS даты без timezone дают canonical unknown/null; guard252 сохранён. Полный own cleanup/DNS0/SQL settings/native stable export подтверждён, оба CHR доступны. Backend252/frontend251 сохранены. Следующий255 — корректное определение времени native сертификата без угадывания timezone, затем реальный renewal по сохранённому разрешению. Этап12.5 открыт.
| Параметр | Проверенное состояние |
| --- | --- |
@@ -34,6 +34,22 @@ OSPF84: real GRE Full adjacency/private routes/Ping3/3 и4 live PC/320px URL/bro
BFD85: Up/Full/own route/Ping,4 live UI и loss/withdrawal/recovery приняты; exact own cleanup8 коллекций×2 passed. Withdrawal5,245ms не подтверждает sub-second BFD timing; этот вопрос открыт. Runtime routing83 без новой сборки. [Отчёт](ux-ui/acceptance/ospf-bfd-loss-2026-10-09.json).
## 12.5.254 — реальный выпуск и выявленное препятствие renewal (2026-10-14)
Пользователь разрешил first issue + scheduler renewal + полный откат для exact mmt253-8e62a941.pngs.top на CHR104. Сняты свежие приватные native/SQL baselines: сертификаты0, issue jobs0, CF token отсутствует. Renewal временно выключен штатным API. Token/zone/account проверены200; один UI POST с сохранённым requestId → terminal done/stepdone, UI завершение и JS errors0. [UI](ux-ui/acceptance/acme254-live-ui.json).
Native leaf exact name/private-key=true, SHA-256 89b6bd15857aaa548a26137fed6378aa2750440565ba0516240ff22e3a5e7e91. Acceptance helper сделал доверенный TLS к104:443 с SNI, rejectUnauthorized=true: hostname/private-key metadata/native fingerprint совпали с served leaf. [TLS before](ux-ui/acceptance/acme254-tls-before.json). Это первый выпуск, не подтверждение смены leaf после renewal.
Препятствие из реального state: native invalid-before=2026-10-14 15:37:47 и invalid-after=2027-01-12 15:37:46 без timezone. Канонический parser принимает offset-qualified datetime, поэтому validFrom/validUntil/daysLeft=null и statusunknown. По процедуре253 второй order не запускался, порог90/enable/run-now не применялись; unknown guard252 не обходился и время устройства не менялось. [Renewal limitation](ux-ui/acceptance/acme254-renewal.json). Следующий255 — определить корректную семантику native времени/публичного X509 без предположения о timezone и только затем повторить реальный scheduler renewal в рамках уже данного разрешения.
Откат: www-ssl/api-ssl исходные поля восстановлены, own certificates/PEM files/job удалены. TXT приложение очистило; собственная A удалена по exact name/type/content/ID; оба имени DNS0. [DNS](ux-ui/acceptance/acme254-cloudflare.json). ACME/renew settings восстановлены полностью; scheduler refresh применил исходное enabled/interval, после его пустого run metadata восстановлена ещё раз и exact SQL comparison passed. Секреты/private baselines/restore SQL удалены с Debian и локальный token fixture удалён. Historical event приложения/публичная CA запись не объявляются отозванными.
Native первый strict whole-collection assertion остановился на volatile metadata, а не неполном удалении: flash directory last-modified изменился при записи собственных файлов, /ip/service включает dynamic connections. Повтор только read-only сравнил exact configured services, file IDs/name/type/size и certificates; исключены directory mtime и dynamic connections, normalized full export совпал. [Native](ux-ui/acceptance/acme254-native.json). Один контрольный REST read вернул401, следующий read resource/certificate/file/services200 со старым паролем; Portal после cleanup оба устройства читает без ошибок. Не делаем вывод о смене пароля из transient401.
Дополнительная read-only калибровка254: system/clock Europe/Warsaw, gmt-offset +02:00, autodetect=true. Доверенный X509 before=13:37:47Z и until=13:37:46Z; оба native timestamps15:37 соответствуют текущему +02:00, включая будущий январский expiry. Поэтому нельзя просто дописать Z или применить исторический/будущий Warsaw offset +01:00 к январскому endpoint. Нужен явно наблюдаемый offset и проверка его стабильности вместе с чтением native дат; при неизвестном/сменившемся offset сохранять null. Это доказано для конкретного CHR7.24.5, не для всех версий RouterOS.
Production source/images не менялись, backend ux-certificates252/frontend ux-certificates251; rebuild/regression не повторялись. Продление и замена leaf ещё не приняты; ограничения описаны без объявления failed/blocked теста успешным.
## 12.5.253 — подготовка проверки реальной замены сертификата при renewal (2026-10-14)
Подготовлен exact mmt253-8e62a941.pngs.top/certName mmt253-8e62a941 на CHR104/server2. Read-only preflight с Debian: точный FQDN и challenge name имеют0 Cloudflare records, оба CHR REST200 с прежними паролями. Ни DNS/settings/native writes, ни ACME orders не выполнялись. Это не свежий приватный baseline для будущей мутации: его нужно снять непосредственно перед запуском.
@@ -0,0 +1,33 @@
{
"date": "2026-10-14",
"block": "12.5.254",
"domain": "pngs.top",
"checks": [
{
"endpoint": "/user/tokens/verify",
"status": 200,
"success": true,
"errors": []
},
{
"endpoint": "/zones?name=pngs.top",
"status": 200,
"success": true,
"errors": []
}
],
"tokenActive": true,
"zoneActive": true,
"accountMatched": true,
"nameservers": [
"cheryl.ns.cloudflare.com",
"doug.ns.cloudflare.com"
],
"originalFqdnRecords": 0,
"originalChallengeRecords": 0,
"fqdn": "mmt253-8e62a941.pngs.top",
"applicationTxtCleanupConfirmed": true,
"ownARecordDeleted": true,
"finalFqdnRecords": 0,
"finalChallengeRecords": 0
}
@@ -0,0 +1,35 @@
{
"date": "2026-10-14",
"block": "12.5.254",
"fqdn": "mmt253-8e62a941.pngs.top",
"certName": "mmt253-8e62a941",
"serverId": "2",
"realPortalLogin": true,
"noMocks": true,
"issuePosts": 1,
"pageErrors": [],
"settings": {
"testStatus": 200,
"testOk": true,
"saveStatus": 200,
"tokenConfigured": true,
"directoryUrl": "https://acme-v02.api.letsencrypt.org/directory"
},
"jobId": "9ebd9d18-b746-47fb-b6da-8c887ccda4e0",
"accepted": true,
"job": {
"id": "9ebd9d18-b746-47fb-b6da-8c887ccda4e0",
"status": "done",
"step": "done"
},
"uiTerminalConfirmed": true,
"postCleanup": {
"tokenConfigured": false,
"ownJobStatus": 404,
"reachableServerIds": [
"1",
"2"
],
"ownCertificateAbsent": true
}
}
+11
View File
@@ -0,0 +1,11 @@
{
"date": "2026-10-14",
"block": "12.5.254",
"certificatesBaselineMatched": true,
"fileStableMetadataBaselineMatched": true,
"flashDirectoryLastModifiedExcluded": true,
"configuredServicesBaselineMatched": true,
"dynamicServiceConnectionsExcluded": true,
"normalizedExportMatched": true,
"passwordChanged": false
}
@@ -0,0 +1,30 @@
{
"date": "2026-10-14",
"block": "12.5.254",
"fqdn": "mmt253-8e62a941.pngs.top",
"renewalExecuted": false,
"reason": "Native certificate dates have no timezone; canonical state is unknown, renewal guard preserved",
"observed": {
"status": "unknown",
"daysLeft": null,
"validFrom": null,
"validUntil": null,
"rawValidFrom": "2026-10-14 15:37:47",
"rawValidUntil": "2027-01-12 15:37:46"
},
"settingsBaselineRestored": true,
"schedulerRefreshed": true,
"ownJobRemoved": true,
"privateBaselinesRemoved": true,
"clockCalibration": {
"timeZoneName": "Europe/Warsaw",
"gmtOffset": "+02:00",
"autoDetect": true,
"nativeValidFrom": "2026-10-14 15:37:47",
"tlsValidFromUtc": "2026-10-14T13:37:47Z",
"nativeValidUntil": "2027-01-12 15:37:46",
"tlsValidUntilUtc": "2027-01-12T13:37:46Z",
"bothMatchCurrentGmtOffset": true,
"warning": "Do not assume UTC or apply the future Warsaw winter offset to certificate display; both native endpoints use observed current +02:00 in this sample"
}
}
@@ -0,0 +1,15 @@
{
"sampledAt": "2026-10-14T14:37:23.294Z",
"fqdn": "mmt253-8e62a941.pngs.top",
"certName": "mmt253-8e62a941",
"remoteAddress": "104.165.244.7",
"authorized": true,
"hostnameMatched": true,
"protocol": "TLSv1.2",
"fingerprint256": "89:B6:BD:15:85:7A:AA:54:8A:26:13:7F:ED:63:78:AA:27:50:44:05:65:BA:05:16:24:0F:F2:2E:3A:5E:7E:91",
"validFrom": "Oct 14 13:37:47 2026 GMT",
"validUntil": "Jan 12 13:37:46 2027 GMT",
"nativeName": "mmt253-8e62a941",
"nativePrivateKey": true,
"nativeFingerprint256": "89b6bd15857aaa548a26137fed6378aa2750440565ba0516240ff22e3a5e7e91"
}