Observed November 3,2026 Asia/Shanghai at https://calcbe.com/en/tools/team-generator/ Synthetic labels one per line: M01 Aster,M02 Birch,M03 Cedar,M04 Elm,M05 Fern,M06 Grove. Two teams; Advanced; RNG Seeded; seed 40; Normalize checked; Deduplicate unchecked; Avoid pairs empty; names Auto. Keep together M01 Aster+M03 Cedar -> Generate; save visible warning area and team cards. Change only M03 to m03 in rule -> Generate; record ignored-name warning despite constraints=on and Aster/Cedar apart. Separate recorded comparison M01 Aster+m02 Birch -> warning but Aster/Birch together; do not infer successful binding from coincidence. Correct M03 spelling -> Generate, restores exact-Cedar recorded teams; lowercase-Cedar replay restores warning and separated pair. No real participants. Third-party software may change. This archive is our UI transcription, not an original CSV download. An attempted Copy all was interrupted by an ad and is not used as evidence. Local archive check: sends no requests. Save binding-observations.txt beside verify.cjs containing the following code, then run node verify.cjs. const fs=require('fs'),assert=require('assert/strict'); const rows=JSON.parse(fs.readFileSync('binding-observations.txt','utf8')); const get=n=>rows.find(r=>r.file===n+'.json'); const value=(r,id)=>r.form.find(x=>x.id===id).value; const warn='Some keep-together names were not found and were ignored. (1)'; const teams=r=>r.main.split('constraints=on')[1].split('How to build fair groups')[0].trim(); for(const r of rows){assert.equal(value(r,'teamg-seed'),'40');assert.equal(value(r,'teamg-teams'),'2');assert.equal(value(r,'teamg-rng-mode'),'seeded');assert.equal(value(r,'teamg-participants'),'M01 Aster\nM02 Birch\nM03 Cedar\nM04 Elm\nM05 Fern\nM06 Grove');} const good=get('n3-exact-cedar'),bad=get('n3-mismatch-cedar'),chance=get('n3-case-mismatch'); assert.equal(value(good,'teamg-keep-together'),'M01 Aster+M03 Cedar');assert.equal(value(bad,'teamg-keep-together'),'M01 Aster+m03 Cedar');assert.equal(value(chance,'teamg-keep-together'),'M01 Aster+m02 Birch'); assert(!good.warningShown);for(const r of [bad,chance,get('n3-mismatch-replay')])assert(r.warningShown&&r.main.includes('constraints=on')); assert(teams(good).includes('M01 Aster\nM03 Cedar\nM02 Birch'));assert(teams(bad).includes('M02 Birch\nM06 Grove\nM01 Aster\nTeam B\nCopy team\nM04 Elm\nM05 Fern\nM03 Cedar')); assert.equal(teams(good),teams(get('n3-corrected')));assert.equal(teams(bad),teams(get('n3-mismatch-replay')));assert(teams(chance).includes('M02 Birch\nM06 Grove\nM01 Aster')); console.log('PASS: five archived browser states; same roster, two teams and seed40; accepted/corrected match; ignored/replayed match; ignored Birch still shares Aster team. Archive check only.');