build011.spec.ts
tests/build011.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 011 entity resolution',()=>{
test('default record pair is a merge candidate with valid Build 010 model',async({page})=>{await page.goto('/100-builds/011/a');await expect(page.getByRole('heading',{name:'MERGE CANDIDATE'})).toBeVisible();await expect(page.getByText(/Build 010 model/)).toContainText('VALID SKELETON');});
test('authoritative conflict keeps records separate',async({page})=>{await page.goto('/100-builds/011/a');await page.getByLabel(/Conflicting controlling owner/).check();await expect(page.getByRole('heading',{name:'KEEP SEPARATE'})).toBeVisible();await expect(page.getByRole('listitem').filter({hasText:'Conflicting controlling owner'})).toBeVisible();});
test('removing unique evidence requires human review',async({page})=>{await page.goto('/100-builds/011/a');await page.getByLabel(/Same authoritative registry identifier/).uncheck();await expect(page.getByRole('heading',{name:'HUMAN REVIEW'})).toBeVisible();});
test('reset reaches a truthful local empty state',async({page})=>{await page.goto('/100-builds/011/a');await page.getByRole('button',{name:'RESET / START EMPTY'}).click();await expect(page.getByRole('heading',{name:'HUMAN REVIEW'})).toBeVisible();await expect(page.getByText(/No identity data was stored/)).toBeVisible();});
test('exports explicit resolution record',async({page})=>{await page.goto('/100-builds/011/a');const dl=page.waitForEvent('download');await page.getByRole('button',{name:'EXPORT RESOLUTION'}).click();expect((await dl).suggestedFilename()).toBe('entity-resolution-record.json');});
test('canonical room is active and 012 is active; 015 remains planned',async({page})=>{await page.goto('/100-builds/011');await expect(page.getByText('BUILD 011 / 100 · IN THE LAB')).toBeVisible();await expect(page.getByRole('link',{name:/OPEN THE TOOL/})).toHaveAttribute('href',/\/100-builds\/011\/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/011/a');await expect(page.getByRole('button',{name:'EXPORT RESOLUTION'})).toBeVisible();expect(await page.evaluate(()=>document.documentElement.scrollWidth>document.documentElement.clientWidth)).toBe(false);});
});
test.describe('Build 011 identity field',()=>{
test('evidence changes resolution state structurally',async({page})=>{await page.goto('/100-builds/011/b');await expect(page.getByText('HUMAN REVIEW',{exact:true})).toBeVisible();await page.getByRole('button',{name:'AUTHORITATIVE ALIGNMENT'}).click();await expect(page.getByText('MERGE CANDIDATE',{exact:true})).toBeVisible();await expect(page.getByRole('heading',{name:'REVIEW, RECORD, THEN MERGE.'})).toBeVisible();});
test('hard conflict exposes non-merge decision and boundary',async({page})=>{await page.goto('/100-builds/011/b');await page.getByRole('button',{name:'AUTHORITATIVE CONFLICT'}).click();await expect(page.getByText('KEEP SEPARATE',{exact:true})).toBeVisible();await expect(page.getByRole('heading',{name:'DO NOT MERGE.'})).toBeVisible();await expect(page.getByText(/Similarity does not establish legal identity/)).toBeVisible();});
});