{
  "version": 1,
  "article": {
    "url": "https://neosimvolist.team-wiki.ru/posts/demo-minimal-stack",
    "title": "Минимализм как техническое решение",
    "publishedAt": "2026-10-22T21:57:01.248Z",
    "modifiedAt": "2026-10-22T21:57:01.248Z"
  },
  "text": "Коротко\nКлиентский JS - 6 КБ. Зависимостей на продакшене - 4. База - встроенная в Node. Поиск - в браузере.\n\nМинимализм - это не эстетика. Это способ убрать из проекта целые классы отказов.\n\nЧто мы убрали\n\nБыло\nСтало\nПочему\n\nReact + клиентский рендер\nAstro SSR\nКонтент должен быть в HTML сразу\n\nORM (Prisma)\nnode:sqlite\nНативный модуль, ноль зависимостей\n\nAlgolia / Meilisearch\nиндекс в браузере\nНоль запросов на нажатие\n\nCSS-фреймворк\n300 строк CSS\nДизайн-система из брендбука\n\nКапчи\nLLM\nТематика блога\n\n \n Node 22 умеет SQLite сам\n`node:sqlite` вошёл в Node 22.5+. Это синхронный API поверх SQLite с FTS5 -\nполнотекстовый поиск из коробки, без единой нативной зависимости.\n\nПочему SSR, а не SSG\n\nКонтент живёт в базе и появляется из админки за секунды. Статическая генерация\nпотребовала бы пересборки на каждое изменение.\n\nSSR даёт то же самое для SEO - полный HTML в первом байте - плюс управляемое кэширование:\n\n \n res.headers.set('Cache-Control', 'public, max-age=0, s-maxage=300, stale-while-revalidate=86400');\n\n \nКлиентский JS: 6 килобайт\n\nВесь интерактив блога - это поиск, переключатель темы и форма комментариев.\nНикаких Virtual DOM, никакого hydration:\n\nПоиск - типизированный индекс + bm25-lite, ~4 КБ\n\nТема - один обработчик на [data-theme-toggle]\n\nКомментарии - fetch и вставка узла\n\nВидео - replaceChildren с iframe по клику\n\n \n Правило, которое себя оправдало\nЕсли элемент можно показать или спрятать через CSS - берите CSS.\nЕсли он открывается и закрывается - берите `<dialog>`.\nJS нужен только там, где есть настоящее состояние.\n\nЧто дали минимальные зависимости\n\n \n # Было: 1 284 пакета, 340 МБ node_modules\n# Стало: 287 пакетов, 96 МБ\n\n \nНагрузка на поддержку упала пропорционально: нет транзитивных CVE в yarn.lock,\nнет апгрейдов, ломающих прод.\n\n \n Четыре зависимости: Astro, marked, shiki, шрифты\n\nИтог\n\nМетрика\nЗначение\n\nКлиентский JS\n6 КБ\n\nЗависимостей\n287 пакетов\n\nВремя до интерактивности\n~0.4 с на 4G\n\nLighthouse SEO\n100",
  "textB64": "0JrQvtGA0L7RgtC60L4K0JrQu9C40LXQvdGC0YHQutC40LkgSlMgLSA2INCa0JEuINCX0LDQstC40YHQuNC80L7RgdGC0LXQuSDQvdCwINC/0YDQvtC00LDQutGI0LXQvdC1IC0gNC4g0JHQsNC30LAgLSDQstGB0YLRgNC+0LXQvdC90LDRjyDQsiBOb2RlLiDQn9C+0LjRgdC6IC0g0LIg0LHRgNCw0YPQt9C10YDQtS4KCtCc0LjQvdC40LzQsNC70LjQt9C8IC0g0Y3RgtC+INC90LUg0Y3RgdGC0LXRgtC40LrQsC4g0K3RgtC+INGB0L/QvtGB0L7QsSDRg9Cx0YDQsNGC0Ywg0LjQtyDQv9GA0L7QtdC60YLQsCDRhtC10LvRi9C1INC60LvQsNGB0YHRiyDQvtGC0LrQsNC30L7Qsi4KCtCn0YLQviDQvNGLINGD0LHRgNCw0LvQuAoK0JHRi9C70L4K0KHRgtCw0LvQvgrQn9C+0YfQtdC80YMKClJlYWN0ICsg0LrQu9C40LXQvdGC0YHQutC40Lkg0YDQtdC90LTQtdGACkFzdHJvIFNTUgrQmtC+0L3RgtC10L3RgiDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0LIgSFRNTCDRgdGA0LDQt9GDCgpPUk0gKFByaXNtYSkKbm9kZTpzcWxpdGUK0J3QsNGC0LjQstC90YvQuSDQvNC+0LTRg9C70YwsINC90L7Qu9GMINC30LDQstC40YHQuNC80L7RgdGC0LXQuQoKQWxnb2xpYSAvIE1laWxpc2VhcmNoCtC40L3QtNC10LrRgSDQsiDQsdGA0LDRg9C30LXRgNC1CtCd0L7Qu9GMINC30LDQv9GA0L7RgdC+0LIg0L3QsCDQvdCw0LbQsNGC0LjQtQoKQ1NTLdGE0YDQtdC50LzQstC+0YDQugozMDAg0YHRgtGA0L7QuiBDU1MK0JTQuNC30LDQudC9LdGB0LjRgdGC0LXQvNCwINC40Lcg0LHRgNC10L3QtNCx0YPQutCwCgrQmtCw0L/Rh9C4CkxMTQrQotC10LzQsNGC0LjQutCwINCx0LvQvtCz0LAKCiAKIE5vZGUgMjIg0YPQvNC10LXRgiBTUUxpdGUg0YHQsNC8CmBub2RlOnNxbGl0ZWAg0LLQvtGI0ZHQuyDQsiBOb2RlIDIyLjUrLiDQrdGC0L4g0YHQuNC90YXRgNC+0L3QvdGL0LkgQVBJINC/0L7QstC10YDRhSBTUUxpdGUg0YEgRlRTNSAtCtC/0L7Qu9C90L7RgtC10LrRgdGC0L7QstGL0Lkg0L/QvtC40YHQuiDQuNC3INC60L7RgNC+0LHQutC4LCDQsdC10Lcg0LXQtNC40L3QvtC5INC90LDRgtC40LLQvdC+0Lkg0LfQsNCy0LjRgdC40LzQvtGB0YLQuC4KCtCf0L7Rh9C10LzRgyBTU1IsINCwINC90LUgU1NHCgrQmtC+0L3RgtC10L3RgiDQttC40LLRkdGCINCyINCx0LDQt9C1INC4INC/0L7Rj9Cy0LvRj9C10YLRgdGPINC40Lcg0LDQtNC80LjQvdC60Lgg0LfQsCDRgdC10LrRg9C90LTRiy4g0KHRgtCw0YLQuNGH0LXRgdC60LDRjyDQs9C10L3QtdGA0LDRhtC40Y8K0L/QvtGC0YDQtdCx0L7QstCw0LvQsCDQsdGLINC/0LXRgNC10YHQsdC+0YDQutC4INC90LAg0LrQsNC20LTQvtC1INC40LfQvNC10L3QtdC90LjQtS4KClNTUiDQtNCw0ZHRgiDRgtC+INC20LUg0YHQsNC80L7QtSDQtNC70Y8gU0VPIC0g0L/QvtC70L3Ri9C5IEhUTUwg0LIg0L/QtdGA0LLQvtC8INCx0LDQudGC0LUgLSDQv9C70Y7RgSDRg9C/0YDQsNCy0LvRj9C10LzQvtC1INC60Y3RiNC40YDQvtCy0LDQvdC40LU6CgogCiByZXMuaGVhZGVycy5zZXQoJ0NhY2hlLUNvbnRyb2wnLCAncHVibGljLCBtYXgtYWdlPTAsIHMtbWF4YWdlPTMwMCwgc3RhbGUtd2hpbGUtcmV2YWxpZGF0ZT04NjQwMCcpOwoKIArQmtC70LjQtdC90YLRgdC60LjQuSBKUzogNiDQutC40LvQvtCx0LDQudGCCgrQktC10YHRjCDQuNC90YLQtdGA0LDQutGC0LjQsiDQsdC70L7Qs9CwIC0g0Y3RgtC+INC/0L7QuNGB0LosINC/0LXRgNC10LrQu9GO0YfQsNGC0LXQu9GMINGC0LXQvNGLINC4INGE0L7RgNC80LAg0LrQvtC80LzQtdC90YLQsNGA0LjQtdCyLgrQndC40LrQsNC60LjRhSBWaXJ0dWFsIERPTSwg0L3QuNC60LDQutC+0LPQviBoeWRyYXRpb246CgrQn9C+0LjRgdC6IC0g0YLQuNC/0LjQt9C40YDQvtCy0LDQvdC90YvQuSDQuNC90LTQtdC60YEgKyBibTI1LWxpdGUsIH40INCa0JEKCtCi0LXQvNCwIC0g0L7QtNC40L0g0L7QsdGA0LDQsdC+0YLRh9C40Log0L3QsCBbZGF0YS10aGVtZS10b2dnbGVdCgrQmtC+0LzQvNC10L3RgtCw0YDQuNC4IC0gZmV0Y2gg0Lgg0LLRgdGC0LDQstC60LAg0YPQt9C70LAKCtCS0LjQtNC10L4gLSByZXBsYWNlQ2hpbGRyZW4g0YEgaWZyYW1lINC/0L4g0LrQu9C40LrRgwoKIAog0J/RgNCw0LLQuNC70L4sINC60L7RgtC+0YDQvtC1INGB0LXQsdGPINC+0L/RgNCw0LLQtNCw0LvQvgrQldGB0LvQuCDRjdC70LXQvNC10L3RgiDQvNC+0LbQvdC+INC/0L7QutCw0LfQsNGC0Ywg0LjQu9C4INGB0L/RgNGP0YLQsNGC0Ywg0YfQtdGA0LXQtyBDU1MgLSDQsdC10YDQuNGC0LUgQ1NTLgrQldGB0LvQuCDQvtC9INC+0YLQutGA0YvQstCw0LXRgtGB0Y8g0Lgg0LfQsNC60YDRi9Cy0LDQtdGC0YHRjyAtINCx0LXRgNC40YLQtSBgPGRpYWxvZz5gLgpKUyDQvdGD0LbQtdC9INGC0L7Qu9GM0LrQviDRgtCw0LwsINCz0LTQtSDQtdGB0YLRjCDQvdCw0YHRgtC+0Y/RidC10LUg0YHQvtGB0YLQvtGP0L3QuNC1LgoK0KfRgtC+INC00LDQu9C4INC80LjQvdC40LzQsNC70YzQvdGL0LUg0LfQsNCy0LjRgdC40LzQvtGB0YLQuAoKIAogIyDQkdGL0LvQvjogMSAyODQg0L/QsNC60LXRgtCwLCAzNDAg0JzQkSBub2RlX21vZHVsZXMKIyDQodGC0LDQu9C+OiAyODcg0L/QsNC60LXRgtC+0LIsIDk2INCc0JEKCiAK0J3QsNCz0YDRg9C30LrQsCDQvdCwINC/0L7QtNC00LXRgNC20LrRgyDRg9C/0LDQu9CwINC/0YDQvtC/0L7RgNGG0LjQvtC90LDQu9GM0L3Qvjog0L3QtdGCINGC0YDQsNC90LfQuNGC0LjQstC90YvRhSBDVkUg0LIgeWFybi5sb2NrLArQvdC10YIg0LDQv9Cz0YDQtdC50LTQvtCyLCDQu9C+0LzQsNGO0YnQuNGFINC/0YDQvtC0LgoKIAog0KfQtdGC0YvRgNC1INC30LDQstC40YHQuNC80L7RgdGC0Lg6IEFzdHJvLCBtYXJrZWQsIHNoaWtpLCDRiNGA0LjRhNGC0YsKCtCY0YLQvtCzCgrQnNC10YLRgNC40LrQsArQl9C90LDRh9C10L3QuNC1CgrQmtC70LjQtdC90YLRgdC60LjQuSBKUwo2INCa0JEKCtCX0LDQstC40YHQuNC80L7RgdGC0LXQuQoyODcg0L/QsNC60LXRgtC+0LIKCtCS0YDQtdC80Y8g0LTQviDQuNC90YLQtdGA0LDQutGC0LjQstC90L7RgdGC0LgKfjAuNCDRgSDQvdCwIDRHCgpMaWdodGhvdXNlIFNFTwoxMDA=",
  "textHash": "sha256:beb4afdc345587597130fad8dfd970826fcf83672073b538c593d17a8c56777f",
  "record": "https://neosimvolist.team-wiki.ru/posts/demo-minimal-stack\n2026-10-22T21:57:01.248Z\nsha256:beb4afdc345587597130fad8dfd970826fcf83672073b538c593d17a8c56777f",
  "recordB64": "aHR0cHM6Ly9uZW9zaW12b2xpc3QudGVhbS13aWtpLnJ1L3Bvc3RzL2RlbW8tbWluaW1hbC1zdGFjawoyMDI2LTEwLTIyVDIxOjU3OjAxLjI0OFoKc2hhMjU2OmJlYjRhZmRjMzQ1NTg3NTk3MTMwZmFkOGRmZDk3MDgyNmZjZjgzNjcyMDczYjUzOGM1OTNkMTdhOGM1Njc3N2Y=",
  "recordHash": "sha256:90fcad5255e9336842a8c9787e9a23c51b0d2aced6a69b4285d5478b015af734",
  "timestamp": {
    "service": "freetsa.org",
    "issuedAt": "2026-10-23T05:59:34.000Z",
    "token": "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",
    "query": "MDkCAQEwMTANBglghkgBZQMEAgEFAAQgLVYLUol5LiZvDzifL6p0EECfC7Nu0qHonnglxg79vsoBAf8=",
    "certificates": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUdZRENDQkVpZ0F3SUJBZ0lKQU1McGhoWU5xT25OTUEwR0NTcUdTSWIzRFFFQkRRVUFNSUdWTVJFd0R3WUQKVlFRS0V3aEdjbVZsSUZSVFFURVFNQTRHQTFVRUN4TUhVbTl2ZENCRFFURVlNQllHQTFVRUF4TVBkM2QzTG1aeQpaV1YwYzJFdWIzSm5NU0l3SUFZSktvWklodmNOQVFrQkZoTmlkWE5wYkdWNllYTkFaMjFoYVd3dVkyOXRNUkl3CkVBWURWUVFIRXdsWGRXVnllbUoxY21jeER6QU5CZ05WQkFnVEJrSmhlV1Z5YmpFTE1Ba0dBMVVFQmhNQ1JFVXcKSGhjTk1qWXdNakUxTVRrME5ESXlXaGNOTkRBd01qQXlNVGswTkRJeVdqQ0NBUXN4RVRBUEJnTlZCQW9NQ0VaeQpaV1VnVkZOQk1Rd3dDZ1lEVlFRTERBTlVVMEV4ZGpCMEJnTlZCQTBNYlZSb2FYTWdZMlZ5ZEdsbWFXTmhkR1VnClpHbG5hWFJoYkd4NUlITnBaMjV6SUdSdlkzVnRaVzUwY3lCaGJtUWdkR2x0WlNCemRHRnRjQ0J5WlhGMVpYTjAKY3lCdFlXUmxJSFZ6YVc1bklIUm9aU0JtY21WbGRITmhMbTl5WnlCdmJteHBibVVnYzJWeWRtbGpaWE14R0RBVwpCZ05WQkFNTUQzZDNkeTVtY21WbGRITmhMbTl5WnpFa01DSUdDU3FHU0liM0RRRUpBUllWWW5WemFXeGxlbUZ6ClFHMWhhV3hpYjNndWIzSm5NUkl3RUFZRFZRUUhEQWxYZFdWeWVtSjFjbWN4Q3pBSkJnTlZCQVlUQWtSRk1ROHcKRFFZRFZRUUlEQVpDWVhsbGNtNHdkakFRQmdjcWhrak9QUUlCQmdVcmdRUUFJZ05pQUFTaUZlR2hzdGJMaHhpeAowbzRVQXVtTlN3SFVVbE9lM0RCdnM4ZllzNTgwd0FEVzU5b3FHU0N4MTVicDYxVFNtWGt3TG0xSlc0OFhuYkxMCml6UDZadGpjdnNoVjNIOXV6MmJTNTNzZ0RYaGcxd0xiSWhBdHJhQytmSEN5dEhldVZhdWpnZ0htTUlJQjRqQUoKQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJRVndMMG02OVJkZ3RGZGt5WXhMKzl3c290R1hqQWZCZ05WSFNNRQpHREFXZ0JUNlZRMk1OR1pSUTB6MzU3T25iSld2ZXVha2x6QUxCZ05WSFE4RUJBTUNCc0F3RmdZRFZSMGxBUUgvCkJBd3dDZ1lJS3dZQkJRVUhBd2d3YkFZSUt3WUJCUVVIQVFFRVlEQmVNRE1HQ0NzR0FRVUZCekFDaGlkb2RIUncKT2k4dmQzZDNMbVp5WldWMGMyRXViM0puTDJacGJHVnpMMk5oWTJWeWRDNXdaVzB3SndZSUt3WUJCUVVITUFHRwpHMmgwZEhBNkx5OTNkM2N1Wm5KbFpYUnpZUzV2Y21jNk1qVTJNREEzQmdOVkhSOEVNREF1TUN5Z0txQW9oaVpvCmRIUndPaTh2ZDNkM0xtWnlaV1YwYzJFdWIzSm5MMk55YkM5eWIyOTBYMk5oTG1OeWJEQ0J5QVlEVlIwZ0JJSEEKTUlHOU1JRzZCZ01yQlFnd2diSXdNd1lJS3dZQkJRVUhBZ0VXSjJoMGRIQTZMeTkzZDNjdVpuSmxaWFJ6WVM1dgpjbWN2Wm5KbFpYUnpZVjlqY0hNdWFIUnRiREF5QmdnckJnRUZCUWNDQVJZbWFIUjBjRG92TDNkM2R5NW1jbVZsCmRITmhMbTl5Wnk5bWNtVmxkSE5oWDJOd2N5NXdaR1l3UndZSUt3WUJCUVVIQWdJd094bzVSbkpsWlZSVFFTQjAKY25WemRHVmtJSFJwYldWemRHRnRjR2x1WnlCVGIyWjBkMkZ5WlNCaGN5QmhJRk5sY25acFkyVWdLRk5oWVZNcApNQTBHQ1NxR1NJYjNEUUVCRFFVQUE0SUNBUUJyTVZTL1lmbmZNcjB6aVpuZXNCVU9yRE5Sck5OZ3QzSWdNTkR3Ck5od2w2b0tXSFZJaGxZbk0vNWJvbGpmYnBaVEFicXZ4SEkzenRUMC9zd3hRT3FUYXQ1cUJKUkFZL1ZIMW4vVDQKTTl1RGpTdXUzcWZoMFpINVBMOUVOcW9WVzQ0aTVOVC96blFldjJNR1hPQUh3ejlrWnd3eno5TUZYNmhiR2hCcQpXYStubEFxYjdZNzJLRnpqMzNtMU9WSHhWMldsNFlEOWY5MWJaVEZwVUVHVzRLdGJrbXhwZi9pR0lQYWY0V0hwCm9CVy9PNkV6b2ZNS1lsejR5WHlFQmgwd1JSVnlYbHRMcmorTUZIcWhlK1BzTUJsbHEvZENhTzRXL0YrQXVIRWwKdTdhVVlXTUFTZWxwaFdBSmlVc05NcjVIQW9lQ1NTZ2lscWYxQ1NvV0MrazZlNDMzNEZ5bStJeTRjc01leCtQRwo0clNkcVhKVlErQVdFZFJhalNQS2g3eURmcE5rZG5PNnlxUUovdFNkMTFYUTVjTDBNOWpXdUNEMXpIbGdBK3UrClIyY3J5M3lvMjNqRDdxVEdMaFpxVXZYQ3lXaWdIMzAvUS9SWGpqRHdyYzRESmlRK2dSWTBGaGRUWXFsdmdNQlAKcjRMY0pLbk5rc2l2ZGora2J6N2JWU2JyQkF6Umlheks5bDg0MS81WE10UDlCdkQwaEtDcFFGdlA5UFNnQ0M4RQpRbktxZ1NlMjZGU0pCYUFRY0E1VG5LOE5GNGprYkVsQnhmL3p5aDdQM0lqSHNvMzVqdGdVV0QxL2l0ZzlCSldiCllVd0o0dGZJTHBCMkYwd2JrMUdjWkRDRFpveVczWGYzdHJBcHovWmQ5M2dGM2pvYzlIaDlSRnZlS1J6V1E3ZGQKVXQzZWdRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUgvekNDQmVlZ0F3SUJBZ0lKQU1IcGhoWU5xT21BTUEwR0NTcUdTSWIzRFFFQkRRVUFNSUdWTVJFd0R3WUQKVlFRS0V3aEdjbVZsSUZSVFFURVFNQTRHQTFVRUN4TUhVbTl2ZENCRFFURVlNQllHQTFVRUF4TVBkM2QzTG1aeQpaV1YwYzJFdWIzSm5NU0l3SUFZSktvWklodmNOQVFrQkZoTmlkWE5wYkdWNllYTkFaMjFoYVd3dVkyOXRNUkl3CkVBWURWUVFIRXdsWGRXVnllbUoxY21jeER6QU5CZ05WQkFnVEJrSmhlV1Z5YmpFTE1Ba0dBMVVFQmhNQ1JFVXcKSGhjTk1UWXdNekV6TURFMU1qRXpXaGNOTkRFd016QTNNREUxTWpFeldqQ0JsVEVSTUE4R0ExVUVDaE1JUm5KbApaU0JVVTBFeEVEQU9CZ05WQkFzVEIxSnZiM1FnUTBFeEdEQVdCZ05WQkFNVEQzZDNkeTVtY21WbGRITmhMbTl5Clp6RWlNQ0FHQ1NxR1NJYjNEUUVKQVJZVFluVnphV3hsZW1GelFHZHRZV2xzTG1OdmJURVNNQkFHQTFVRUJ4TUoKVjNWbGNucGlkWEpuTVE4d0RRWURWUVFJRXdaQ1lYbGxjbTR4Q3pBSkJnTlZCQVlUQWtSRk1JSUNJakFOQmdrcQpoa2lHOXcwQkFRRUZBQU9DQWc4QU1JSUNDZ0tDQWdFQXRnS09EakF5OFJFUTJXVE5xVXVkQW5qaGxDcnBFNnFsCm1RZk5wcGVUbVZ2WnJINHp1dG4rTndUYUhBR3BqU0d2NC9XUnBaMXdaM0JSWjVtUFVCWnlMZ3EwWXJJZlE1RngKMHMvTVJaUHpjMXIzbEtXck1SOXNBUXg0bU40ejExeEZFTzUyOUwwZEZKalBGOU1EOEdwZDJmZVd6R3lwdGxlbApiK1BxVCsrK2ZPYTJvWTArTmFNTTdsL3hjTkhQT2FNejAvMm9sazBpMjJoYktlVmh2b2tQQ3FoRmh6c3VoS3NtCnE0T2Yvbyt0NmRJN3N4NWgwblBNbTRnR1NSaGZxK3o2QlRSZ0NycVFHMkZPTG9WRmd0NmlJbS9Cbk5mZlVyN1YKRFlkM3pabUl3Rk9qL0gzREtIb0dpay94SzNFODJZQTJadWxWT0ZSVy96ajRBcGpQYTVPRmJwSWtkMHBtenh6ZApFY0w0NzloU0E5ZEZpeVZtU3hQdFk1emUxUCtCRTliTVUxUFNjcFJ6dzhNSEZYeHlLcVcxM1F2N0xXdzRzYmszClNjaUI3R0FDYlFpVkd6Z2t2WEc2eTg1SE91dldOdkM1R0xTaXlQOUdsUEIwVjY4dGJ4ejRKVlRSZHcvWG4vWFQKRk56UkJNM2NxOGxCT0FWdC9QQVg1K3VGY3YxUzl3RkU4WWphQmZXQ1AxamRCaWwrYzRlKzB0ZHl3VDJvSm1ZQgpCRi9rRXQxd21Hd01tSHVuTkV1UU56aDFGdEpZNTRoYlVmaVdpMzhtQVNFN3hNdE1oZmovQzRTdmFwaUROODM3CmdZYVBmczh4M0taeGJYN0MzWUFzRm5KaW5sd0FVc3MxZmRLYXI4US9ZVnM3SC9uVTRjNEl4eHh6NGY2N2ZjVnEKTTJJVEtlbnRiQ01DQXdFQUFhT0NBazR3Z2dKS01Bd0dBMVVkRXdRRk1BTUJBZjh3RGdZRFZSMFBBUUgvQkFRRApBZ0hHTUIwR0ExVWREZ1FXQkJUNlZRMk1OR1pSUTB6MzU3T25iSld2ZXVha2x6Q0J5Z1lEVlIwakJJSENNSUcvCmdCVDZWUTJNTkdaUlEwejM1N09uYkpXdmV1YWtsNkdCbTZTQm1EQ0JsVEVSTUE4R0ExVUVDaE1JUm5KbFpTQlUKVTBFeEVEQU9CZ05WQkFzVEIxSnZiM1FnUTBFeEdEQVdCZ05WQkFNVEQzZDNkeTVtY21WbGRITmhMbTl5WnpFaQpNQ0FHQ1NxR1NJYjNEUUVKQVJZVFluVnphV3hsZW1GelFHZHRZV2xzTG1OdmJURVNNQkFHQTFVRUJ4TUpWM1ZsCmNucGlkWEpuTVE4d0RRWURWUVFJRXdaQ1lYbGxjbTR4Q3pBSkJnTlZCQVlUQWtSRmdna0F3ZW1HRmcybzZZQXcKTXdZRFZSMGZCQ3d3S2pBb29DYWdKSVlpYUhSMGNEb3ZMM2QzZHk1bWNtVmxkSE5oTG05eVp5OXliMjkwWDJOaApMbU55YkRDQnp3WURWUjBnQklISE1JSEVNSUhCQmdvckJnRUVBWUh5SkFFQk1JR3lNRE1HQ0NzR0FRVUZCd0lCCkZpZG9kSFJ3T2k4dmQzZDNMbVp5WldWMGMyRXViM0puTDJaeVpXVjBjMkZmWTNCekxtaDBiV3d3TWdZSUt3WUIKQlFVSEFnRVdKbWgwZEhBNkx5OTNkM2N1Wm5KbFpYUnpZUzV2Y21jdlpuSmxaWFJ6WVY5amNITXVjR1JtTUVjRwpDQ3NHQVFVRkJ3SUNNRHNhT1VaeVpXVlVVMEVnZEhKMWMzUmxaQ0IwYVcxbGMzUmhiWEJwYm1jZ1UyOW1kSGRoCmNtVWdZWE1nWVNCVFpYSjJhV05sSUNoVFlXRlRLVEEzQmdnckJnRUZCUWNCQVFRck1Da3dKd1lJS3dZQkJRVUgKTUFHR0cyaDBkSEE2THk5M2QzY3VabkpsWlhSellTNXZjbWM2TWpVMk1EQU5CZ2txaGtpRzl3MEJBUTBGQUFPQwpBZ0VBYUs5K3Y1T0ZZdTlNNnp0WUMrTDY5c3cxb21keWxpODlsWkFmcFdNTWg5Q1JtSmhNNktCcU0vaXB3b0x0Cm54eXhHc2JDUGhjUWp1VHZ6bSt5bE42VndUTW1JbFZ5VlNMS1laY2RTanQvZUNVTis0MUs3c0Q3R1ZteFpCQUYKSUxuQkRtVEdKbUxrclUwS3V1SXBqOGxJL0U2WjZObm11UDIrUkFRU0hzZkJRaTZzc3NuWE1vNEhPVzVndFBPNwpnRHJVcFZYSUQrKzFQNFhuZGtvS243U3Z3NW4welM5ZnYxaHhCY1lJSFBQUVV6ZTJ1MzBiQVF0MG4waUl5Ukx6CmFXdWh0cEF0ZDdmZndFYkFTZ3pCN0UrTkdGNHRwVjM3ZThLaUEyeGlHU1JxVDVuZHUyOGZncE9ZODdnRDNBcloKRGN0WnZ2VENmSGRBUzVrRU8zZ25HR2VaRVZMRG1mRXN2OFRHSmEzQWxqVmE1RTQwSVFEc1VYcFFMaThHK1VDNAoxRFdadThFVlQ0cm5ZYUN3MVZYN1NoT1IxUE5DQ3ZqYjhTOHRmZHVkZDl6aFUzZ0VCMHJ4ZGVUeTF0VmJOTFhXCjk5eTkweGN3cjFaSURVd00veFEvbm9POEZSaG0wTG9QQzczRWYrSjRaQmRydld3YXVGM3pKZTMzZDRpYnhFY2IKOC9wejVXekZrZWl4WU0ybnNIaHFIc0JLdzdKUG91S05YUm5sNUlBRTFlRm1xRHlDN0cvVlQ3T0Y2Njl4TTZoYgpVdDVHMjFKRTRjTks2Tk51Y1MrZnpnMUpQWDArM1Zoc1laamo3RDV1bGpSdlFYcko4aUhnci9NNmoyb0xIdlRBCkkyTUxkcTJxalpGRE9DWHN4QnhKcGJtTEdCeDlvdzZaZXJsVXh6d3MyQVd2MnBrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg=="
  },
  "howToVerify": [
    "1. sha256 от text должен совпадать с textHash:",
    "     jq -r .textB64 proof.json | base64 -d | sha256sum",
    "2. sha256 от record должен совпадать с recordHash:",
    "     jq -r .recordB64 proof.json | base64 -d | sha256sum",
    "3. подпись времени:",
    "     jq -r .timestamp.token        proof.json | base64 -d > token.tsr",
    "     jq -r .timestamp.query        proof.json | base64 -d > query.tsq",
    "     jq -r .timestamp.certificates proof.json | base64 -d > certs.pem",
    "     openssl ts -verify -in token.tsr -queryfile query.tsq -CAfile certs.pem",
    "   Ожидается: Verification: OK",
    "",
    "Хешировать нужно поля textB64 и recordB64, а не text и record:",
    "те печатаются текстом и теряют байты при разборе."
  ]
}