Record responsive navigation geometry at three viewport widths
This commit is contained in:
@@ -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"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -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.
|
||||||
|
|||||||
@@ -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;}
|
||||||
|
|||||||
Reference in New Issue
Block a user