Newer
Older
rpg / apps / game / tools / checks / agent-invariants.mjs
/**
 * Сценарий agent:invariants — мост жив, мир стабилен.
 * Новая игра -> 300 фиксированных шагов -> движковые/сценические/контентные
 * инварианты не содержат ошибок.
 * Запуск: node tools/agent.mjs run tools/checks/agent-invariants.mjs
 */
import { withChecks } from '../lib.mjs';

export default async function ({ pretty }) {
    return withChecks(
        'agent-invariants',
        async (t) => {
            await t.c.run('новая игра через мост', async () => {
                await t.boot();
                const s = await t.ctx.agent.snapshot();
                t.c.expect(s.scene === 'location', 'сцена не location', { scene: s.scene, err: s.error });
                return null;
            });
            await t.c.run('300 шагов без ошибок инвариантов', async () => {
                await t.ctx.agent.step(300);
                await t.expectInvariantsClean('после 300 шагов');
                return null;
            });
            await t.c.run('снапшот содержит героя и флаги', async () => {
                const s = await t.ctx.agent.snapshot();
                t.c.expect(!!s.hero?.tile, 'нет s.hero.tile', s);
                t.c.expect(Array.isArray(s.flags), 'нет s.flags');
                return null;
            });
        },
        { pretty }
    );
}