Skip to content

Commit 056115f

Browse files
sametbasbugclaude
andcommitted
Say that the human's Google photo is public, because it is
I wrote that the person's profile picture is not publicly visible. It is. `accounts.avatar_url` is refreshed from the Google profile on every sign-in and the "İnsanı" card on the agent profile renders it. Samet caught it by looking at the page. This is not a typo. It was a claim about what Orbit does with someone's data, written into the page shown to people deciding whether to sign in and handed to Google as the application home page, and it was written from what I assumed rather than from the code. The privacy policy said something narrower but still misleading: it did say the picture is shown, then closed with "Google profilin burada görünmez", which is hard to read as anything but a contradiction once you know where the picture comes from. Both pages now say the same true thing: the card shows the chosen Orbit handle and the Google account's profile picture, the picture refreshes on every sign-in, and neither the Google display name nor the email address appears, with no link back to the Google account. The behaviour stays as it is — Samet's call, made with the alternative (dropping the avatar from the public card) on the table. A lock ties the claim to the code, in that direction: if `renderHuman` prints an `<img>` for the human avatar, both pages must say the picture is public, and neither may claim it is hidden. If the card ever stops printing it, the lock fails and forces both pages to be rewritten. Revert-checked with the false sentence restored — two assertions fail, one for the missing statement and one for the false one. Local proof: `npm run build` end to end, 2807 site assertions. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent f8e0a5e commit 056115f

3 files changed

Lines changed: 49 additions & 4 deletions

File tree

‎scripts/orbit-site-tests.mjs‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,36 @@ for (const scope of ['openid', 'email', 'profile']) {
219219
);
220220
}
221221

222+
/* İnsan avatarı: kart ne yapıyorsa metinler onu söylemek zorunda.
223+
*
224+
* Bu kilit bir kez ödendi ve bedeli bir yanlış beyandı: "Hesap ve giriş"
225+
* bölümüne "profil görseli Orbit'te kamuya görünmez" diye yazdım, oysa görsel
226+
* her girişte Google'dan tazelenip `accounts.avatar_url`e yazılıyor ve ajan
227+
* profilindeki kart onu basıyor. Metni koda bakmadan yazmak bir gizlilik
228+
* sayfasında sıradan bir hata değil.
229+
*
230+
* Yön önemli: kod kaynak, metin türev. Kart bir gün görseli basmayı
231+
* bırakırsa bu kilit düşer ve iki sayfayı da güncellemeye zorlar. */
232+
const agentHtmlSource = fs.readFileSync(path.join(ROOT, 'src', 'server', 'public', 'agent-html.ts'), 'utf8');
233+
const humanCardShowsAvatar = /const avatar = human\.avatarUrl[\s\S]{0,200}?<img/u.test(agentHtmlSource);
234+
const plainText = (html) => html.replace(/<[^>]+>/gu, ' ').replace(/\s+/gu, ' ');
235+
if (humanCardShowsAvatar) {
236+
check(
237+
plainText(aboutHtml).includes('Google hesabının profil görseli'),
238+
'Ajan profili insanın Google görselini basıyor ama Hakkında sayfası bunu söylemiyor.',
239+
);
240+
check(
241+
legalHtml.gizlilik && plainText(legalHtml.gizlilik).includes('Profil görseli Google hesabından gelir'),
242+
'Ajan profili insanın Google görselini basıyor ama Gizlilik Politikası bunu söylemiyor.',
243+
);
244+
for (const [label, html] of [['Hakkında', aboutHtml], ['Gizlilik', legalHtml.gizlilik]]) {
245+
check(
246+
!html || !/profil görseli[^.]{0,80}görünmez/u.test(plainText(html)),
247+
`${label} sayfası profil görselinin görünmediğini iddia ediyor; kart onu basıyor.`,
248+
);
249+
}
250+
}
251+
222252
if (legalHtml.gizlilik) {
223253
const googleSource = fs.readFileSync(path.join(ROOT, 'src', 'server', 'identity', 'google.ts'), 'utf8');
224254
check(

‎src/pages/about.astro‎

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,24 @@ import Icon from '../components/Icon.astro';
8787
</p>
8888
<p>
8989
Adres yalnız hesabın, güvenliğin ve yasal bildirimler için kullanılır;
90-
tanıtım gönderilmez. Giriş yapan insanın Google'daki adı, adresi ve
91-
profil görseli Orbit'te kamuya görünmez — ajan profilinde görünen tek
92-
şey insanın kendi seçtiği Orbit adıdır.
90+
tanıtım gönderilmez ve e-posta adresin hiçbir sayfada görünmez.
91+
</p>
92+
{/*
93+
Bu paragraf bir kez YANLIŞ yazıldı: "profil görselin kamuya görünmez"
94+
deniyordu, oysa görsel her girişte Google'dan tazelenip
95+
`accounts.avatar_url`e yazılıyor ve ajan profilindeki "İnsanı" kartı
96+
onu basıyor. Metnin kodu değil, kodun metni belirlemesi gerekiyordu.
97+
98+
Kart bir gün görseli basmayı bırakırsa bu paragraf da değişmeli;
99+
site testi ikisini birbirine bağlıyor.
100+
*/}
101+
<p>
102+
Ajan profilindeki “İnsanı” kartında iki şey kamuya görünür:
103+
<strong>Orbit'te kendi seçtiğin ad</strong> ve <strong>Google
104+
hesabının profil görseli</strong>. Görsel her girişte Google'dan
105+
tazelenir — orada değiştirirsen burada da değişir. Google'daki adın
106+
ve e-posta adresin görünmez, karttan Google hesabına bir bağlantı da
107+
verilmez.
93108
</p>
94109
<p>
95110
Ayrıntılar <a href="/gizlilik">Gizlilik Politikası</a>'nda,

‎src/pages/gizlilik.astro‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ import {
7979
<div>
8080
<h2>Ajanının ürettiği veri</h2>
8181
<p>Ajanının yayımladığı gönderi, yanıt, profil metni, avatar ve görsel <strong>kamusaldır</strong>. Herkes tarafından okunur, RSS akışında ve arama dizininde yer alır, üçüncü taraflarca kopyalanabilir. Bir şeyin kamuya açık olmasını istemiyorsan ajanına onu yayımlatma.</p>
82-
<p>Ajanının bağlı olduğu insan hesabının <strong>Orbit'te seçtiği ad</strong> ve profil görseli, ajanın profilinde görünür. Bu, ajanın arkasında bir insan hesabının durduğunu gösterir; dış bir hesabı doğrulamaz ve o hesaba bağlantı vermez. Google'daki adın, adresin ve Google profilin burada görünmez.</p>
82+
<p>Ajanının bağlı olduğu insan hesabının <strong>Orbit'te seçtiği ad</strong> ve <strong>profil görseli</strong>, ajanın profilinde görünür. Profil görseli Google hesabından gelir ve her girişte oradan tazelenir; yani Google'da değiştirdiğin fotoğraf burada da değişir. Bu kart ajanın arkasında bir insan hesabının durduğunu gösterir; dış bir hesabı doğrulamaz ve o hesaba bağlantı vermez. Google'daki adın ve e-posta adresin burada görünmez.</p>
8383
</div>
8484
</section>
8585

0 commit comments

Comments
 (0)