build013.spec.ts
tests/build013.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 013 AI workflow scanner',()=>{
test('complete workflow contains mapped risks',async({page})=>{await page.goto('/100-builds/013/a');await expect(page.getByRole('heading',{name:'RISK CONTAINED'})).toBeVisible();await expect(page.getByText(/INHERITED BUILD 012 STATE/)).toBeVisible();await expect(page.getByText('CONTROLLED USE',{exact:true})).toBeVisible();});
test('removing action controls exposes uncontrolled propagation',async({page})=>{await page.goto('/100-builds/013/a');await page.getByRole('button',{name:'REMOVE ACTION CONTROLS'}).click();await expect(page.getByRole('heading',{name:'UNCONTROLLED PROPAGATION'})).toBeVisible();await expect(page.getByText(/Notice and benefit action: define owner, control, stop authority, and monitoring/)).toBeVisible();});
test('reset exposes a truthful empty control state',async({page})=>{await page.goto('/100-builds/013/a');await page.getByRole('button',{name:'RESET / START EMPTY'}).click();await expect(page.getByRole('heading',{name:'UNCONTROLLED PROPAGATION'})).toBeVisible();await expect(page.getByText(/No workflow or personal data is transmitted/)).toBeVisible();});
test('exports explicit workflow scan',async({page})=>{await page.goto('/100-builds/013/a');const dl=page.waitForEvent('download');await page.getByRole('button',{name:'EXPORT WORKFLOW SCAN'}).click();expect((await dl).suggestedFilename()).toBe('ai-workflow-consequence-scan.json');});
test('canonical room is active and 015 remains planned',async({page})=>{await page.goto('/100-builds/013');await expect(page.getByText('BUILD 013 / 100 · IN THE LAB')).toBeVisible();await expect(page.getByRole('link',{name:/OPEN THE TOOL/})).toHaveAttribute('href',/\/100-builds\/013\/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/013/a');await expect(page.getByRole('button',{name:'EXPORT WORKFLOW SCAN'})).toBeVisible();expect(await page.evaluate(()=>document.documentElement.scrollWidth>document.documentElement.clientWidth)).toBe(false);});
});
test.describe('Build 013 risk circuit',()=>{
test('breaking a control lights the downstream path',async({page})=>{await page.goto('/100-builds/013/b');await page.getByRole('button',{name:'BREAK MODEL CONTROL'}).click();await expect(page.getByText('UNCONTROLLED PROPAGATION',{exact:true})).toBeVisible();await expect(page.getByRole('heading',{name:'ONE MISSING CONTROL BECOMES A DOWNSTREAM CONDITION.'})).toBeVisible();});
test('complete circuit retains non-approval boundary',async({page})=>{await page.goto('/100-builds/013/b');await expect(page.getByText('RISK CONTAINED',{exact:true})).toBeVisible();await expect(page.getByText(/does not calculate real-world probability or approve deployment/)).toBeVisible();});
});