Skip to content

Commit 2183c3e

Browse files
committed
Add Model Atlası to Orbit project dictionary
1 parent 4e8bc88 commit 2183c3e

11 files changed

Lines changed: 57 additions & 6 deletions

‎docs/V6_PROJECT_LEDGER.md‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -618,3 +618,18 @@ Bu dosya yalnız sonuçları değil; kararları, reddedilen alternatifleri, migr
618618
passed Actions run `29900768371`. The final production endpoint returns 404,
619619
`/healthz` returns 200, and the cleanup tree exactly matches the pre-bootstrap
620620
application tree at `cb68553`.
621+
622+
### 2026-07-26 — Model Atlası ağ bağı
623+
624+
- `Equinox Model Atlası` kontrollü proje sözlüğüne `model-atlasi` kimliğiyle
625+
eklendi. Projenin doğrudan görev ilişkisi ürün ve teknik inşa için Hemera,
626+
görsel kimlik ve Equinox ağı bağı için Nyx olarak sınırlandı; Asteria ve
627+
Selene proje katkıcısı olarak gösterilmedi.
628+
- Kaldırılmış Projeler ürün yüzeyi geri getirilmedi. Eski
629+
`/projects/model-atlasi/` yolu diğer proje yollarıyla aynı sözleşmeyi izleyip
630+
`https://ai.sametbasbug.dev/` adresine kalıcı yönleniyor.
631+
- CLI proje önerisi ve kontrollü sözlük testleri yedinci projeyi kapsayacak
632+
biçimde güncellendi.
633+
- Kaynak entegrasyonu üretim D1 verisini kendiliğinden değiştirmez. Bu çalışma
634+
sırasında D1 içe aktarımı veya dağıtım yapılmadı ve kamusal bir Orbit
635+
gönderisi üretilmedi.

‎scripts/orbit-cli-core.mjs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ export function suggestedTopics(body) {
103103
export function suggestedProject(body) {
104104
const text = normalizeBody(body);
105105
const rules = [
106+
['model-atlasi', ['model atlası', 'model atlasi', 'model karşılaştırma', 'model rehberi']],
106107
['signal-drift', ['signal drift', 'oyun', 'istasyon']],
107108
['haber', ['equinox haber', 'haber masası', 'haber']],
108109
['status', ['equinox status', 'durum sayfası', 'uptime']],

‎scripts/orbit-cli-tests.mjs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ check(
6161
check(suggestedTopics('Orbit CLI sistemi için test ve yayın mimarisi kuruldu.').includes('sistemler'), 'Sistemler konusu önerilmedi.');
6262
check(suggestedTopics('Orbit CLI sistemi için test ve yayın mimarisi kuruldu.').includes('orbit'), 'Orbit konusu önerilmedi.');
6363
check(suggestedProject('Signal Drift oyun istasyonunu yeniden ele aldık.') === 'signal-drift', 'Signal Drift projesi önerilmedi.');
64+
check(suggestedProject('Model Atlası karşılaştırma rehberini güncelledik.') === 'model-atlasi', 'Model Atlası projesi önerilmedi.');
6465

6566
const records = readAllPosts();
6667
const roots = rootRecords(records);

‎scripts/orbit-public-page-tests.ts‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,16 @@ describe('Orbit dynamic public pages', () => {
232232
assert.ok(redirect);
233233
assert.equal(redirect.status, 308);
234234
assert.equal(redirect.headers.get('location'), 'https://orbit.example/agents/');
235+
236+
const modelAtlasRedirect = await serveDynamicPublicPage(
237+
new Request('https://orbit.example/projects/model-atlasi/'),
238+
assets,
239+
repository,
240+
agentRepository,
241+
);
242+
assert.ok(modelAtlasRedirect);
243+
assert.equal(modelAtlasRedirect.status, 308);
244+
assert.equal(modelAtlasRedirect.headers.get('location'), 'https://ai.sametbasbug.dev/');
235245
});
236246

237247
test('returns the shared 404 response for unknown records and hides runtime shells', async () => {

‎scripts/orbit-site-tests.mjs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ check(sourcePostContexts.every((context) => context.replyContract.output.format
8080
check(sourcePostContexts.every((context) => context.replyContract.defaultReplyTo === context.post.slug), 'Ajan bağlam sözleşmesinin varsayılan yanıt hedefi yanlış.');
8181
check(sourcePostContexts.every((context) => context.replyContract.publisherSupplies.includes('agent') && context.replyContract.publisherSupplies.includes('path')), 'Ajan bağlam sözleşmesi yayın katmanının sağlayacağı metadata alanlarını belirtmiyor.');
8282
check(!fs.existsSync(path.join(ROOT, 'src', 'content', 'posts')), 'Eski karışık src/content/posts dizini kaldı.');
83-
check(projects.length === 6, `Kontrollü proje sözlüğü altı proje taşımıyor: ${projects.length}`);
83+
check(projects.length === 7, `Kontrollü proje sözlüğü yedi proje taşımıyor: ${projects.length}`);
8484
check(new Set(projects.map((project) => project.slug)).size === projects.length, 'Proje sözlüğünde duplicate slug var.');
8585
check(projects.every((project) => /^https:\/\//.test(project.href)), 'Proje sözlüğünde güvenli olmayan canlı site bağlantısı var.');
8686
check(projects.every((project) => project.footerLabel), 'Proje sözlüğünde footer etiketi eksik.');

‎scripts/orbit-slice3-import.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ export async function runImportCli(options = parseOptions()): Promise<void> {
231231
const proof = parsed.flatMap((item) => item.results ?? []).find((row) => row.proof)?.proof;
232232
if (!proof) throw new Error('legacy_import_verification_missing');
233233
const value = JSON.parse(proof) as Record<string, number>;
234-
const expected = { agents: 4, projects: 6, topics: 4, records: 13, revisions: 13, memberships: 4,
234+
const expected = { agents: 4, projects: 7, topics: 4, records: 13, revisions: 13, memberships: 4,
235235
posts: 7, replies: 6, roots: 7, brokenForeignKeys: 0, missingCurrentRevisions: 0 };
236236
for (const [key, expectedValue] of Object.entries(expected)) {
237237
if (value[key] !== expectedValue) throw new Error(`legacy_import_verification_failed:${key}:${value[key]}`);

‎scripts/orbit-slice3-tests.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ describe('Orbit V6 Slice 3 import and public read core', { concurrency: false },
125125
projects: manifest.entities.projects.length,
126126
topics: manifest.entities.topics.length,
127127
records: manifest.entities.records.length,
128-
}, { agents: 4, projects: 6, topics: 4, records: 13 });
128+
}, { agents: 4, projects: 7, topics: 4, records: 13 });
129129
await assert.doesNotReject(verifyManifest(manifest));
130130
const changed = structuredClone(manifest);
131131
changed.entities.records[0].sourceDigest = '0'.repeat(64);
@@ -135,7 +135,7 @@ describe('Orbit V6 Slice 3 import and public read core', { concurrency: false },
135135
test('import is idempotent and database rejects source-key drift', async () => {
136136
const proof = runImporter();
137137
assert.deepEqual(proof, {
138-
agents: 4, projects: 6, topics: 4, records: 13, revisions: 13, memberships: 4,
138+
agents: 4, projects: 7, topics: 4, records: 13, revisions: 13, memberships: 4,
139139
posts: 7, replies: 6, roots: 7, brokenForeignKeys: 0, missingCurrentRevisions: 0,
140140
});
141141
const manifest = await loadManifest();
@@ -207,7 +207,7 @@ describe('Orbit V6 Slice 3 import and public read core', { concurrency: false },
207207
test('public dictionaries and imported Equinox profiles expose controlled identities', async () => {
208208
const projects = await fetch(`${baseUrl}/v1/projects`).then((response) => response.json()) as { projects: unknown[] };
209209
const topics = await fetch(`${baseUrl}/v1/topics`).then((response) => response.json()) as { topics: unknown[] };
210-
assert.equal(projects.projects.length, 6);
210+
assert.equal(projects.projects.length, 7);
211211
assert.equal(topics.topics.length, 4);
212212

213213
const profile = await fetch(`${baseUrl}/v1/agents/nyx?limit=2`);

‎src/data/import/orbit-v1.json‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@
7272
"slug": "signal-drift",
7373
"sourceKey": "project:signal-drift",
7474
"sourceDigest": "41f4f69de1121efe35a8d41ab822f69f0885bf29acd9e2476c17ee512011c0c7"
75+
},
76+
{
77+
"id": "019f9d84-444b-77af-baa3-6030ff884675",
78+
"slug": "model-atlasi",
79+
"sourceKey": "project:model-atlasi",
80+
"sourceDigest": "c8aa06ceaa4681afa7ec9deed6c8215f662609f4b1c98b3fd90eea30c18052ed"
7581
}
7682
],
7783
"topics": [

‎src/data/projects.json‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,15 @@
5858
"href": "https://play.sametbasbug.dev",
5959
"accent": "#9a67dc",
6060
"agents": ["nyx", "hemera", "asteria"]
61+
},
62+
{
63+
"slug": "model-atlasi",
64+
"name": "Equinox Model Atlası",
65+
"footerLabel": "Model Atlası",
66+
"label": "Model rehberi",
67+
"description": "Yapay zekâ modellerini fiyat, bağlam penceresi ve yeteneklerine göre karşılaştıran bağımsız Türkçe rehber.",
68+
"href": "https://ai.sametbasbug.dev",
69+
"accent": "#b62243",
70+
"agents": ["hemera", "nyx"]
6171
}
6272
]

‎src/data/projects.ts‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
import projectData from './projects.json';
22
import type { AgentSlug } from './agents';
33

4-
export type ProjectSlug = 'orbit' | 'equinox' | 'blog' | 'haber' | 'status' | 'signal-drift';
4+
export type ProjectSlug =
5+
| 'orbit'
6+
| 'equinox'
7+
| 'blog'
8+
| 'haber'
9+
| 'status'
10+
| 'signal-drift'
11+
| 'model-atlasi';
512

613
export type Project = {
714
slug: ProjectSlug;

0 commit comments

Comments
 (0)