v1.2.20: remaining Codex fixes — _op_results lock, advisory lock for scenarios, _ensure_schema logging, stale async generation token, validate-cfs explicit JSONDecodeError

This commit is contained in:
2026-07-31 18:07:24 +04:00
parent 58b823a260
commit 5065019ffd
7 changed files with 222 additions and 172 deletions
+9 -1
View File
@@ -208,6 +208,9 @@ async function loadStepParams(idx) {
const step = st.steps[idx];
if (!step.operation) return;
// Запомнить поколение рендера на момент старта async-загрузки
const renderGen = st._renderGen || 0;
const svcOpId = await resolveStepSvcOpId(idx);
if (!svcOpId) return;
step._svcOpId = svcOpId; // сохраняем для обратного маппинга при сохранении
@@ -233,6 +236,8 @@ async function loadStepParams(idx) {
// Рендер: клонируем def и подставляем сохранённые значения в defaultValue
const container = document.getElementById('step-' + idx + '-params');
if (!container) return;
// Проверка: не перезаписывать DOM если уже был новый renderEditor()
if (st._renderGen !== renderGen) return;
let html = '';
defs.forEach(p => {
const clone = Object.assign({}, p); // shallow copy
@@ -259,7 +264,10 @@ async function loadStepParams(idx) {
function renderEditor() {
snapshotAllParams(); // сохранить несохранённые правки перед перерисовкой
const st = scenarioEditorState;
// Инкремент поколения — защита от stale async (loadStepParams может вернуться
// уже после следующего renderEditor и перезаписать новый DOM старыми данными)
st._renderGen = (st._renderGen || 0) + 1;
const currentGen = st._renderGen;
let html = '<div style="padding:20px;max-height:90vh;overflow-y:auto;">';
// Заголовок