mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-18 16:49:41 +03:00
2a71e6c980
Второй вход в ту же ловушку: публикация без пользователя (нет Usr= в vrd). Клиент показывает диалог «Пользователь/Пароль/Войти», ввод учётных данных движок не поддерживает — но вместо ошибки он ждал 67.7с, а затем closeModals() жал Escape и диалог ИСЧЕЗАЛ. Оставалась пустая страница, объявленная здоровым стартом, и дальше та же ложь про «режим отображения панели». Разведка изменила постановку в двух местах: 1. Улику затирал сам движок. Замерено: одного Escape достаточно, чтобы форма логина пропала. Поэтому детект обязан отработать ДО closeModals. 2. Комментарий «страница логина легитимна» оказался фикцией: войти руками через start было невозможно и раньше — движок сам уничтожал форму. Значит падать тут ничего не ломает, и развилка «в раннере падать, в интерактиве нет» отпадает. Комментарий переписан, чтобы следующий читатель не поверил ему больше, чем коду. Хуже, чем с лицензией: на диалоге авторизации сеанс 1С УСПЕВАЕТ создаться и держит лицензию впустую. Поэтому connect() освобождает его (disconnect) перед тем, как ошибка уйдёт наверх: cmdStart зовёт connect без catch, run.mjs не оборачивает команду, а убийство процесса лицензию не освобождает. - session.mjs (v1.19→v1.20): +1 якорь #authWindow в тот же предикат, своё сообщение с рецептом (-UserName → Usr=/Pwd=), очистка в connect(). - start.mjs (v1.0→v1.1), run.mjs (v1.0→v1.1): стартовый блокер — это диагноз, а не крах. Три строки и код 1 вместо стека, который указывал внутрь session.mjs и читался бы как поломка движка (модель пошла бы чинить не то). Проверено вживую: - шаг 0 (до кода): #authWindow не существует на здоровых стартах — ни в клиенте, ни при загрузке; проверено и на bpdemo с автологином (19.5с, опрос 100мс); - позитивный контроль на bpdemo-auth (BP_DEMO без Usr=): бросок за 2.7с вместо 67.7с, слот убран из реестра, лицензия вернулась — 6/6; - то же через connect(): сообщение, браузер закрыт, сеанс освобождён; - негативный контроль: полный регресс 25/25, ноль ложных срабатываний; start на bpdemo (автологин) поднимается штатно; - попутно на испорченном прогоне (сам съел лицензию соседней сессией) детект отработал в раннере на НАСТОЯЩЕМ дефиците: два мультиконтекстных теста упали с внятной причиной, остальные 23 прошли — прогон поехал дальше. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
42 lines
1.3 KiB
JavaScript
42 lines
1.3 KiB
JavaScript
// web-test cli/commands/start v1.1
|
|
// Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
|
import http from 'http';
|
|
import { writeFileSync } from 'fs';
|
|
import * as browser from '../../browser.mjs';
|
|
import { out, die } from '../util.mjs';
|
|
import { SESSION_FILE, cleanup } from '../session.mjs';
|
|
import { handleRequest } from '../server.mjs';
|
|
|
|
export async function cmdStart(url) {
|
|
if (!url) die('Usage: node src/run.mjs start <url>');
|
|
|
|
// A startup blocker (no free 1C licence, publication asking for credentials) is a diagnosis,
|
|
// not a crash — connect() already released the seance and closed the browser, so print the
|
|
// message and leave instead of dumping a stack trace that reads like an engine failure.
|
|
let state;
|
|
try {
|
|
state = await browser.connect(url);
|
|
} catch (e) {
|
|
die(e.message);
|
|
}
|
|
|
|
const httpServer = http.createServer(handleRequest);
|
|
httpServer.listen(0, '127.0.0.1', () => {
|
|
const port = httpServer.address().port;
|
|
const session = {
|
|
port,
|
|
url,
|
|
pid: process.pid,
|
|
startedAt: new Date().toISOString()
|
|
};
|
|
writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
|
|
out({ ok: true, message: 'Browser ready', port, ...state });
|
|
});
|
|
|
|
process.on('SIGINT', async () => {
|
|
await browser.disconnect();
|
|
cleanup();
|
|
process.exit(0);
|
|
});
|
|
}
|