Vizen Shop

Troubleshooting: the API said yes, the site says no

/docs/troubleshootingcurrentМашинный перевод с английского· проверено 2026-08-20

Статус: current · проверенный: 2026-08-20, live звонки + source измерения владелец: гладиатр API документация · Служить: GET /docs/troubleshooting мастерство: vizen-troubleshoot

1.Что вы можете сделать здесь

Расскажи о трех состояниях, которые look Идентичное от клиента: письмо, отклоненное в веществ, а value Считано, но не считано widget, Изменения, которые действительно происходят тот page но невидима для вашего селектора. Эта область также поддерживает принятие Контрольный список, через который проходят все изменения в магазине before тот owner Говорят, что это done. 200 означает, что запись была сохранена, а не что value используется.

2. Решать first — тот order диагноз

Две проверки, в этом order, before Ты меняешь что-либо:

Шаг впередЧто ты делаешьЧто? result средство
1Перечитайте объект — GET /content-blocks и look в твоем valueУшел или изменился - написал отвергнутый по существу: неправильное гнездование level, неправильная форма, value За пределами числа, исправьте запись, а не widget.
2Открой. page в браузереприсутствует в объекте, но отсутствует на экране; → тот widget Не читать этот реквизит. Перестаньте настраивать текст; перейдите к §3.

Другой order расходы more: потерянный value выглядит точно так же, как ignored один.

⚠️ Селекторы уровня 1 должны пробить тень DOM. Уровень 1-1 own разметка, сделанная внутри Тень (призрак) div.vz-radius), и а plain document.querySelector делать Не вижу. Ан. empty result Это не доказательство того, что ваша наценка отсутствует. Перенесенная папка (level 3) является реальным page DOM. Для принятия браузера, предпочтите Локаторы драматурга, которые пронзают открытые тени корней (CSS/text локаторы, не XPath. Ручной DOM Оценка должна идти element.shadowRoot рекурсивно. Навигация с waitUntil: 'load': на live фоновая поверхность Запросы могут быть keep networkidle Затем ждите, пока будет виден бетон. card/image, Вместо того, чтобы лечить load Только принятие.

await page.goto(storefrontUrl, { waitUntil: 'load' });
const card = page.locator('.tl-family-catalog [vz-panes]').first();
await card.waitFor({ state: 'visible' });
// Click a chip, then inspect the visible pane, its SKU, price, image and cart id.

Измерение изображения внутри теней — все видимые <img> должен load Самый маленький Шаг рециркуляции, который покрывает slot (/w/<step>/…, лестница 32, 64, 128, 320, 640, 1024, 1600, 2048, 2560. DPR 1, 2 и 3; а empty Список - это пропуск:

const imgs = []
const walk = (root) => { for (const el of root.querySelectorAll('*')) { if (el.tagName === 'IMG') imgs.push(el); if (el.shadowRoot) walk(el.shadowRoot) } }
walk(document)
const L = [32, 64, 128, 320, 640, 1024, 1600, 2048, 2560]
imgs.filter((im) => im.getBoundingClientRect().width > 0 && im.currentSrc).map((im) => {
  const css = Math.round(im.getBoundingClientRect().width)
  const step = +(/\/w\/(\d+)\//.exec(im.currentSrc)?.[1] || 0)
  const need = L.find((w) => w >= css * devicePixelRatio)
  return { src: im.currentSrc, css, step, need }
}).filter((r) => !r.step || r.step > r.need)

Прокрутите page first (ленивый images load и повторения) и повторения after переключение Не заменяйте панелей. plain document.querySelectorAll — Он не видит Теневые корни и возврат empty "успех".

2а. Прочитать ошибки на транспорте

Нет универсального top-level code + ref + text конверт:

поверхностьОтвет на проверкуСледующий шаг
RPC-Методы каталогизацииHTTP status и error, обычно rpc error: code = … desc = …Определить маркер в desc; Проверьте паспорт на scope/contour отказы
Запрос не был рассмотрен (unknown field, неправильно type, а bytes field Не в базовой 64, нет body)400 {"error","code":"INVALID_REQUEST","message"}, тот field after колонисправить field; тот code в code, не входить desc = …
Не существует маршрута для этого метода и path404 {"error":"not_found","path","hint","docs"}проверить метод first (PATCH vs PUT), затем path
HTML/component освобождение validation422 {"error":"RELEASE_INVALID","report":{"errors":[…]}}входы имеют level, code, message; file и ref есть optional. Использовать /docs/components для manifest/TS ошибки и /docs/own-markup для освобождения ошибок
POST /docs/validate, несовершенный body400 {"error":"invalid_request","hint":"…"}отправлять {"sections":[…]}; Эта конечная точка не принимает конверт записи {"item":{"sections":[…]}}
POST /docs/validate, парсинг body200 с ok, findings[{path,status,why,allowed?}], summaryпроверять результаты даже на 200; существование организации и права на токены не проверяются;
находка's statusapplied · ignored (Держит, ничего не делает) · unknown (kind или value не понятый) · unverified (У нас нет schema для этого kind)только ignored и unknown делать ok false — unverified это gap В нашем обзоре, а не ошибка в вашем section, И не доказывает ничего ни в коем случае

Три тела side через side, с извлечением rule desc = ([A-Z_]+), затем code, затем error: /docs/tasks § Ошибочные тела.

Для PUT /content-blocks/{id}, использовать item.sections; не-empty Список заменят все sections. отказываться sections Оставьте их в покое; [] не ясно их. Не посылайте validation body непосредственно как block обновление.

unknown с why: "schema unavailable …" означает, что ссылка не имеет собственности schema для этого widget. Это делает не Доказать, что имущество не поддерживается: соблюдать договор на территорию и проверять предоставленную page. Например, в HTML slot читать props.html Хотя и генерируется schema отсутствует.

3.Безмолвно ignored — Известные случаи

Для конфигурации webhook (apiaccess), а PAT получать PAT_METHOD_NOT_ALLOWED независимо от того, contour; использовать разрешенный owner Сессия. forms/CRM проверить /docs/forms: пропавший scopes может потерпеть неудачу first; с достаточным scopes, PAT_CONTOUR_MISMATCH означает live Операция закрыта для этого dev key, Не то чтобы more scopes исправлять это; FORM_VALIDATION_FAILED требует исправления представленных fields. А. CRM sandbox это Совет, а не dev Изоляция. POST /form-leads с а PAT принимает анонимный prod path; test-lead - Отправляет реальные уведомления. delivery-free dev-PAT test. Нет такого test подразумевается под include_test на чтение.

симптомПричинаИсправлять
vz-lead ничего не делаетЗарезервированный атрибут без обработчика времени выполненияиспользовать <a href="form:7">…</a> для платформы form
а filter Вернуть весь каталогПараметр был написан без filter. prefix; ?category_id=168 не является а field По просьбе, поэтому он проглатывает и total Оставаться в full countfilter.category_id=168
а value Вне рамок рисует default †unknown перечислять values принимаются молча, нет errorбрать values из GET /docs/widgets
а menu или footer link как бы plain texthref не поддерживается key в siteHeader.links / siteFooter.columns; тот label Печатается внутри а <span> и link мертвый{label, url} или {label, target:{type,id}}
a выпадающий или модальный вырезается off в block крайТеневой хозяин div.vz-radius клипы когда `props.overflow` отсутствует. Ось достигает этого узла — block как бы clip={props.overflow !== 'visible'} — Но группа's default это "visible" Пока тень хозяина's это clip, Так для одного html block "key «Отсутствующий» не «видимый»". /docs/widgets Теперь так сказано в оси text; Старые копии неset props.overflow: "visible" на block. position: fixed Для этого больше не нужно (own-markup.md §5.1, §5.6)
а custom header не останавливаться — И это твой own разметкаТеперь она должна заклеиться: проволока была построена 2026-08-19, и оба props.position: "sticky" и vz-sticky Дотянуться до группы на page зонах, на layout Зоны (зоны) chrome-чехол для набора) и на columns Если это все еще не так: block sets props.overflow: "clip", и срезывание поражений предков stickydrop overflow: "clip" на этом block, или move Вырезка внутри вашей разметки. position: fixed И еще один измеримый спайсер Больше не нужно — Прекратите его прописывать
а платформа header, menu или footer Не останавливаться от props.positionЭти виды рисуют свои own Группа и The Band block wrapper never Бежит за ними (CHROME_KINDS), нет wrapper style Ничего не хранится неправильно; ничто не читает его.тот header имеет свой own переключатель: props.sticky: true на siteHeader section. siteMenu и siteFooter иметь none — положите own Наценка в комплекте вместо (own-markup.md §5.7)
а level-1 widget Для тех, кто не имеет site's шрифты и цветаРаньше он изолировал теневой корень в обоих направлениях. С 2026-09-13 гг. layout's таблицы стилей помещаются внутри корня тени, и разметка обернута в .vz-theme-{doc} Вот так вот, theme Если он все еще выглядит голым - page не имеет layout В общем, или rule является составным селектором (body.dark), который является never перекочевать на page кореньсвязывание layout в shop (chrome.md §3.6, или move это class на свой own корневой элемент (own-markup.md §7.2)
а level-2 menu Открывается только панель after Короткая паузаНе жук. Сервер печатает menu Панели в пределах HTML в пределах бюджета узла; корень, который не помещался, загружает свою панель на first щелкнуть GET /categories?view=menu, Один запрос на вкладкуНичего не починишь. own header Не влияет — бюджет принадлежит платформе siteMenu
а block наклеивать на live site Но не в том, admin editorтот editor Канвас не спрашивает у wrapper Для хостинга; хостинг делаетпроверить shop URL, Не в том preview. Не «исправляйте» его
DELETE Неудачи с invalid request body †Конечная точка требует bodyотправлять {}
два product cards на одном product page †ограниченный layout block плюс resource's own упакованный cardchrome.md, card замена
productListing props.container.fill Принято, полоса неокрашена †документированный в wrapper.axes, не реализовано: ни --vz-fill ни class появляется в накладке; пять forms из value были опробованыnone сегодня
а type style В других случаях value †siteHeader.nameStyle.weight: 800 600 рендеров; siteMenu.labelStyle.size: 13 15-я серия - The widget Не берите то, что вы отправилиnone сегодня; own разметка, если exact value вопросы

† перенесенные с предыдущего пробега's отчет и не переоцененный на 2026-08-19 — сообщается, не доказано. Все, что вы найдете, что не перечислено, принадлежит Здесь в качестве именованного случая, с конфигурацией, на которой вы измеряли (§ 4)).

Закрыт со времени предыдущего запуска, не сообщайте повторно: own разметка и любые другие не-chrome block не останавливаться — props.position: "sticky" и vz-sticky оба работа с 2026-08-19 (§7); что сохранилось, так это более узкий список в §3, и sticky больше не нуждается в fixed-header форекс; преднамеренный fixed дизайн Оставайтесь в силе. Также закрыто: ответ резизера HEAD 404, и он отвечает HEAD и GET Как сейчас — измерено 2026-08-20, оба 200 image/webp на api.vizen.shop и на этом shop ведущий. HEAD Это прекрасный способ Проверьте, что это image URL Также закрыто: "The page scope Не имеет списка products" (products[] это live — own-markup.md §2) и "этого overflow ось never достигает узла, который клипсирует (это делает) — row 1 из этой таблицы).

Для plain group Плитка проверяет доступ атрибутов (/docs/catalogue §8.3); потерянный selectors/CSS Проверка условий /docs/own-markup §4; для смещенных желобов проверить /docs/chrome §3.7 Отклоненный застройщик-group Запись или застывшая сетка /docs/chrome §3.1 и в replacement/rollback рецепт /docs/components §4.8.

4.Находка - это измерение плюс условия измерения

The rule Эта область существует для принуждения, купленная с реальной ошибкой..

Претензия. Предыдущий забег сообщил: "siteMenu.level2 Объявляем; с source: "categories" Нет никаких выпадающих ссылок; клиент получает плоский список всех 83 categories без родителей". Он был подан как дефект платформы, и vizen-webcoding-contract.json Все еще перечисляет его в silently_ignored. Эта запись Ошибочно и является superseded здесь.

Что показала переоценка. The menu block (id 2085) был сконфигурирован source: "custom", level2: false, Три рукописных items — а mode без выпадающие design. Пробег проверил переключатель-off Об этом сообщает и сообщает The Обратимый эксперимент, а затем set block 2085 год до source: "categories", level2: true: "Каталога"" item выполненный как <button> вместо того, чтобы <a> — ан item становится button Когда именно level2 && children.length > 0, так Дети действительно приехали — и щелчком мыши открылась панель с 82 субмарина-section ссылки, tree Полный, родители на месте. block был возвращен в custom / level2: false / три items И откат был проверен.

Зерно истины в документации, а не в code. The widget schema Скриншоты Sub-sections drop вниз парить; Панель открывается на щелкнуть, и настоящий Мышиное движение не открывает его. Пробег проверил висит, ничего не видел, и осуждает механизм. error в description Сколько стоит то, что error в code затраты — этот отправил соседний чат на переработку всего направления.

The rule. "X не работает и X не открывается на паровозе с source: categories, level2: true" Это разные утверждения, и first Отправляет в переделку целое направление. Запишите конфигурацию, которую вы измеряли.: block id, тот props Как читаешь в обратном порядке, URL, видоискатель width, Висеть или щелкать. Семь претензий, выдвинутых в ходе этого обзора, шесть из которых были удовлетворены, а одно было отклонено, и одно из них было отклонено. Это был единственный, который был получен из чтения. code вместо измерения.

5. Контрольный список приемки

Запускай все это before говорить owner Ты - это ты. done.

  • [ ] тот pages Ты сделал это не Прикосновение не изменилось — дом page и два sections; curl показывает то же самое data-vz-kit и none Ваша разметка;
  • [ ] тот page открывать непосредственно URL и с помощью link внутри щелкающий site — Они отличаются друг от друга code Сценарии и пути ведут себя по-разному на каждом из них.;
  • [ ] after в-site click: dropdowns open, modes open, timers run (платформа) Руководители должны повторно инициализировать, и это то, где они обычно не);
  • [ ] тот header трюмы на 375/520/700/900/1024/1440/1600 не только на твой width; top из одного sticky header = 0, если page прокручивается;
  • [ ] для sticky header, предпочитать props.position / vz-sticky; если design потребности position: fixed, проверить наличие якоря в порту обзора и что content это Не покрыты. Действительны фиксированные рельсы, модальные и фары level-3 Дизайн;
  • [ ] горизонтальной прокрутки на page body В любой из этих ширин;
  • [ ] тот cart Действительно принимает item — Нажмите, смотрите, как растет счетчик, проверьте button брать vz-state="in-cart";
  • [ ] твой text присутствует в сырой HTML: curl <page> | grep '<phrase>'. Если его нет, поисковые системы never Смотри.;
  • [ ] images Подается через резинер (/w/<width>/webp/…), не как Оригиналы из storage.yandexcloud.net;
  • [ ] тот owner Рассказывают о реальных компромиссах, таких как копирование вручную. Каталоговые цены или недостающие paging; custom CSS Одинокий не является обходным путем;
  • [ ] по крайней мере один скриншот из реального браузера.

6. Мера, не угадывай.

Используйте браузер для проверки визуализированного page. Коды состояния cannot Скажи мне Открывается ли выпадающий или header Три правки из восьми в Предыдущий проект выглядел успешным status code И ничего не менял в site.

В этом забеге 18% из них steps Проверка браузера была самой дешевой из 18% Строить из — Все выводы, которые выдержали обзор, были получены из измерения, и Тот, который не пришел из чтения code Вместо этого, тот же самый пробег 21% — на поиски того, что было возможно, и 12% — на переделку. after изменение курса: 33% чистых потерь. Диагностика не дорогая часть..

7.Как это было проверено

Живи shop kiberpank.vizen.shop, 2026-08-19:

  • витрина /neon-grid Разобрали и разобрали (683) KB наценка); menu, categories, products и chrome 2087, запрашиваемый по API;
  • рециркулирующий прибор, измеренный на одном URL: HEAD → 404, GET → 200 image/webp (superseded 2026-08-20 - см. ниже);
  • wrapper chain измеряется в реальном браузере через теневые корни — div.vz-box overflow: visible → div.vz-inner overflow: visible → div.vz-radius overflow: clip + Тень (The Shadow root) chain держатся; что Изменение заключается в том, что последний узел теперь переключаем — см. ниже);
  • siteMenu.level2 переизмеряется обратимой записью на menu block 2085, 82 субподряд-section Ссылки, засчитанные в открытой панели, block Откат назад и откат назад проверенный;
  • тот filter. prefix Подтверждено против api/catalog/catalog.proto:2768-2783: GetProductsRequest несет вложенный Filter message с category_id, так тот query параметром является filter.category_id и голый category_id не является а field По просьбе;
  • rows отмеченные † в § 3, взятые из предыдущего прогона и были не переизмеренный.

Повторное измерение 2026-08-20 — три rows 3 были несвежими, и один из трех был застой в противоположном направлении от того, что предполагал контрольный список:

  • рециркулирующий и `HEAD`. curl -I и curl На том же live URL (/w/640/webp/vizen-prod-files/sunset/view/product/e3/83/…​.png) ответ 200 `image/webp` оба пути, на api.vizen.shop и на этом shop Хозяин такой же. Причина 404-го заключается в source и является fixed: imgserve.go Теперь регистры mux.Head("/w/{width}/*", resize) Рядом с ним Get, Потому что чи не получать HEAD из GET. Ворота: storefront/test/image-slicing.test.mjs · "HEAD , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , GET". The row это deleted, не редактировался: Нет молчаливого провала, который можно описать;
  • тот `overflow` ось. SectionHtmlInline.tsx и SectionHtml.tsx оба render Теневой хозяин как clip={section.props?.overflow !== 'visible'}, так Ось достигает узла, который фактически зажимает. true — И теперь это row's content — Это означает, что эффективное default для одного html block это clip в то время как /docs/widgets реклама "visible". Ворота: storefront/test/wrapper-sticky-clip.test.mjs;
  • тот custom header. Не было еще в тот час и не для того, чтобы документированный reason: Обнаружен репо-широкий поиск htmlSticky написанный в storefront/src/islands/ZoneSections.tsx и нигде не читать, и <SectionBox В восьми местах, none который прошел sticky. Ветвь существовала; Провода не было. ⚠️ wrapper-sticky-clip.test.mjs был зеленый Через все Потому что он утверждает, что *форма* из source, Не то, чтобы что-то связывало Два конца. Ворота формы. cannot См. отключенный провод - урок §4, applied Врата вместо находок.

Проволока была построена в тот же день, и row В § 3 переписывается с result. Что изменилось, измеряется на отрисованной разметке, а не на source форма:

  • sectionSticky() Теперь вопрос задает section список (packages/sections/src/PageSections.tsx) и вложенным blocks из columns widget, так props.position: "sticky" и vz-sticky Оба доходят до группы. chrome-комплект path проходит через то же самое Список, который является why а custom header в kit.top палки;
  • тот order ветви внутри wrapperFrameStyle() Изменилось с ним: фон layer привыкший set position: relative последний и переписанный sticky, группа с фоном never Застрял даже там, где существовала проволока. Этот невидим для всех ворот, читающих source text;
  • Три поверхности все еще не спрашивают, и § 3 называет каждую: три chrome виды (тот wrapper И не бежит за ними вовсе), vz-sticky внутри columns Ребенок и его editor холст;
  • тот new Ворота читают style атрибут разметки, передаваемый через react-dom/server (storefront/test/wrapper-render.test.mjs), который является только kind Врата, которые могли бы уловить любой дефект.

8.Отрицания в этом document (rule §3.9)

Каждый row § 3 — это отрицание, то есть то, из чего состоит область, поэтому эта таблица Это область's own Список регрессии. row Без ворот переоценивают after каждый волна; а row Когда падают ворота, они становятся красными.

Претензиясхваченный true через
голый category_id не является а field По просьбе (§3))source-прикрепленный: api/catalog/catalog.proto GetProductsRequest.Filter. No Gate — переименование в Nested message Оставить это text стоящий
unknown перечислять values принимаются молча (§ 3))after-волновой проход — переносимый, never измеряется здесь
href не является а key из siteHeader.links (§3)after-Прохождение волны — нет ворот
Теневой хост клипс когда props.overflow незавершенный (§3))ворота storefront/test/wrapper-sticky-clip.test.mjs — Он выдает выражение, которое *это* тот default
vz-sticky и props.position Дотянуться до группы на page зоны, layout зон и columns Дети (§ 3))ворота storefront/test/wrapper-render.test.mjs — Он читает style Это положительное утверждение; оно заменило отрицание, а ворота заменили ворота формы, которые не могли видеть провода.
Три из них chrome виды, columns + vz-sticky, и editor Canvas все еще делает не Спрашивайте (§ 3))after-волна проходит мимо Поиск, а не ворота — CHROME_KINDS Ранний возврат в SectionBox, тот columns звонить site не проходит htmlSticky, Канвасные сайты звонков не проходят sticky Здесь ничего не краснеет, когда один из них подключен, так что переизмерьте before повторяя претензию
DELETE нуждается в body † (§3)after-волновой проход — переносимый, never измеряется здесь
props.container.fill документируется и не реализуется (§ 3))after-Проход волны — переносится; принадлежит widgets.md
type стили render В другой раз value † (§3)after-Проход волны — переносится; принадлежит widgets.md
Ответы рециркулирующего HEAD (§3, закрыто row)ворота storefront/test/image-slicing.test.mjs · "HEAD , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , GET" — единственный reason Эта коррекция cannot вращать
document.querySelector не пересекает теневой корень (§ 2))Поведение платформы DOM, Не наш — ничего не врата

⚠️ Урок, который эта таблица несет. Две из вышеперечисленных позиций являются зелеными. Ворота, которые не поймали бы дефект, который они охраняют: ворота, которые читают source для *форма* Он имеет форму, а разбитый провод имеет правильную форму. Когда отрицание имеет значение, переоцените его так, как требует § 4 - на Бег, с условиями, записанными - и относиться к воротам как к Напоминание, а не доказательство.

Исходник: https://api.vizen.shop/docs/troubleshooting?full=1

Работает в демо-режиме