build012.spec.ts
tests/build012.spec.tsThis is the retained record itself—not a chat summary. It is exposed because it materially documents the research, method, evidence, audit, production, planning or release history of The 100.
import {test,expect} from '@playwright/test';
test.describe('Build 012 AI consequence controls',()=>{
test('default essential-service use is controlled and structurally complete',async({page})=>{await page.goto('/100-builds/012/a');await expect(page.getByRole('heading',{name:'CONTROLLED USE'})).toBeVisible();await expect(page.getByText(/Build 010 model/)).toContainText('VALID SKELETON');await expect(page.getByText(/Human review/)).toContainText('Strong');});
test('missing controls escalates a severe use',async({page})=>{await page.goto('/100-builds/012/a');await page.getByRole('button',{name:'REMOVE APPEAL CONTROL'}).click();await expect(page.getByRole('heading',{name:'ESCALATE / DO NOT DEPLOY'})).toBeVisible();await expect(page.getByText('Define the appeal or contest path.')).toBeVisible();});
test('consequence range changes the score',async({page})=>{await page.goto('/100-builds/012/a');await page.getByLabel('Rights impact').fill('1');await expect(page.getByText(/CONSEQUENCE/)).toBeVisible();});
test('reset exposes empty control gaps truthfully',async({page})=>{await page.goto('/100-builds/012/a');await page.getByRole('button',{name:'RESET / START EMPTY'}).click();await expect(page.getByRole('heading',{name:'GAPS TO CLOSE'})).toBeVisible();await expect(page.getByText(/No identity or use data is transmitted/)).toBeVisible();});
test('exports explicit control map',async({page})=>{await page.goto('/100-builds/012/a');const dl=page.waitForEvent('download');await page.getByRole('button',{name:'EXPORT CONTROL MAP'}).click();expect((await dl).suggestedFilename()).toBe('ai-use-control-map.json');});
test('canonical room is active and 015 remains planned',async({page})=>{await page.goto('/100-builds/012');await expect(page.getByText('BUILD 012 / 100 · IN THE LAB')).toBeVisible();await expect(page.getByRole('link',{name:/OPEN THE TOOL/})).toHaveAttribute('href',/\/100-builds\/012\/a\/?$/);await page.goto('/100-builds/015');await expect(page.getByText('BUILD 015 / 100 · COMING NEXT')).toBeVisible();});
test('functional artifact fits 320 CSS pixels',async({page})=>{await page.setViewportSize({width:320,height:800});await page.goto('/100-builds/012/a');await expect(page.getByRole('button',{name:'EXPORT CONTROL MAP'})).toBeVisible();expect(await page.evaluate(()=>document.documentElement.scrollWidth>document.documentElement.clientWidth)).toBe(false);});
});
test.describe('Build 012 consequence field',()=>{
test('dimensions visibly reconfigure control load',async({page})=>{await page.goto('/100-builds/012/b');await page.getByRole('button',{name:'SEVERE CONSEQUENCE'}).click();await expect(page.getByRole('heading',{name:'ESCALATE / DO NOT DEPLOY.'})).toBeVisible();await expect(page.getByText(/Rights or essential-service consequences/)).toBeVisible();});
test('low consequence retains a truthful boundary',async({page})=>{await page.goto('/100-builds/012/b');await page.getByRole('button',{name:'LOW CONSEQUENCE'}).click();await expect(page.getByRole('heading',{name:'DOCUMENT THE USE.'})).toBeVisible();await expect(page.getByText(/cannot approve the use/)).toBeVisible();});
});