diff --git a/README.md b/README.md index 1cc3a3d..b6dcee4 100644 --- a/README.md +++ b/README.md @@ -50,8 +50,9 @@ published as rendered HTML at: Before changing homepage claims, update and validate the source docs. Lifecycle -and roadmap facts come from `PRODUCT-PORTFOLIO.md` and `ROADMAP-SUMMARY.md`; -release facts remain owned by the corresponding product repository: +and direction facts come from `docs/active/PRODUCT-DIRECTION.md`; Rust scope and +active work remain under `docs/products/emulebb-rust/`. Release facts remain +owned by the corresponding product repository: ```powershell cd ..\emulebb-tooling diff --git a/docs/SITE-HANDBOOK.md b/docs/SITE-HANDBOOK.md index db9543b..29f91c9 100644 --- a/docs/SITE-HANDBOOK.md +++ b/docs/SITE-HANDBOOK.md @@ -26,11 +26,10 @@ repositories. `https://emulebb.github.io/emulebb-tooling/`, backed by Markdown in `emulebb-tooling`. - Organization lifecycle status must be derived from - `docs/active/PRODUCT-PORTFOLIO.md` and - `docs/reference/ROADMAP-SUMMARY.md` in `emulebb-tooling`. -- MFC release status must be derived from the `0.7.3` release docs: - `RELEASE-0.7.3.md`, `RELEASE-0.7.3-CHECKLIST.md`, - `RELEASE-0.7.3-RUNBOOK.md`, and `RELEASE-0.7.3-GATE-HISTORY.md`. + `docs/active/PRODUCT-DIRECTION.md` in `emulebb-tooling`; Rust scope and active + work remain in `docs/products/emulebb-rust/`. +- MFC release status must be derived from the retained `0.7.3` release proof, + notes, and stable changelog under `docs/history/releases/0.7.3/`. - The current public release is stable `0.7.3` (published 2026-07-05). Older `0.7.3-rc.*` releases are historical prerelease evidence, not the current install target. diff --git a/index.html b/index.html index 8b37941..54ee833 100644 --- a/index.html +++ b/index.html @@ -233,13 +233,13 @@

Use MFC for the maintained Windows lane

- -Product portfolio -Current lifecycle and support status for every eMuleBB repository. + +Product direction +Current lifecycle, product focus, and maintenance boundaries. - -eMuleBB Roadmap -Active Rust beta work, MFC maintenance, and bounded supporting lanes. + +eMuleBB Rust product docs +Active beta scope, backlog, architecture, API, and product policy. MFC product guide @@ -249,9 +249,9 @@

Use MFC for the maintained Windows lane

Setup guide Install model, first-run profile behavior, and practical startup notes.
- -0.7.3 release dashboard -Current RC gates, automated test evidence, SBOM/package proof, and readiness rules. + +0.7.3 release proof +Retained release notes, package evidence, and the published maintenance boundary.
diff --git a/tools/render_pages.py b/tools/render_pages.py index f1a0870..04eefcb 100644 --- a/tools/render_pages.py +++ b/tools/render_pages.py @@ -150,11 +150,11 @@ def relative_prefix(page: PageSpec) -> str: ENGLISH_FAQ_PAGE = FAQ_PAGE_BY_KEY["en"] DOCS = [ - (f"{DOCS_SITE_URL}/active/PRODUCT-PORTFOLIO/", "portfolio"), - (f"{DOCS_SITE_URL}/reference/ROADMAP-SUMMARY/", "roadmap"), + (f"{DOCS_SITE_URL}/active/PRODUCT-DIRECTION/", "portfolio"), + (f"{DOCS_SITE_URL}/products/emulebb-rust/", "roadmap"), (f"{DOCS_SITE_URL}/reference/GUIDE-EMULEBB/", "emulebb"), (f"{DOCS_SITE_URL}/reference/GUIDE-SETUP/", "setup"), - (f"{DOCS_SITE_URL}/active/RELEASE-0.7.3/", "release"), + (f"{DOCS_SITE_URL}/history/releases/0.7.3/RELEASE-0.7.3-PROOF-SUMMARY/", "release"), ] INSTALL_CALLOUT = { @@ -370,10 +370,10 @@ def s(eyebrow: str, h2: str, p: str = "") -> dict[str, Any]: LOCALIZED_COPY_FILE = Path("content") / "locales.json" -DOC_COPY = {'en': {'portfolio': ('Product portfolio', - 'Current lifecycle and support status for every eMuleBB repository.'), - 'roadmap': ('eMuleBB Roadmap', - 'Active Rust beta work, MFC maintenance, and bounded supporting lanes.'), +DOC_COPY = {'en': {'portfolio': ('Product direction', + 'Current lifecycle, product focus, and maintenance boundaries.'), + 'roadmap': ('eMuleBB Rust product docs', + 'Active beta scope, backlog, architecture, API, and product policy.'), 'emulebb': ('MFC product guide', 'Setup, tuning, automation, release-aware use, testing, and SBOM evidence.'), 'setup': ('Setup guide', 'Install model, first-run profile behavior, and practical startup notes.'), @@ -398,8 +398,8 @@ def s(eyebrow: str, h2: str, p: str = "") -> dict[str, Any]: 'Symptom-led checks for Low ID, network issues, sharing, and automation.'), 'p2p_overlord_agent': ('p2p-overlord eMule agent', 'Headless Rust Kad/eD2K agent boundary, source docs, and eMuleBB contract notes.'), - 'release': ('0.7.3 release dashboard', - 'Current RC gates, automated test evidence, SBOM/package proof, and readiness rules.')}} + 'release': ('0.7.3 release proof', + 'Retained release notes, package evidence, and the published maintenance boundary.')}} DOC_SECTION_COPY = {'en': ('Documentation', 'Guides, API, and release notes')} @@ -416,7 +416,6 @@ def s(eyebrow: str, h2: str, p: str = "") -> dict[str, Any]: "sharing": f"{DOCS_SITE_URL}/reference/GUIDE-SHARING/", "downloads": f"{DOCS_SITE_URL}/reference/GUIDE-DOWNLOADS-SEARCH/", "controllers": f"{DOCS_SITE_URL}/reference/GUIDE-CONTROLLERS-REST/", - "release": f"{DOCS_SITE_URL}/active/RELEASE-0.7.3/", "product": f"{DOCS_SITE_URL}/reference/GUIDE-EMULEBB/", } @@ -467,7 +466,7 @@ def faq_item(question: str, answer: str, doc_title: str, doc_href: str) -> dict[ faq_item("How do I share my library in eMule?", "eMuleBB keeps the familiar Shared Files model: add curated roots, keep Temp out of shares, use stable paths, and let hashing finish before scaling up.", "Sharing guide", FAQ_LINKS["sharing"]), faq_item("How do I limit upload slots in eMule?", "eMuleBB adds a finite broadband upload-slot target, weak-slot recycling, and practical diagnostics so fast lines stay useful without flooding the queue.", "Downloads and search guide", FAQ_LINKS["downloads"]), faq_item("Is eMuleBB a protocol fork of eMule?", "No. eMuleBB keeps stock-compatible eD2K and Kad behavior as the default, then improves local limits, automation, diagnostics, and release discipline around it.", "Product guide", FAQ_LINKS["product"]), - faq_item("Which eMule release should I use for testing?", "Use the published eMuleBB 0.7.3 GitHub Release for stable package testing. Nightly, beta, and older release-candidate packages are pre-release test builds.", "0.7.3 release dashboard", FAQ_LINKS["release"]), + faq_item("Which eMule release should I use for testing?", FAQ_TESTING_ANSWERS["en"], "eMuleBB Rust", RUST_PAGE.url), faq_item("How do I keep eMule WebServer or REST safe?", "eMuleBB treats WebServer and REST as trusted-controller surfaces. Enable them only when needed, bind deliberately, use an API key, and avoid broad exposure.", "Controllers and REST guide", FAQ_LINKS["controllers"]), faq_item("How do I use eMule with Kad and servers?", "eMuleBB keeps classic server, global, and Kad search workflows. Start with trusted server lists, bootstrap Kad deliberately, and diagnose Low ID or firewalled Kad before changing many settings.", "Network guide", FAQ_LINKS["network"]), faq_item("How do I handle large shared libraries in eMule?", "eMuleBB is built for large libraries: add roots gradually, use long-path capable Windows setups, review share-ignore rules, and let startup cache work settle.", "Sharing guide", FAQ_LINKS["sharing"]), @@ -494,7 +493,7 @@ def faq_item(question: str, answer: str, doc_title: str, doc_href: str) -> dict[ faq_item("Come condivido la mia libreria in eMule?", "eMuleBB conserva il modello Shared Files: aggiungi radici curate, tieni Temp fuori dalle condivisioni, usa percorsi stabili e lascia finire l'hashing.", "Guida condivisione", FAQ_LINKS["sharing"]), faq_item("Come limito gli slot di upload in eMule?", "eMuleBB aggiunge un target finito di slot upload, riciclo degli slot deboli e diagnostica utile per sfruttare linee veloci senza saturare la coda.", "Guida download e ricerca", FAQ_LINKS["downloads"]), faq_item("eMuleBB e un fork di protocollo di eMule?", "No. eMuleBB mantiene compatibili eD2K e Kad stock, migliorando limiti locali, automazione, diagnostica e disciplina di rilascio.", "Guida prodotto", FAQ_LINKS["product"]), - faq_item("Quale release di eMule dovrei usare per i test?", "Usa la release GitHub eMuleBB 0.7.3 pubblicata per i test RC. Il target stabile resta 0.7.3 dopo il passaggio dei gate.", "Dashboard release 0.7.3", FAQ_LINKS["release"]), + faq_item("Quale release di eMule dovrei usare per i test?", FAQ_TESTING_ANSWERS["it"], "eMuleBB Rust", RUST_PAGE.url), faq_item("Come tengo sicuri WebServer o REST di eMule?", "eMuleBB tratta WebServer e REST come superfici per controller fidati. Abilitali solo quando servono, configura il bind, usa una API key ed evita esposizione ampia.", "Guida controller e REST", FAQ_LINKS["controllers"]), faq_item("Come uso eMule con Kad e server?", "eMuleBB conserva server, ricerca globale e Kad. Parti da liste server fidate, avvia Kad con cura e diagnostica Low ID o Kad firewalled prima di cambiare troppe opzioni.", "Guida rete", FAQ_LINKS["network"]), faq_item("Come gestisco grandi librerie condivise in eMule?", "eMuleBB e pensato per grandi librerie: aggiungi radici gradualmente, usa Windows con long paths, rivedi share-ignore e lascia stabilizzare la cache di avvio.", "Guida condivisione", FAQ_LINKS["sharing"]), @@ -521,7 +520,7 @@ def faq_item(question: str, answer: str, doc_title: str, doc_href: str) -> dict[ faq_item("Como comparto mi biblioteca en eMule?", "eMuleBB conserva el modelo Shared Files: agrega raices cuidadas, deja Temp fuera de las compartidas, usa rutas estables y espera a que termine el hashing.", "Guia de comparticion", FAQ_LINKS["sharing"]), faq_item("Como limito los slots de subida en eMule?", "eMuleBB agrega un objetivo finito de slots de subida, reciclaje de slots debiles y diagnostico practico para aprovechar lineas rapidas sin inundar la cola.", "Guia de descargas y busqueda", FAQ_LINKS["downloads"]), faq_item("eMuleBB es un fork de protocolo de eMule?", "No. eMuleBB mantiene eD2K y Kad compatibles con el comportamiento stock, y mejora limites locales, automatizacion, diagnostico y disciplina de release.", "Guia del producto", FAQ_LINKS["product"]), - faq_item("Que release de eMule debo usar para pruebas?", "Usa la release GitHub eMuleBB 0.7.3 publicada para pruebas RC. El objetivo estable sigue siendo 0.7.3 despues de pasar los gates.", "Panel de release 0.7.3", FAQ_LINKS["release"]), + faq_item("Que release de eMule debo usar para pruebas?", FAQ_TESTING_ANSWERS["es"], "eMuleBB Rust", RUST_PAGE.url), faq_item("Como mantengo seguro WebServer o REST de eMule?", "eMuleBB trata WebServer y REST como superficies para controladores confiables. Activalos solo cuando haga falta, configura el bind, usa API key y evita exponerlos ampliamente.", "Guia de controladores y REST", FAQ_LINKS["controllers"]), faq_item("Como uso eMule con Kad y servidores?", "eMuleBB conserva servidores, busqueda global y Kad. Empieza con listas confiables, arranca Kad con cuidado y diagnostica Low ID o Kad firewalled antes de tocar muchas opciones.", "Guia de red", FAQ_LINKS["network"]), faq_item("Como manejo bibliotecas compartidas grandes en eMule?", "eMuleBB esta preparado para bibliotecas grandes: agrega raices gradualmente, usa Windows con long paths, revisa share-ignore y deja asentarse la cache de inicio.", "Guia de comparticion", FAQ_LINKS["sharing"]), @@ -548,7 +547,7 @@ def faq_item(question: str, answer: str, doc_title: str, doc_href: str) -> dict[ faq_item("Como compartilho minha biblioteca no eMule?", "O eMuleBB mantem o modelo Shared Files: adicione raizes selecionadas, deixe Temp fora do compartilhamento, use caminhos estaveis e espere o hashing terminar.", "Guia de compartilhamento", FAQ_LINKS["sharing"]), faq_item("Como limito os slots de upload no eMule?", "O eMuleBB adiciona alvo finito de slots de upload, reciclagem de slots fracos e diagnosticos praticos para aproveitar links rapidos sem lotar a fila.", "Guia de downloads e busca", FAQ_LINKS["downloads"]), faq_item("O eMuleBB e um fork de protocolo do eMule?", "Nao. O eMuleBB mantem eD2K e Kad compativeis com o comportamento stock e melhora limites locais, automacao, diagnosticos e disciplina de release.", "Guia do produto", FAQ_LINKS["product"]), - faq_item("Qual release do eMule devo usar para testes?", "Use a release GitHub eMuleBB 0.7.3 publicada para testes de pacote estavel. Nightly, beta e releases candidatas antigas continuam sendo builds de pre-release.", "Painel da release 0.7.3", FAQ_LINKS["release"]), + faq_item("Qual release do eMule devo usar para testes?", FAQ_TESTING_ANSWERS["pt_br"], "eMuleBB Rust", RUST_PAGE.url), faq_item("Como mantenho seguros WebServer ou REST do eMule?", "O eMuleBB trata WebServer e REST como superficies para controladores confiaveis. Ative apenas quando precisar, configure bind, use API key e evite exposicao ampla.", "Guia de controladores e REST", FAQ_LINKS["controllers"]), faq_item("Como uso eMule com Kad e servidores?", "O eMuleBB mantem servidores, busca global e Kad. Comece com listas confiaveis, inicialize Kad com cuidado e diagnostique Low ID ou Kad firewalled antes de mudar muita coisa.", "Guia de rede", FAQ_LINKS["network"]), faq_item("Como lidar com grandes bibliotecas compartilhadas no eMule?", "O eMuleBB foi feito para bibliotecas grandes: adicione raizes aos poucos, use Windows com long paths, revise share-ignore e deixe a cache de inicio estabilizar.", "Guia de compartilhamento", FAQ_LINKS["sharing"]), @@ -575,7 +574,7 @@ def faq_item(question: str, answer: str, doc_title: str, doc_href: str) -> dict[ faq_item("Comment partager ma bibliotheque dans eMule?", "eMuleBB garde le modele Shared Files: ajoutez des racines choisies, gardez Temp hors des partages, utilisez des chemins stables et laissez le hachage finir.", "Guide partage", FAQ_LINKS["sharing"]), faq_item("Comment limiter les slots d'upload dans eMule?", "eMuleBB ajoute une cible finie de slots d'upload, le recyclage des slots faibles et des diagnostics utiles pour exploiter les lignes rapides sans noyer la file.", "Guide telechargements et recherche", FAQ_LINKS["downloads"]), faq_item("eMuleBB est-il un fork de protocole d'eMule?", "Non. eMuleBB garde eD2K et Kad compatibles avec le comportement stock, puis ameliore limites locales, automatisation, diagnostics et discipline de release.", "Guide produit", FAQ_LINKS["product"]), - faq_item("Quelle release eMule utiliser pour tester?", "Utilisez la release GitHub eMuleBB 0.7.3 publiee pour les tests RC. La cible stable reste 0.7.3 apres le passage des gates.", "Tableau release 0.7.3", FAQ_LINKS["release"]), + faq_item("Quelle release eMule utiliser pour tester?", FAQ_TESTING_ANSWERS["fr"], "eMuleBB Rust", RUST_PAGE.url), faq_item("Comment securiser WebServer ou REST d'eMule?", "eMuleBB traite WebServer et REST comme des surfaces pour controleurs de confiance. Activez-les seulement si besoin, liez-les explicitement, utilisez une API key et evitez l'exposition large.", "Guide controleurs et REST", FAQ_LINKS["controllers"]), faq_item("Comment utiliser eMule avec Kad et les serveurs?", "eMuleBB conserve serveurs, recherche globale et Kad. Commencez avec des listes fiables, amorcez Kad proprement et diagnostiquez Low ID ou Kad firewalled avant de trop changer.", "Guide reseau", FAQ_LINKS["network"]), faq_item("Comment gerer de grandes bibliotheques partagees dans eMule?", "eMuleBB vise les grandes bibliotheques: ajoutez les racines graduellement, utilisez Windows avec long paths, revoyez share-ignore et laissez la cache de demarrage se stabiliser.", "Guide partage", FAQ_LINKS["sharing"]), @@ -602,7 +601,7 @@ def faq_item(question: str, answer: str, doc_title: str, doc_href: str) -> dict[ faq_item("Wie teile ich meine Bibliothek in eMule?", "eMuleBB behaelt das bekannte Shared-Files-Modell: kuratierte Wurzeln hinzufuegen, Temp nicht teilen, stabile Pfade nutzen und Hashing auslaufen lassen.", "Sharing Guide", FAQ_LINKS["sharing"]), faq_item("Wie begrenze ich Upload-Slots in eMule?", "eMuleBB fuegt ein endliches Upload-Slot-Ziel, Recycling schwacher Slots und praktische Diagnose hinzu, damit schnelle Leitungen nutzbar bleiben ohne die Queue zu fluten.", "Downloads and Search Guide", FAQ_LINKS["downloads"]), faq_item("Ist eMuleBB ein Protokoll-Fork von eMule?", "Nein. eMuleBB haelt eD2K und Kad stock-kompatibel und verbessert darum herum lokale Limits, Automatisierung, Diagnose und Release-Disziplin.", "Product Guide", FAQ_LINKS["product"]), - faq_item("Welche eMule-Release soll ich testen?", "Nutze die veroeffentlichte eMuleBB 0.7.3 GitHub Release fuer RC-Tests. Das stabile Ziel bleibt 0.7.3 nach bestandenen Gates.", "0.7.3 release dashboard", FAQ_LINKS["release"]), + faq_item("Welche eMule-Release soll ich testen?", FAQ_TESTING_ANSWERS["de"], "eMuleBB Rust", RUST_PAGE.url), faq_item("Wie halte ich eMule WebServer oder REST sicher?", "eMuleBB behandelt WebServer und REST als Oberflaechen fuer vertrauenswuerdige Controller. Nur bei Bedarf aktivieren, bewusst binden, API key nutzen und breite Exposition vermeiden.", "Controllers and REST Guide", FAQ_LINKS["controllers"]), faq_item("Wie nutze ich eMule mit Kad und Servern?", "eMuleBB behaelt Server, globale Suche und Kad. Starte mit vertrauenswuerdigen Serverlisten, bootstrappe Kad bewusst und diagnostiziere Low ID oder Kad firewalled vor grossen Aenderungen.", "Network Guide", FAQ_LINKS["network"]), faq_item("Wie betreibe ich grosse Freigabe-Bibliotheken in eMule?", "eMuleBB ist fuer grosse Bibliotheken gedacht: Wurzeln schrittweise hinzufuegen, Windows mit long paths nutzen, share-ignore pruefen und Startup-Cache stabilisieren lassen.", "Sharing Guide", FAQ_LINKS["sharing"]), @@ -629,7 +628,7 @@ def faq_item(question: str, answer: str, doc_title: str, doc_href: str) -> dict[ faq_item("Jak udostepnic biblioteke w eMule?", "eMuleBB zachowuje model Shared Files: dodawaj wybrane katalogi, trzymaj Temp poza udostepnianiem, uzywaj stalych sciezek i poczekaj na zakonczenie hashowania.", "Przewodnik udostepniania", FAQ_LINKS["sharing"]), faq_item("Jak ograniczyc sloty uploadu w eMule?", "eMuleBB dodaje skonczony cel slotow uploadu, odzyskiwanie slabych slotow i praktyczna diagnostyke, aby szybkie lacza pomagaly bez zalewania kolejki.", "Przewodnik pobierania i wyszukiwania", FAQ_LINKS["downloads"]), faq_item("Czy eMuleBB jest forkiem protokolu eMule?", "Nie. eMuleBB zachowuje zgodne eD2K i Kad, a dookola nich poprawia lokalne limity, automatyzacje, diagnostyke i dyscypline wydan.", "Przewodnik produktu", FAQ_LINKS["product"]), - faq_item("Ktore wydanie eMule wybrac do testow?", "Do testow RC uzywaj opublikowanej GitHub release eMuleBB 0.7.3. Stabilnym celem pozostaje 0.7.3 po przejsciu gate'ow.", "Panel wydania 0.7.3", FAQ_LINKS["release"]), + faq_item("Ktore wydanie eMule wybrac do testow?", FAQ_TESTING_ANSWERS["pl"], "eMuleBB Rust", RUST_PAGE.url), faq_item("Jak zabezpieczyc WebServer albo REST w eMule?", "eMuleBB traktuje WebServer i REST jako powierzchnie dla zaufanych kontrolerow. Wlaczaj je tylko w razie potrzeby, ustaw bind, uzyj API key i unikaj szerokiej ekspozycji.", "Przewodnik kontrolerow i REST", FAQ_LINKS["controllers"]), faq_item("Jak uzywac eMule z Kad i serwerami?", "eMuleBB zachowuje serwery, wyszukiwanie globalne i Kad. Zacznij od zaufanych list, ostroznie bootstrapuj Kad i diagnozuj Low ID lub Kad firewalled przed duzymi zmianami.", "Przewodnik sieciowy", FAQ_LINKS["network"]), faq_item("Jak obslugiwac duze biblioteki udostepniane w eMule?", "eMuleBB jest przygotowany na duze biblioteki: dodawaj katalogi stopniowo, uzywaj Windows z long paths, sprawdz share-ignore i pozwol ustabilizowac cache startowy.", "Przewodnik udostepniania", FAQ_LINKS["sharing"]), @@ -656,7 +655,7 @@ def faq_item(question: str, answer: str, doc_title: str, doc_href: str) -> dict[ faq_item("Hoe deel ik mijn bibliotheek in eMule?", "eMuleBB houdt het bekende Shared Files-model: voeg gekozen roots toe, houd Temp buiten shares, gebruik stabiele paden en laat hashing afronden.", "Deelgids", FAQ_LINKS["sharing"]), faq_item("Hoe beperk ik uploadslots in eMule?", "eMuleBB voegt een eindig uploadslotdoel, recycling van zwakke slots en praktische diagnostiek toe zodat snelle lijnen nuttig blijven zonder de wachtrij te overspoelen.", "Downloads en zoekgids", FAQ_LINKS["downloads"]), faq_item("Is eMuleBB een protocolfork van eMule?", "Nee. eMuleBB houdt eD2K en Kad stock-compatibel en verbetert daaromheen lokale limieten, automatisering, diagnostiek en release-discipline.", "Productgids", FAQ_LINKS["product"]), - faq_item("Welke eMule-release moet ik testen?", "Gebruik de gepubliceerde eMuleBB 0.7.3 GitHub Release voor RC-tests. Het stabiele doel blijft 0.7.3 nadat de gates slagen.", "0.7.3 release dashboard", FAQ_LINKS["release"]), + faq_item("Welke eMule-release moet ik testen?", FAQ_TESTING_ANSWERS["nl"], "eMuleBB Rust", RUST_PAGE.url), faq_item("Hoe houd ik eMule WebServer of REST veilig?", "eMuleBB behandelt WebServer en REST als oppervlakken voor vertrouwde controllers. Zet ze alleen aan wanneer nodig, bind bewust, gebruik een API key en voorkom brede blootstelling.", "Controllers en REST-gids", FAQ_LINKS["controllers"]), faq_item("Hoe gebruik ik eMule met Kad en servers?", "eMuleBB houdt servers, globale zoekactie en Kad. Begin met vertrouwde serverlijsten, bootstrap Kad bewust en diagnoseer Low ID of Kad firewalled voordat je veel wijzigt.", "Netwerkgids", FAQ_LINKS["network"]), faq_item("Hoe beheer ik grote gedeelde bibliotheken in eMule?", "eMuleBB is gemaakt voor grote bibliotheken: voeg roots geleidelijk toe, gebruik Windows met long paths, controleer share-ignore en laat de startcache stabiliseren.", "Deelgids", FAQ_LINKS["sharing"]), @@ -683,7 +682,7 @@ def faq_item(question: str, answer: str, doc_title: str, doc_href: str) -> dict[ faq_item("Как расшарить библиотеку в eMule?", "eMuleBB сохраняет модель Shared Files: добавляйте выбранные корни, не шарьте Temp, используйте стабильные пути и дождитесь окончания hashing.", "Sharing guide", FAQ_LINKS["sharing"]), faq_item("Как ограничить upload slots в eMule?", "eMuleBB добавляет конечную цель upload slots, переработку слабых слотов и полезную диагностику, чтобы быстрый канал не превращался в хаос очереди.", "Downloads and search guide", FAQ_LINKS["downloads"]), faq_item("eMuleBB является protocol fork eMule?", "Нет. eMuleBB сохраняет совместимое поведение eD2K и Kad, а вокруг него улучшает локальные лимиты, automation, диагностику и дисциплину релизов.", "Product guide", FAQ_LINKS["product"]), - faq_item("Какой релиз eMule использовать для тестов?", "Для RC-тестирования используйте опубликованный GitHub Release eMuleBB 0.7.3. Стабильная цель остается 0.7.3 после прохождения gate.", "0.7.3 release dashboard", FAQ_LINKS["release"]), + faq_item("Какой релиз eMule использовать для тестов?", FAQ_TESTING_ANSWERS["ru"], "eMuleBB Rust", RUST_PAGE.url), faq_item("Как безопасно включить eMule WebServer или REST?", "eMuleBB считает WebServer и REST поверхностями для доверенных контроллеров. Включайте их только при необходимости, задавайте bind, используйте API key и не открывайте широко.", "Controllers and REST guide", FAQ_LINKS["controllers"]), faq_item("Как использовать eMule с Kad и серверами?", "eMuleBB сохраняет серверы, global search и Kad. Начните с доверенных списков серверов, аккуратно bootstrap Kad и диагностируйте Low ID или Kad firewalled до массовых изменений.", "Network guide", FAQ_LINKS["network"]), faq_item("Как работать с большой общей библиотекой в eMule?", "eMuleBB рассчитан на большие библиотеки: добавляйте корни постепенно, используйте Windows с long paths, проверяйте share-ignore и дайте startup cache стабилизироваться.", "Sharing guide", FAQ_LINKS["sharing"]), @@ -710,7 +709,7 @@ def faq_item(question: str, answer: str, doc_title: str, doc_href: str) -> dict[ faq_item("Як поділитися бібліотекою в eMule?", "eMuleBB зберігає модель Shared Files: додавайте вибрані корені, не діліться Temp, використовуйте стабільні шляхи й дочекайтеся завершення hashing.", "Sharing guide", FAQ_LINKS["sharing"]), faq_item("Як обмежити upload slots в eMule?", "eMuleBB додає скінченну ціль upload slots, переробку слабких слотів і корисну діагностику, щоб швидкий канал не перевантажував чергу.", "Downloads and search guide", FAQ_LINKS["downloads"]), faq_item("Чи є eMuleBB protocol fork від eMule?", "Ні. eMuleBB зберігає сумісну поведінку eD2K і Kad, а навколо неї покращує локальні ліміти, automation, діагностику та дисципліну релізів.", "Product guide", FAQ_LINKS["product"]), - faq_item("Який реліз eMule використовувати для тестів?", "Для RC-тестування використовуйте опублікований GitHub Release eMuleBB 0.7.3. Стабільна ціль лишається 0.7.3 після проходження gate.", "0.7.3 release dashboard", FAQ_LINKS["release"]), + faq_item("Який реліз eMule використовувати для тестів?", FAQ_TESTING_ANSWERS["uk"], "eMuleBB Rust", RUST_PAGE.url), faq_item("Як безпечно використовувати eMule WebServer або REST?", "eMuleBB розглядає WebServer і REST як поверхні для довірених контролерів. Увімкніть лише за потреби, задайте bind, використовуйте API key і не відкривайте широко.", "Controllers and REST guide", FAQ_LINKS["controllers"]), faq_item("Як використовувати eMule з Kad і серверами?", "eMuleBB зберігає сервери, global search і Kad. Почніть із довірених списків серверів, обережно bootstrap Kad і діагностуйте Low ID або Kad firewalled перед масовими змінами.", "Network guide", FAQ_LINKS["network"]), faq_item("Як працювати з великою спільною бібліотекою в eMule?", "eMuleBB розрахований на великі бібліотеки: додавайте корені поступово, використовуйте Windows з long paths, перевіряйте share-ignore і дайте startup cache стабілізуватися.", "Sharing guide", FAQ_LINKS["sharing"]), @@ -737,7 +736,7 @@ def faq_item(question: str, answer: str, doc_title: str, doc_href: str) -> dict[ faq_item("如何在 eMule 中共享我的资料库?", "eMuleBB 保留 Shared Files 模型:添加经过整理的根目录,不共享 Temp,使用稳定路径,并等待 hashing 完成。", "共享指南", FAQ_LINKS["sharing"]), faq_item("如何限制 eMule 的上传槽?", "eMuleBB 增加有限的上传槽目标、弱槽回收和实用诊断,让高速线路更有用,同时避免队列失控。", "下载和搜索指南", FAQ_LINKS["downloads"]), faq_item("eMuleBB 是 eMule 的协议分叉吗?", "不是。eMuleBB 默认保持 eD2K 和 Kad 的 stock 兼容行为,只在本地限制、自动化、诊断和发布纪律上改进。", "产品指南", FAQ_LINKS["product"]), - faq_item("测试时应该使用哪个 eMule 版本?", "RC 测试请使用已发布的 eMuleBB 0.7.3 GitHub Release。通过 release gates 后,稳定目标仍是 0.7.3。", "0.7.3 发布面板", FAQ_LINKS["release"]), + faq_item("测试时应该使用哪个 eMule 版本?", FAQ_TESTING_ANSWERS["zh_cn"], "eMuleBB Rust", RUST_PAGE.url), faq_item("如何保证 eMule WebServer 或 REST 安全?", "eMuleBB 把 WebServer 和 REST 视为可信控制器接口。只在需要时启用,明确 bind,使用 API key,并避免大范围暴露。", "控制器和 REST 指南", FAQ_LINKS["controllers"]), faq_item("如何在 eMule 中使用 Kad 和服务器?", "eMuleBB 保留服务器、global search 和 Kad 工作流。先使用可信服务器列表,谨慎 bootstrap Kad,并在大量改设置前诊断 Low ID 或 Kad firewalled。", "网络指南", FAQ_LINKS["network"]), faq_item("如何处理 eMule 的大型共享库?", "eMuleBB 面向大型资料库:逐步添加根目录,使用支持 long paths 的 Windows,检查 share-ignore,并让 startup cache 稳定下来。", "共享指南", FAQ_LINKS["sharing"]), @@ -764,7 +763,7 @@ def faq_item(question: str, answer: str, doc_title: str, doc_href: str) -> dict[ faq_item("eMule でライブラリを共有するには?", "eMuleBB は Shared Files モデルを保ちます。整理した root を追加し、Temp は共有せず、安定したパスを使い、hashing 完了を待ちます。", "共有ガイド", FAQ_LINKS["sharing"]), faq_item("eMule の upload slots を制限するには?", "eMuleBB は有限の upload slot 目標、弱い slot の再利用、実用的な診断を追加し、高速回線をキュー崩壊なしに活かします。", "ダウンロードと検索ガイド", FAQ_LINKS["downloads"]), faq_item("eMuleBB は eMule のプロトコル fork ですか?", "いいえ。eMuleBB は eD2K と Kad の stock 互換動作を保ち、その周囲でローカル制限、自動化、診断、リリース規律を改善します。", "製品ガイド", FAQ_LINKS["product"]), - faq_item("テストにはどの eMule release を使えばよいですか?", "RC テストには公開済みの eMuleBB 0.7.3 GitHub Release を使ってください。安定版の目標は gates 通過後の 0.7.3 です。", "0.7.3 リリースダッシュボード", FAQ_LINKS["release"]), + faq_item("テストにはどの eMule release を使えばよいですか?", FAQ_TESTING_ANSWERS["ja"], "eMuleBB Rust", RUST_PAGE.url), faq_item("eMule WebServer や REST を安全に保つには?", "eMuleBB は WebServer と REST を信頼済み controller 向けの surface として扱います。必要な時だけ有効化し、明示的に bind し、API key を使い、広い公開は避けます。", "Controllers and REST guide", FAQ_LINKS["controllers"]), faq_item("eMule で Kad とサーバーを使うには?", "eMuleBB は server、global search、Kad の流れを保ちます。信頼できる server list から始め、Kad を慎重に bootstrap し、Low ID や Kad firewalled を先に診断します。", "ネットワークガイド", FAQ_LINKS["network"]), faq_item("eMule の大きな共有ライブラリを扱うには?", "eMuleBB は大きなライブラリ向けです。root を段階的に追加し、long paths 対応 Windows を使い、share-ignore を確認し、startup cache が落ち着くのを待ちます。", "共有ガイド", FAQ_LINKS["sharing"]), @@ -791,7 +790,7 @@ def faq_item(question: str, answer: str, doc_title: str, doc_href: str) -> dict[ faq_item("Como partilho a minha biblioteca no eMule?", "O eMuleBB mantém o modelo Shared Files: adicione raízes selecionadas, mantenha a Temp fora das partilhas, use caminhos estáveis e deixe o hashing terminar antes de crescer.", "Guia de partilha", FAQ_LINKS["sharing"]), faq_item("Como limito os slots de upload no eMule?", "O eMuleBB acrescenta um alvo finito de slots de upload em banda larga, reciclagem de slots fracos e diagnósticos práticos para que ligações rápidas continuem úteis sem inundar a fila.", "Guia de transferências e pesquisa", FAQ_LINKS["downloads"]), faq_item("O eMuleBB é um fork de protocolo do eMule?", "Não. O eMuleBB mantém o comportamento eD2K e Kad compatível com o stock por omissão e melhora os limites locais, a automação, os diagnósticos e a disciplina de release à sua volta.", "Guia do produto", FAQ_LINKS["product"]), - faq_item("Que release do eMule devo usar para testar?", "Use a release do GitHub eMuleBB 0.7.3 publicada para testes de pacote estável. Nightly, beta e releases candidatas antigas continuam a ser builds de pré-release.", "Painel de release 0.7.3", FAQ_LINKS["release"]), + faq_item("Que release do eMule devo usar para testar?", FAQ_TESTING_ANSWERS["pt_pt"], "eMuleBB Rust", RUST_PAGE.url), faq_item("Como mantenho o WebServer ou o REST do eMule seguros?", "O eMuleBB trata o WebServer e o REST como superfícies para controladores de confiança. Ative-os apenas quando necessário, faça bind deliberadamente, use uma API key e evite exposição ampla.", "Guia de controladores e REST", FAQ_LINKS["controllers"]), faq_item("Como uso o eMule com Kad e servidores?", "O eMuleBB mantém os fluxos clássicos de servidor, pesquisa global e Kad. Comece com listas de servidores de confiança, faça bootstrap do Kad deliberadamente e diagnostique Low ID ou Kad com firewall antes de mudar muitas opções.", "Guia de rede", FAQ_LINKS["network"]), faq_item("Como lido com grandes bibliotecas partilhadas no eMule?", "O eMuleBB foi feito para grandes bibliotecas: adicione raízes gradualmente, use Windows com long paths, reveja as regras de share-ignore e deixe a cache de arranque assentar.", "Guia de partilha", FAQ_LINKS["sharing"]), @@ -818,7 +817,7 @@ def faq_item(question: str, answer: str, doc_title: str, doc_href: str) -> dict[ faq_item("eMule'de kütüphanemi nasıl paylaşırım?", "eMuleBB tanıdık Shared Files modelini korur: özenle seçilmiş kökler ekleyin, Temp'i paylaşımların dışında tutun, kararlı yollar kullanın ve büyütmeden önce hashing'in bitmesini bekleyin.", "Paylaşım kılavuzu", FAQ_LINKS["sharing"]), faq_item("eMule'de yükleme yuvalarını nasıl sınırlandırırım?", "eMuleBB, sınırlı bir geniş bant yükleme yuvası hedefi, zayıf yuva geri dönüşümü ve pratik tanılama ekler; böylece hızlı hatlar kuyruğu boğmadan yararlı kalır.", "İndirme ve arama kılavuzu", FAQ_LINKS["downloads"]), faq_item("eMuleBB, eMule'nin bir protokol fork'u mu?", "Hayır. eMuleBB stok uyumlu eD2K ve Kad davranışını varsayılan olarak korur, ardından çevresindeki yerel sınırları, otomasyonu, tanılamayı ve sürüm disiplinini geliştirir.", "Ürün kılavuzu", FAQ_LINKS["product"]), - faq_item("Test için hangi eMule sürümünü kullanmalıyım?", "Kararlı paket testi için yayınlanmış eMuleBB 0.7.3 GitHub Release'ini kullanın. Nightly, beta ve eski release-candidate paketleri pre-release test build'leridir.", "0.7.3 sürüm panosu", FAQ_LINKS["release"]), + faq_item("Test için hangi eMule sürümünü kullanmalıyım?", FAQ_TESTING_ANSWERS["tr"], "eMuleBB Rust", RUST_PAGE.url), faq_item("eMule WebServer veya REST'i nasıl güvende tutarım?", "eMuleBB, WebServer ve REST'i güvenilir denetleyici yüzeyleri olarak ele alır. Yalnızca gerektiğinde etkinleştirin, bilinçli bind yapın, bir API key kullanın ve geniş erişimden kaçının.", "Denetleyiciler ve REST kılavuzu", FAQ_LINKS["controllers"]), faq_item("eMule'yi Kad ve sunucularla nasıl kullanırım?", "eMuleBB klasik sunucu, küresel ve Kad arama iş akışlarını korur. Güvenilir sunucu listeleriyle başlayın, Kad'ı bilinçli olarak bootstrap edin ve çok ayar değiştirmeden önce Low ID veya güvenlik duvarı arkasındaki Kad'ı teşhis edin.", "Ağ kılavuzu", FAQ_LINKS["network"]), faq_item("eMule'de büyük paylaşılan kütüphaneleri nasıl yönetirim?", "eMuleBB büyük kütüphaneler için yapılmıştır: kökleri kademeli ekleyin, uzun yol destekli Windows kurulumları kullanın, share-ignore kurallarını gözden geçirin ve başlangıç önbelleğinin yerleşmesini bekleyin.", "Paylaşım kılavuzu", FAQ_LINKS["sharing"]), @@ -845,7 +844,7 @@ def faq_item(question: str, answer: str, doc_title: str, doc_href: str) -> dict[ faq_item("eMule에서 라이브러리를 어떻게 공유하나요?", "eMuleBB는 익숙한 Shared Files 모델을 유지합니다. 정리된 루트를 추가하고, Temp는 공유에서 빼고, 안정적인 경로를 사용하며, 규모를 키우기 전에 hashing이 끝나게 두세요.", "공유 가이드", FAQ_LINKS["sharing"]), faq_item("eMule에서 업로드 슬롯을 어떻게 제한하나요?", "eMuleBB는 한정된 광대역 업로드 슬롯 목표, 약한 슬롯 재활용, 실용적인 진단을 추가하여 빠른 회선이 큐를 넘치게 하지 않으면서 유용하게 유지되도록 합니다.", "다운로드 및 검색 가이드", FAQ_LINKS["downloads"]), faq_item("eMuleBB는 eMule의 프로토콜 포크인가요?", "아니요. eMuleBB는 스톡 호환 eD2K 및 Kad 동작을 기본으로 유지하고, 그 주위에서 로컬 한계, 자동화, 진단, 릴리스 규율을 개선합니다.", "제품 가이드", FAQ_LINKS["product"]), - faq_item("테스트에는 어떤 eMule 릴리스를 사용해야 하나요?", "RC 테스트에는 공개된 eMuleBB 0.7.3 GitHub Release를 사용하세요. 안정 목표는 게이트를 통과한 뒤 0.7.3으로 유지됩니다.", "0.7.3 릴리스 대시보드", FAQ_LINKS["release"]), + faq_item("테스트에는 어떤 eMule 릴리스를 사용해야 하나요?", FAQ_TESTING_ANSWERS["ko"], "eMuleBB Rust", RUST_PAGE.url), faq_item("eMule WebServer나 REST를 어떻게 안전하게 유지하나요?", "eMuleBB는 WebServer와 REST를 신뢰된 컨트롤러 표면으로 다룹니다. 필요할 때만 활성화하고, 의도적으로 bind하고, API key를 사용하며, 광범위한 노출을 피하세요.", "컨트롤러 및 REST 가이드", FAQ_LINKS["controllers"]), faq_item("eMule을 Kad 및 서버와 함께 어떻게 사용하나요?", "eMuleBB는 클래식한 서버, 글로벌, Kad 검색 워크플로를 유지합니다. 신뢰할 수 있는 서버 목록으로 시작하고, Kad를 의도적으로 bootstrap하며, 많은 설정을 바꾸기 전에 Low ID나 방화벽 뒤의 Kad를 진단하세요.", "네트워크 가이드", FAQ_LINKS["network"]), faq_item("eMule에서 큰 공유 라이브러리를 어떻게 다루나요?", "eMuleBB는 큰 라이브러리를 위해 만들어졌습니다. 루트를 점진적으로 추가하고, 긴 경로를 지원하는 Windows 설정을 사용하고, share-ignore 규칙을 검토하며, 시작 캐시 작업이 안정되게 두세요.", "공유 가이드", FAQ_LINKS["sharing"]), @@ -872,7 +871,7 @@ def faq_item(question: str, answer: str, doc_title: str, doc_href: str) -> dict[ faq_item("كيف أشارك مكتبتي في eMule؟", "يحافظ eMuleBB على نموذج Shared Files المألوف: أضف جذورًا منسّقة، وأبقِ Temp خارج المشاركات، واستخدم مسارات ثابتة، ودع الـ hashing ينتهي قبل التوسّع.", "دليل المشاركة", FAQ_LINKS["sharing"]), faq_item("كيف أحدّ من خانات الرفع في eMule؟", "يضيف eMuleBB هدفًا محدودًا لخانات الرفع عريض النطاق، وإعادة تدوير الخانات الضعيفة، وتشخيصًا عمليًا حتى تبقى الخطوط السريعة مفيدة دون إغراق الطابور.", "دليل التنزيل والبحث", FAQ_LINKS["downloads"]), faq_item("هل eMuleBB تفرّع بروتوكول من eMule؟", "لا. يحافظ eMuleBB على سلوك eD2K وKad المتوافق مع الأصل افتراضيًا، ثم يحسّن الحدود المحلية والأتمتة والتشخيص وانضباط الإصدار حوله.", "دليل المنتج", FAQ_LINKS["product"]), - faq_item("أي إصدار eMule يجب أن أستخدم للاختبار؟", "استخدم إصدار GitHub المنشور eMuleBB 0.7.3 لاختبار RC. يبقى الهدف المستقر 0.7.3 بعد اجتياز البوابات.", "لوحة إصدار 0.7.3", FAQ_LINKS["release"]), + faq_item("أي إصدار eMule يجب أن أستخدم للاختبار؟", FAQ_TESTING_ANSWERS["ar_ae"], "eMuleBB Rust", RUST_PAGE.url), faq_item("كيف أبقي WebServer أو REST في eMule آمنًا؟", "يتعامل eMuleBB مع WebServer وREST كأسطح لمتحكمات موثوقة. فعّلها عند الحاجة فقط، واربط عن قصد، واستخدم مفتاح API، وتجنّب الكشف الواسع.", "دليل المتحكمات وREST", FAQ_LINKS["controllers"]), faq_item("كيف أستخدم eMule مع Kad والخوادم؟", "يحافظ eMuleBB على سير عمل البحث عبر الخادم والبحث العام وKad. ابدأ بقوائم خوادم موثوقة، وقم بـ bootstrap لـ Kad عن قصد، وشخّص Low ID أو Kad خلف جدار الحماية قبل تغيير إعدادات كثيرة.", "دليل الشبكة", FAQ_LINKS["network"]), faq_item("كيف أتعامل مع المكتبات المشتركة الكبيرة في eMule؟", "صُمِّم eMuleBB للمكتبات الكبيرة: أضف الجذور تدريجيًا، واستخدم إعدادات Windows داعمة للمسارات الطويلة، وراجع قواعد share-ignore، ودع عمل ذاكرة بدء التشغيل يستقر.", "دليل المشاركة", FAQ_LINKS["sharing"]), @@ -1356,16 +1355,11 @@ def apply_lifecycle_copy( } -def apply_stable_faq_copy() -> None: - """Normalize current product-lane facts across localized FAQ copy.""" +def apply_faq_product_copy() -> None: + """Normalize current product-lane metadata across localized FAQ copy.""" for key, faq in FAQ_CONTENT.items(): faq["meta_description"] = FAQ_TESTING_ANSWERS[key] - for item in faq["items"]: - if item["doc_href"] == FAQ_LINKS["release"]: - item["answer"] = FAQ_TESTING_ANSWERS[key] - item["doc_title"] = "eMuleBB Rust" - item["doc_href"] = RUST_PAGE.url def add_release_evidence_copy(content: dict[str, Any]) -> None: @@ -1426,7 +1420,7 @@ def with_generated_links(root: Path, contract: dict[str, Any]) -> None: """Populate repeated docs and repo link sections for every locale.""" ensure_stock_locale_content(root) - apply_stable_faq_copy() + apply_faq_product_copy() for page in PAGES: content = CONTENT[page.key] content.setdefault("install_callout", INSTALL_CALLOUT)