Record responsive navigation geometry at three viewport widths

This commit is contained in:
2026-09-06 13:45:16 +03:00
parent 44c9809deb
commit 53903cbe61
3 changed files with 101 additions and 0 deletions
@@ -0,0 +1,94 @@
{
"date": "2026-09-06",
"environment": "localhost:5184 actual app in same-origin iframe, widths 390/768/1440, height 900",
"measurements": [
{
"width": 384,
"scrollWidth": 384,
"groups": [
{
"label": "Keşfet",
"left": 16,
"right": 94
},
{
"label": "Hazırlan",
"left": 102,
"right": 193
},
{
"label": "Pazar",
"left": 201,
"right": 274
},
{
"label": "Yönetim",
"left": 16,
"right": 106
}
]
},
{
"width": 762,
"scrollWidth": 762,
"groups": [
{
"label": "Keşfet",
"left": 16,
"right": 94
},
{
"label": "Hazırlan",
"left": 102,
"right": 193
},
{
"label": "Pazar",
"left": 201,
"right": 274
},
{
"label": "Yönetim",
"left": 282,
"right": 372
}
]
},
{
"width": 1434,
"scrollWidth": 1434,
"groups": [
{
"label": "Keşfet",
"left": 16,
"right": 94
},
{
"label": "Hazırlan",
"left": 102,
"right": 193
},
{
"label": "Pazar",
"left": 201,
"right": 274
},
{
"label": "Yönetim",
"left": 282,
"right": 372
}
]
}
],
"checks": {
"noDocumentHorizontalOverflow": true,
"groupButtonsWithinViewport": true
},
"limits": [
"Scrollbar leaves content widths 384/762/1434",
"Only initial tender list and group geometry measured",
"Nested frame interaction did not resolve via root locator; no claim of mobile interaction acceptance",
"Portfolio modal and preparation overview remain to be tested at small widths"
]
}
+6
View File
@@ -931,3 +931,9 @@ Taslak türü seçicisine erişilebilir ad eklendi. Üretim derlemesi geçti. Ö
- Bot kurulum talimatları yalnız yöneticide gösterilir. Normal kullanıcı hizmetin etkin olmadığını ve yöneticiyle görüşmesi gerektiğini görür. Bağlama başarısı mesajının dış onay mesajını gönderildi varsayması kaldırıldı. - Bot kurulum talimatları yalnız yöneticide gösterilir. Normal kullanıcı hizmetin etkin olmadığını ve yöneticiyle görüşmesi gerektiğini görür. Bağlama başarısı mesajının dış onay mesajını gönderildi varsayması kaldırıldı.
- 5183 yeni izole QA örneğinde ilk GET 503, ardından gerçek API yanıtıyla kurtarma sınandı. 5 kontrol geçti: hata, retry, kurtarma, normal kullanıcıda kurulum ayrıntılarının gizli olması ve hatanın temizlenmesi. Kanıt qa-telegram-status.json. Dış mesaj veya bağlama isteği gönderilmedi. - 5183 yeni izole QA örneğinde ilk GET 503, ardından gerçek API yanıtıyla kurtarma sınandı. 5 kontrol geçti: hata, retry, kurtarma, normal kullanıcıda kurulum ayrıntılarının gizli olması ve hatanın temizlenmesi. Kanıt qa-telegram-status.json. Dış mesaj veya bağlama isteği gönderilmedi.
- Derleme geçti. Sunucu iş mantığı değişmediği için önceki 209 otomatik test tekrar çalıştırılmadı. Bot eşleme kodunun yaşam döngüsü ve gerçek teslim kabulü açık. - Derleme geçti. Sunucu iş mantığı değişmediği için önceki 209 otomatik test tekrar çalıştırılmadı. Bot eşleme kodunun yaşam döngüsü ve gerçek teslim kabulü açık.
### Yeni menüde üç genişlikte görünüm ölçümü — 6 Eylül 2026
- Yerel QA'ya gerçek uygulamayı aynı origin iframe içinde 390/768/1440 piksel genişlik ve 900 piksel yükseklikte açan görünüm sayfası eklendi. Görünür ölçüm alanı document client/scroll genişliğini ve grup düğmelerinin sınırlarını gösterir; uygulama durumu değiştirilmez.
- Scrollbar sonrası içerik genişlikleri 384/762/1434 piksel olarak ölçüldü. Her üçünde document scrollWidth=clientWidth; dört çalışma alanı düğmesi görünümün yatay sınırları içinde. Dar görünümde Yönetim ikinci satıra geçiyor. Kanıt qa-responsive-navigation.json.
- Yalnız ana liste ve menü geometrisi doğrulandı. Kök locator iç iframe düğmesine erişemediğinden dar ekran etkileşim kabulü iddia edilmez. Portföy formu, hazırlık özeti, odak sırası ve dokunmatik kullanım açık.
- Üretim kodu değişmedi; otomatik test/derleme tekrarlanmadı. Eklenen QA sunucusu bu ölçümden sonra kapatıldı ve geçici deposu temizlendi.
+1
View File
@@ -41,6 +41,7 @@ qaSubscriptionStore.reserveDelivery(qaReviewSub.id,null,[]);
let subscriptionFailure='read'; let subscriptionFailure='read';
let telegramFailure=true; let telegramFailure=true;
const ui=await createServer({server:{host:'127.0.0.1',port:0,proxy:{'/api':{target:'http://127.0.0.1:'+port}}},plugins:[{name:'qa-fixtures',configureServer(server){server.middlewares.use(async(req,res,next)=>{ const ui=await createServer({server:{host:'127.0.0.1',port:0,proxy:{'/api':{target:'http://127.0.0.1:'+port}}},plugins:[{name:'qa-fixtures',configureServer(server){server.middlewares.use(async(req,res,next)=>{
if(req.url==='/qa-responsive'){res.setHeader('Content-Type','text/html; charset=utf-8');res.end(`<html lang="tr"><h1>Yerel ekran boyutu testi</h1><p>Gerçek uygulama ayrı bir görünüm alanında yüklenir.</p><button data-width="390">390 piksel</button><button data-width="768">768 piksel</button><button data-width="1440">1440 piksel</button><pre id="metrics" aria-label="Görünüm ölçümleri"></pre><iframe title="İhaleist test görünümü" src="/" style="display:block;width:390px;height:900px;border:0"></iframe><script>document.querySelectorAll('button').forEach(button=>button.onclick=()=>document.querySelector('iframe').style.width=button.dataset.width+'px');setInterval(()=>{const doc=document.querySelector('iframe').contentDocument;if(!doc?.body)return;const width=doc.documentElement.clientWidth;const groups=[...doc.querySelectorAll('nav[aria-label="Çalışma alanları"] button')].map(el=>({label:el.textContent.trim(),left:Math.round(el.getBoundingClientRect().left),right:Math.round(el.getBoundingClientRect().right)}));document.getElementById('metrics').textContent=JSON.stringify({width,scrollWidth:doc.documentElement.scrollWidth,groups},null,2);},400);</script></html>`);return;}
if(req.url==='/qa-telegram-controls'){res.setHeader('Content-Type','text/html; charset=utf-8');res.end(`<html lang="tr"><h1>Yerel Telegram testi</h1><button id="recover">Telegram durum hatasını kapat</button><p role="status"></p><script>document.getElementById('recover').onclick=async()=>{await fetch('/qa-telegram-recover',{method:'POST'});document.querySelector('[role=status]').textContent='Hata kapatıldı';};</script></html>`);return;} if(req.url==='/qa-telegram-controls'){res.setHeader('Content-Type','text/html; charset=utf-8');res.end(`<html lang="tr"><h1>Yerel Telegram testi</h1><button id="recover">Telegram durum hatasını kapat</button><p role="status"></p><script>document.getElementById('recover').onclick=async()=>{await fetch('/qa-telegram-recover',{method:'POST'});document.querySelector('[role=status]').textContent='Hata kapatıldı';};</script></html>`);return;}
if(req.url==='/qa-telegram-recover'&&req.method==='POST'){telegramFailure=false;res.end('ok');return;} if(req.url==='/qa-telegram-recover'&&req.method==='POST'){telegramFailure=false;res.end('ok');return;}
if(req.url==='/api/me/telegram'&&req.method==='GET'&&telegramFailure){res.writeHead(503,{'Content-Type':'application/json'});res.end(JSON.stringify({success:false,error:'QA: Telegram durumu alınamadı.'}));return;} if(req.url==='/api/me/telegram'&&req.method==='GET'&&telegramFailure){res.writeHead(503,{'Content-Type':'application/json'});res.end(JSON.stringify({success:false,error:'QA: Telegram durumu alınamadı.'}));return;}