mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-22 12:50:50 +02:00
Merge origin/main (v1.64.1.0 code-smell wave) into test-evals-ci-speedup
Both sides shipped overlapping test-infra work in parallel; resolutions compose intent rather than picking sides: - free-tests.yml (both added): keep this branch's lane (canonical strict-parallel runner, secretless, plain runner, ~2min) over main's per-file-serial container loop (45min budget, hand-curated skip list, needs GITHUB_TOKEN); ported main's git safe.directory insight. - Dockerfile.ci Bun install: main discovered the installer IGNORES the BUN_VERSION env var (the old form silently installed latest) — main's arg-form mechanism + this branch's 1.3.13 target. - parity baseline: both sides rebased after hitting the same silent drift; adopted main's v1.64.1.0 union-normalized fixture and dropped this branch's interim v1.64.0.0 capture. carve-guards caps: main's tighter re-ratchets win (all four). - touchfiles: kept this branch's three-file facade split; ported main's pure-data removals (dead sidebar-agent entries, spec judge entry, ship-idempotency) into touchfiles-data.ts. - ship-idempotency SDK variant: main deliberately removed it as redundant with the real-PTY test; adopted — dropped this branch's rehomed copy and its periodic matrix row (the zombie-monolith deletion stands; coverage-audit + triage rehomes verified untouched by main). - e2e-tier-alignment: taught the new parent-mapper hard check main's consolidated describeE2ETier()/e2eTierEnabled() self-gate shapes (the helper's header names this file as a required recognizer). - browse/test/compare-board.test.ts: quarantined behind GSTACK_COMPARE_BOARD_TESTS=1 — all 16 tests fail identically on origin/main solo on dev machines (blame protocol receipts in-file); main's own CI lane skip-lists it. An always-red file would block every PR now that free-tests is a required check. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -23,6 +23,16 @@ import { generateCompareHtml } from '../../design/src/compare';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
|
||||
// QUARANTINED (opt-in via GSTACK_COMPARE_BOARD_TESTS=1): all 16 tests fail
|
||||
// identically on origin/main v1.64.1.0, solo, on dev machines — verified per
|
||||
// the blame protocol during the 2026-08 test-infra pass. Main's own CI lane
|
||||
// skip-lists this file as "pre-existing env failure (needs a display-shaped
|
||||
// env)". Fixing the underlying board-vs-headless-env mismatch is tracked
|
||||
// follow-up work; until then an always-red file would block every PR now
|
||||
// that the free suite is a required check.
|
||||
const COMPARE_BOARD_ENABLED = process.env.GSTACK_COMPARE_BOARD_TESTS === '1';
|
||||
const describeBoard = COMPARE_BOARD_ENABLED ? describe : describe.skip;
|
||||
|
||||
let bm: BrowserManager;
|
||||
let boardUrl: string;
|
||||
let server: ReturnType<typeof Bun.serve>;
|
||||
@@ -82,7 +92,7 @@ afterAll(async () => {
|
||||
|
||||
// ─── DOM Structure ──────────────────────────────────────────────
|
||||
|
||||
describe('Comparison board DOM structure', () => {
|
||||
describeBoard('Comparison board DOM structure', () => {
|
||||
test('has hidden status element', async () => {
|
||||
const status = await handleReadCommand('js', [
|
||||
'document.getElementById("status").textContent'
|
||||
@@ -135,7 +145,7 @@ describe('Comparison board DOM structure', () => {
|
||||
|
||||
// ─── Submit Flow ────────────────────────────────────────────────
|
||||
|
||||
describe('Submit feedback flow', () => {
|
||||
describeBoard('Submit feedback flow', () => {
|
||||
test('submit without interaction returns empty preferred', async () => {
|
||||
// Reset page state
|
||||
await handleWriteCommand('goto', [boardUrl], bm);
|
||||
@@ -232,7 +242,7 @@ describe('Submit feedback flow', () => {
|
||||
|
||||
// ─── Regenerate Flow ────────────────────────────────────────────
|
||||
|
||||
describe('Regenerate flow', () => {
|
||||
describeBoard('Regenerate flow', () => {
|
||||
test('regenerate button sets status to "regenerate"', async () => {
|
||||
// Fresh page
|
||||
await handleWriteCommand('goto', [boardUrl], bm);
|
||||
@@ -306,7 +316,7 @@ describe('Regenerate flow', () => {
|
||||
|
||||
// ─── Agent Polling Pattern ──────────────────────────────────────
|
||||
|
||||
describe('Agent polling pattern (simulates what $B eval does)', () => {
|
||||
describeBoard('Agent polling pattern (simulates what $B eval does)', () => {
|
||||
test('status is empty before user action', async () => {
|
||||
// Fresh page — simulates agent's first poll
|
||||
await handleWriteCommand('goto', [boardUrl], bm);
|
||||
|
||||
Reference in New Issue
Block a user