Skip to main content
← PROGRAM ARCHIVEFULL ARCHIVE RECORD
ALLOWLISTED DURABLE SOURCE

build009.spec.ts

tests/build009.spec.ts

This 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 009 place-sensitive technology readiness',()=>{
 test('default case is conditional and concretely inherits Build 003',async({page})=>{
  await page.goto('/100-builds/009/a');
  await expect(page.getByRole('heading',{name:'CONDITIONAL'})).toBeVisible();
  await expect(page.getByText(/Build 003 decision gap/)).toBeVisible();
  await expect(page.getByText(/does not prove safety, legality/i)).toBeVisible();
 });
 test('local constraints reshape the assessment',async({page})=>{
  await page.goto('/100-builds/009/a');
  const network=page.getByRole('group',{name:'Connectivity + offline continuity'});
  await network.getByLabel('Local capacity').fill('5');
  await expect(network.getByLabel('Local capacity')).toHaveValue('5');
 });
 test('reset reaches a truthful not-ready state',async({page})=>{
  await page.goto('/100-builds/009/a');
  await page.getByRole('button',{name:'RESET / START EMPTY'}).click();
  await expect(page.getByRole('heading',{name:'NOT READY'})).toBeVisible();
  await expect(page.getByText(/No place data was stored/)).toBeVisible();
 });
 test('exports an explicit local record',async({page})=>{
  await page.goto('/100-builds/009/a');
  const dl=page.waitForEvent('download');
  await page.getByRole('button',{name:'EXPORT LOCAL RECORD'}).click();
  expect((await dl).suggestedFilename()).toBe('place-readiness-record.json');
 });
 test('room is live in the lab and next canonical build is planned',async({page})=>{
  await page.goto('/100-builds/009');
  await expect(page.getByText('BUILD 009 / 100 · IN THE LAB')).toBeVisible();
  await expect(page.getByRole('link',{name:/OPEN THE TOOL/})).toHaveAttribute('href',/\/100-builds\/009\/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/009/a');
  await expect(page.getByRole('button',{name:'EXPORT LOCAL RECORD'})).toBeVisible();
  expect(await page.evaluate(()=>document.documentElement.scrollWidth>document.documentElement.clientWidth)).toBe(false);
 });
});

test.describe('Build 009 feasibility field',()=>{
 test('scenario changes the actual place state with text and structure',async({page})=>{
  await page.goto('/100-builds/009/b');
  await expect(page.getByRole('button',{name:'Connected metro office'})).toHaveAttribute('aria-pressed','true');
  await page.getByRole('button',{name:'Remote island service region'}).click();
  await expect(page.getByRole('heading',{name:'Remote island service region'})).toBeVisible();
  await expect(page.getByText(/offline continuity/i)).toBeVisible();
  await expect(page.getByRole('heading',{name:/Affected-community council/})).toBeVisible();
 });
 test('post-disruption scenario names a failed transfer assumption',async({page})=>{
  await page.goto('/100-builds/009/b');
  await page.getByRole('button',{name:'Post-disruption field site'}).click();
  await expect(page.getByText('TRANSFER ASSUMPTION FAILS')).toBeVisible();
  await expect(page.getByText(/Only people with local knowledge/)).toBeVisible();
 });
});