diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8c8e0aa..7a86b9d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -47,6 +47,31 @@ npm run check # astro check (type-check) — must pass `npm run build` fetches from `api.github.com`; export `GITHUB_TOKEN` locally if you hit rate limits (CI passes its built-in token). +## Prose style + +Site copy is edited to newspaper style. The register is the product's — dry, +declarative, honest result first — and headlines like "Gates that refuse to +flatter" are doing real work. The rules below are about legibility, not voice. + +- **One dash-set aside per sentence.** Past that, split the sentence. +- **Sentences under ~35 words.** Longer only when the length is doing something + a break would lose, such as a parallel enumeration. +- **Gloss jargon on first use, per page.** Each page is a standalone article for + a reader arriving from search: `PBO/CSCV`, basis points, "per leg", "taker + fee" and "fails closed" all get expanded where they first appear on a page. +- **Figures:** `about`, not `~`, in prose; keep the tilde for tables and + parentheses. Spell out one through nine, figures from 10 up. +- **`keel` is always lowercase**, including sentence-initial and in ``. +- **Curly quotes** in prose; straight quotes only inside code. +- **CLI literals keep their exact form** — `GO-LIVE`, `TRAIN-MORE`, never + `TRAIN MORE`. +- **Spelling is US** (`summarize`, `practiced`). +- **Meta descriptions stay under 160 characters** so they do not truncate in + search results. + +Arabic follows Modern Standard Arabic, with one settled rendering per technical +term — see the terminology table in #34. + ## Honesty rules (FR-9) No profit claims, no testimonial walls, results stated exactly as the engine diff --git a/src/i18n/guides/content.ts b/src/i18n/guides/content.ts index a556477..4d60854 100644 --- a/src/i18n/guides/content.ts +++ b/src/i18n/guides/content.ts @@ -122,7 +122,7 @@ export const guides: Guide[] = [ title: "Step 4 — Read the report honestly", body: [ "The report ends with GO-LIVE or TRAIN-MORE, naming every gate and its numbers: performance floors, the 100-trade sample floor, the overfitting check.", - "On the default rules it will very likely say TRAIN MORE. That is the engine working, not broken — keel refuses to flatter a backtest, and no shipped rule family is net-positive at the taker fee actually paid. The honesty is the feature.", + "On the default rules it will very likely say TRAIN-MORE. That is the engine working, not broken: keel refuses to flatter a backtest, and no shipped rule family is net positive at the taker fee actually paid. The honesty is the feature.", ], }, { @@ -163,12 +163,12 @@ export const guides: Guide[] = [ code: "keel agent", shot: "/get-started/tui-rules.png", shotCaption: - "The Rules console (4): the tried-vs-used ledger — every rule with its lifecycle status. candidate → paper → live is the only road to live trading.", + "The Rules console (4): the lifecycle ledger — every rule with the stage it has reached. candidate → paper → live is the only road to live trading.", }, { title: "Step 3 — Confirm every order", body: [ - "By default the agent previews each order and asks you at the terminal; headless, it declines. keel autonomy on changes who is asked — never what is allowed. For the paper profile, answering prompts is the point: watch what the rails veto and why.", + "By default the agent previews each order and asks you at the terminal. Running headless, with no one to ask, it declines. keel autonomy on changes who is asked — never what is allowed. For the paper profile, answering prompts is the point: watch what the rails veto and why.", ], }, { @@ -238,7 +238,7 @@ export const guides: Guide[] = [ { title: "Where this leads", body: [ - "With attestations recorded, a rule promoted through its gates, and the go-live runbook followed, the supervised first live order is the same confirm prompt you practised in paper — with real consequences. Read the go-live runbook before that day.", + "With attestations recorded, a rule promoted through its gates, and the go-live runbook followed, the supervised first live order is the same confirm prompt you practiced in paper — with real consequences. Read the go-live runbook before that day.", ], }, ], diff --git a/src/i18n/pages/about.ts b/src/i18n/pages/about.ts index 83d96fc..2f8b6ed 100644 --- a/src/i18n/pages/about.ts +++ b/src/i18n/pages/about.ts @@ -24,7 +24,7 @@ export interface AboutContent { export const about: LocalizedPage<AboutContent> = { en: { - rev: "2026-08-20.1", + rev: "2026-08-20.2", title: "About keel — Name, License, keel.sh & KEEL FAQ", description: "Who runs keeltrading.com, licensing, and the brand FAQ — why this keel is not Kubernetes Keel (keel.sh) nor Keel Infrastructure (KEEL).", @@ -44,13 +44,13 @@ export const about: LocalizedPage<AboutContent> = { { question: "Is this the Kubernetes project called Keel?", answer: [ - "No. There is an established Kubernetes deployment tool named Keel at keel.sh, and it currently owns the bare-\"keel\" search results. This project — keel by CodeGate Software — is unrelated to it: no shared code, history, or people. We call the project \"keel trading\" where ambiguity would mislead, and this site exists partly to make that distinction easy to find.", + "No. There is an established Kubernetes deployment tool named Keel at keel.sh, and it currently owns the bare-“keel” search results. This project — keel by CodeGate Software — is unrelated to it: no shared code, history, or people. We call the project “keel trading” where ambiguity would mislead, and this site exists partly to make that distinction easy to find.", ], }, { question: "Is this Keel Infrastructure, the KEEL stock?", answer: [ - "No. A Nasdaq-listed bitcoin-mining company (formerly Bitfarms) trades under the ticker KEEL, so a search for \"keel trading\" or \"keel crypto\" may show its stock chart near these results. It has no connection to this project. This keel is an open-source compliance engine by CodeGate Software — if you landed on keeltrading.com, you are in the right place.", + "No. A Nasdaq-listed bitcoin-mining company (formerly Bitfarms) trades under the ticker KEEL, so a search for “keel trading” or “keel crypto” may show its stock chart near these results. It has no connection to this project. This keel is an open-source compliance engine by CodeGate Software — if you landed on keeltrading.com, you are in the right place.", ], }, { @@ -85,7 +85,7 @@ export const about: LocalizedPage<AboutContent> = { question: "Why is keel open source — and free?", answer: [ "Because keel's entire value is auditability. A compliance engine you cannot inspect is exactly the “trust me” model keel exists to replace: closed screening tools ask you to believe their verdicts; keel publishes the machinery and the rulings it enforces, with sources. Openness is not a marketing choice bolted on — it is the product.", - "And to be precise about “free”: the engine is free by license, not by trial. Apache-2.0 cannot be un-free'd — that copy of the license ships with every version.", + "And to be precise about “free”: the engine is free by license, not by trial. Apache-2.0 cannot be revoked: a copy of the license ships with every version.", ], }, { @@ -107,8 +107,8 @@ export const about: LocalizedPage<AboutContent> = { }, ar: { - rev: "2026-08-20.1", - translatedFromRev: "2026-08-20.1", + rev: "2026-08-20.2", + translatedFromRev: "2026-08-20.2", title: "حول كيل — الاسم والترخيص وأسئلة keel.sh وKEEL", description: "مَن يُشغّل keeltrading.com، والتراخيص، والأسئلة الشائعة عن الاسم — ولماذا ليس هذا كيلَ Kubernetes‏ (keel.sh) ولا شركةَ Keel Infrastructure‏ (KEEL).", @@ -191,8 +191,8 @@ export const about: LocalizedPage<AboutContent> = { }, fr: { - rev: "2026-08-20.1", - translatedFromRev: "2026-08-20.1", + rev: "2026-08-20.2", + translatedFromRev: "2026-08-20.2", title: "À propos de keel — nom, licence et FAQ keel.sh & KEEL", description: "Qui édite keeltrading.com, les licences, et la FAQ de la marque — pourquoi ce keel n'est ni le Keel de Kubernetes (keel.sh) ni Keel Infrastructure (KEEL).", diff --git a/src/i18n/pages/community.ts b/src/i18n/pages/community.ts index 8179beb..be8f95a 100644 --- a/src/i18n/pages/community.ts +++ b/src/i18n/pages/community.ts @@ -26,14 +26,14 @@ const SLUG_BASE = "https://github.com/CodeGateSoftware/keel/discussions/categori export const community: LocalizedPage<CommunityContent> = { en: { - rev: "2026-08-19.2", + rev: "2026-08-20.2", title: "keel Community on GitHub Discussions", description: "Questions, ideas, polls, and classification debate happen on GitHub Discussions. The site only reads and links — interaction stays where the project lives.", intro: [ "Everything community-shaped happens on GitHub Discussions — posting, voting, polling, answering. This website deliberately has none of that: it reads and links, because that is where the project, its history, and its moderation already live.", ], - note: "One category deserves a special mention: Compliance & classification. \"Should X be treated this way?\" is a question, not a bug — and there is a place for it.", + note: "One category deserves a special mention: Compliance & classification. “Should X be treated this way?” is a question, not a bug — and there is a place for it.", categories: [ { name: "Announcements", @@ -43,7 +43,7 @@ export const community: LocalizedPage<CommunityContent> = { { name: "Compliance & classification", slug: "compliance-classification", - description: "The \"should X be treated this way\" conversations — classification discussion is a question, not a bug, and must not be triaged as one.", + description: "The “should X be treated this way” conversations — classification discussion is a question, not a bug, and must not be triaged as one.", }, { name: "Ideas", @@ -74,8 +74,8 @@ export const community: LocalizedPage<CommunityContent> = { }, ar: { - rev: "2026-08-19.2", - translatedFromRev: "2026-08-19.2", + rev: "2026-08-20.2", + translatedFromRev: "2026-08-20.2", title: "مجتمع كيل على نقاشات GitHub", description: "الأسئلة والأفكار واستطلاعات الرأي ونقاش التصنيف تجري في نقاشات GitHub. وهذا الموقع يقرأ ويربط فقط — ويبقى التفاعل حيث يعيش المشروع.", @@ -123,8 +123,8 @@ export const community: LocalizedPage<CommunityContent> = { }, fr: { - rev: "2026-08-20.1", - translatedFromRev: "2026-08-19.2", + rev: "2026-08-20.2", + translatedFromRev: "2026-08-20.2", title: "La communauté keel — sur GitHub, par choix", description: "Questions, idées, sondages et débats de classification ont lieu dans les Discussions GitHub de keel. Ce site se contente de lire et de renvoyer : l'échange reste là où vit le projet.", diff --git a/src/i18n/pages/compare.ts b/src/i18n/pages/compare.ts index e6f2ae4..bbdd381 100644 --- a/src/i18n/pages/compare.ts +++ b/src/i18n/pages/compare.ts @@ -40,17 +40,17 @@ export const compareColumns = [ export const compare: LocalizedPage<CompareContent> = { en: { - rev: "2026-08-20.4", + rev: "2026-08-20.5", title: "How keel Compares to Other Trading Bots", description: - "keel compared with Freqtrade, Jesse, and Hummingbot: license, focus, strategy gates, and the compliance machinery none of them carry — structural facts from public repositories.", + "keel compared with Freqtrade, Jesse and Hummingbot: license, focus, strategy gates, and the compliance machinery none of them carry.", intro: [ "Freqtrade, Jesse, and Hummingbot are established, capable open-source trading bots — far more mature than keel, with communities orders of magnitude larger. If you want general algorithmic trading with the widest exchange coverage, they are the better answer.", "This page states, factually and from public repositories, where keel differs: keel is not a better trading bot — it is a different thing, an enforcement engine for Shariah compliance you supply.", ], tableTitle: "Structural comparison", footnote: - "Facts from each project's public repository, August 2026. Community scale (GitHub stars, same date): Freqtrade ~53k, Hummingbot ~19.5k, Jesse ~8.3k — keel just launched. The Cost row was verified from each project's own site on 2026-08-20; Jesse's plugin pricing changes often — re-check at jesse.trade/pricing. Freqtrade, Jesse, Hummingbot, and QuantCrawler are projects of their maintainers; their names appear here solely to identify them. Alpaca is a brokerage, not a bot — keel ships a broker adapter for it under the venue port.", + "Facts from each project's public repository, August 2026. Community scale, measured in GitHub stars on the same date: Freqtrade about 53,000, Hummingbot about 19,500, Jesse about 8,300. keel has just launched. The Cost row was verified from each project's own site on 2026-08-20; Jesse's plugin pricing changes often, so re-check it at jesse.trade/pricing. Freqtrade, Jesse, Hummingbot and QuantCrawler are projects of their maintainers, and their names appear here solely to identify them. Alpaca is a brokerage, not a bot: keel ships a broker adapter for it under the venue port.", readingTitle: "How to read this", reading: [ "Every project here backtests strategies and can trade crypto. The differences that matter are structural: what the engine refuses to do, what it requires before a rule may trade live money, and whether compliance is machinery or nothing at all.", @@ -58,13 +58,13 @@ export const compare: LocalizedPage<CompareContent> = { ], paidTitle: "What about paid services?", paidBody: [ - "QuantCrawler is the kind of paid service many retail traders meet first: $9.99/month after a 30-day free trial (verified 2026-08-20). It relays TradingView webhook alerts to your broker and copies trades across accounts — ten broker integrations, Coinbase among them, with a futures and prop-firm focus. It is closed-source and cloud-hosted: you connect your broker credentials to their platform, and execution runs on their servers.", + "QuantCrawler is the kind of paid service many retail traders meet first: $9.99 a month after a 30-day free trial (verified 2026-08-20). It relays TradingView webhook alerts to your broker and copies trades across accounts — ten broker integrations, Coinbase among them, with a futures and prop-firm focus. It is closed-source and cloud-hosted: you connect your broker credentials to their platform, and execution runs on their servers.", "keel is the opposite trade-off. Nothing hosted, nothing closed: the engine runs on your machine, your keys never leave it, and no rule may touch live money before clearing the promotion gate. What keel does not have is QuantCrawler's broker breadth or its TradingView-first workflow — if that is what you need, theirs is the fitting answer, at the price of entrusting a service with your credentials. Like the bots above, it carries no compliance machinery; that difference is keel's reason to exist.", ], venuesTitle: "Which venues, and why", venuesBody: [ - "keel's Coinbase adapter is the live-proven reference: attested spot screening, real orders, the whole gauntlet exercised in production. Alpaca is wired for deployment on the equities side — the same enforcement, paper-first, with session-aware market clocks. The Robinhood adapter ships in the repository as an optional dev venue, deliberately outside deployments until its live-path prerequisites close.", - "What keel declines categorically: futures, margin, shorting, and derivatives of any kind — long-only spot is the whole surface, by fiqh posture and by design. Venue breadth is deliberately not chased; every new venue is a capability-verified adapter decision, not a growth metric.", + "keel's Coinbase adapter is the live-proven reference: attested spot screening, real orders, the whole gauntlet run in production. Alpaca is wired for deployment on the equities side — the same enforcement, paper-first, with session-aware market clocks. The Robinhood adapter ships in the repository as an optional dev venue, deliberately outside deployments until its live-path prerequisites close.", + "What keel declines categorically: futures, margin, shorting, and derivatives of any kind — long-only spot is the whole surface, by fiqh posture and by design. We deliberately do not chase venue breadth. Every new venue is an adapter decision, taken once its capabilities are verified, and never a growth metric.", ], catchLink: "Why is keel free when the others charge subscriptions? The honest answer is on the About page.", wontDoTitle: "What keel will not do", @@ -72,13 +72,13 @@ export const compare: LocalizedPage<CompareContent> = { "Chase exchange coverage: Coinbase is the live-proven reference and Alpaca is wired for equities paper; the Robinhood adapter ships optional/dev, deliberately outside deployments.", "Trade anything but long-only spot: no leverage, no shorting, no derivatives.", "Promote a rule on backtest brilliance alone: the overfitting check (PBO/CSCV) can veto it.", - "Promise profit: no shipped rule family is net-positive at the taker fee actually paid, and the site says so on its front page.", + "Promise profit: no shipped rule family is net positive at the taker fee actually paid, and the site says so on its front page.", ], }, ar: { - rev: "2026-08-20.4", - translatedFromRev: "2026-08-20.4", + rev: "2026-08-20.5", + translatedFromRev: "2026-08-20.5", title: "مقارنة كيل ببوتات التداول الأخرى", description: "مقارنة كيل بـ Freqtrade وJesse وHummingbot: الترخيص والغرض وبوابات الترقية وآلياتُ الامتثال التي لا يحملها أيٌّ منها — وقائعُ بنيويةٌ من المستودعات العمومية.", @@ -115,8 +115,8 @@ export const compare: LocalizedPage<CompareContent> = { }, fr: { - rev: "2026-08-20.4", - translatedFromRev: "2026-08-20.4", + rev: "2026-08-20.5", + translatedFromRev: "2026-08-20.5", title: "Comparer keel aux autres bots de trading", description: "keel face à Freqtrade, Jesse et Hummingbot : licence, finalité, verrous de promotion et la machinerie de conformité qu'aucun d'eux n'embarque — des faits structurels tirés des dépôts publics.", @@ -340,7 +340,7 @@ export const compareRows = (locale: "en" | "ar" | "fr"): CompareRow[] => { { label: "Shariah compliance machinery", values: [ - "Attested fail-closed screening + 18 un-overridable rails (incl. qabd)", + "Attested screening that fails closed + 18 rails no order can skip (including qabd)", "Not built in", "Not built in", "Not built in", diff --git a/src/i18n/pages/compliance.ts b/src/i18n/pages/compliance.ts index 5cbe4b9..b39519f 100644 --- a/src/i18n/pages/compliance.ts +++ b/src/i18n/pages/compliance.ts @@ -20,7 +20,7 @@ export interface ComplianceContent { export const compliance: LocalizedPage<ComplianceContent> = { en: { - rev: "2026-08-19.2", + rev: "2026-08-20.2", title: "Shariah Compliance Methodology, in Plain Terms", description: "How keel's Shariah compliance works: fail-closed attested screening, the per-(venue, product) attestation model, the qabd check — and what keel is not.", @@ -30,20 +30,20 @@ export const compliance: LocalizedPage<ComplianceContent> = { { title: "Computed facts vs attested classifications", body: [ - "Some things about an asset are knowable from the market and are simply computed. But whether a token's core purpose is a haram sector, whether it is asset-backed 'ayn or a claim dayn, whether it pays a riba-like yield — these are questions of fact-plus-scholarship about the world. No module in the repository derives them from candle data, and none pretends to. A human records them, with a source and an attributed name; keel enforces the record deterministically and rejects anything unattested.", + "Some things about an asset are knowable from the market, and those are simply computed. Others are not. Whether a token's core purpose is a haram sector, whether it is asset-backed ('ayn) or a claim on a debtor (dayn), whether it pays a riba-like yield — these are questions of fact and scholarship about the world. No module in the repository derives them from candle data, and none pretends to. A human records them, with a source and an attributed name. keel then enforces that record deterministically and rejects anything unattested.", ], }, { title: "The per-(venue, product) attestation model", body: [ "An attestation is scoped: it names the venue and the product, carries a source, and is attributed to a name. Two operators following different schools can hold different attestations and get different answers from the same code — by design, because the ruling lives in your attestation, not in the code.", - "The same model covers the venue itself: rail 14 refuses live BUYs until the operator attests the venue subscription, and rail 17 encodes §65.4 qabd — an asset that cannot be withdrawn may not have been validly possessed, so withdrawal capability is attested and enforced, not assumed.", + "The same model covers the venue itself. Rail 14 refuses live BUYs until the operator attests the venue subscription. Rail 17 encodes §65.4 qabd, the doctrine of constructive possession: an asset that cannot be withdrawn may never have been validly possessed. So withdrawal capability is attested and enforced, not assumed.", ], }, { title: "Purification and the spot-only shape", body: [ - "keel is long-only spot with no leverage, no shorting, and no derivatives; position sizing uses actual cash, so no riba enters through the position itself. Where an obligation cannot be enforced by code, it is stated rather than waved away: account-level duties no rail can see — disabling USDC rewards on idle balances, chiefly — are the operator's to verify, listed in the operator runbook.", + "keel is long-only spot with no leverage, no shorting, and no derivatives; position sizing uses actual cash, so no riba enters through the position itself. Where an obligation cannot be enforced by code, it is stated rather than waved away. Account-level duties no rail can see — chiefly, disabling USDC rewards on idle balances — are the operator's to verify. The operator runbook lists them.", ], }, ], @@ -54,7 +54,7 @@ export const compliance: LocalizedPage<ComplianceContent> = { "It is not financial advice and not religious (Shariah) advice.", "No scholarly review of keel's fiqh basis has occurred. The basis is one operator's sourced reading, published so it can be audited and challenged; until a review happens, the status is: not reviewed.", "Attestation is the operator's act and the operator's responsibility. keel is the enforcement machinery, not the authority.", - "It does not promise profit — no shipped rule family is net-positive at the taker fee actually paid, and the reference benchmark is simple DCA.", + "It does not promise profit. No shipped rule family is net positive at the taker fee actually paid, and the reference benchmark is simple DCA.", ], }, attest: { @@ -93,8 +93,8 @@ export const compliance: LocalizedPage<ComplianceContent> = { }, ar: { - rev: "2026-08-19.2", - translatedFromRev: "2026-08-19.2", + rev: "2026-08-20.2", + translatedFromRev: "2026-08-20.2", title: "منهجية الامتثال الشرعي بلغةٍ مبسّطة", description: "كيف يعمل الامتثال الشرعي في كيل: فرزٌ موثَّق يرفض عند الفشل، ونموذجُ توثيقٍ لكل (منصّة، منتج)، وفحصُ القبض — وما لا يزعمه كيل.", @@ -167,8 +167,8 @@ export const compliance: LocalizedPage<ComplianceContent> = { }, fr: { - rev: "2026-08-20.1", - translatedFromRev: "2026-08-19.2", + rev: "2026-08-20.2", + translatedFromRev: "2026-08-20.2", title: "La méthodologie de conformité, en termes simples", description: "Comment fonctionne la conformité Shariah de keel : un filtrage attesté qui bloque par défaut, le modèle d'attestation par (plateforme, produit), le contrôle qabd — et ce que keel n'est pas : ni une fatwa, ni un conseil financier, et sans examen par des savants.", diff --git a/src/i18n/pages/features.ts b/src/i18n/pages/features.ts index b33c9d2..0346978 100644 --- a/src/i18n/pages/features.ts +++ b/src/i18n/pages/features.ts @@ -25,17 +25,17 @@ export interface FeaturesContent { export const features: LocalizedPage<FeaturesContent> = { en: { - rev: "2026-08-20.2", + rev: "2026-08-20.3", title: "Shariah Compliance Engine Features — keel", description: - "Attested fail-closed screening, 18 un-overridable rails, overfitting-checked strategy gates, and honest DCA-benchmarked measurement — all mapped to source.", + "Attested screening that fails closed, 18 rails no order can skip, gates checked for overfitting, and honest measurement against DCA — all mapped to source.", intro: "This page describes only what the engine repository can show. Each section links to the source that proves it — if a claim ever drifts from the code, the link is how you catch us.", verifyNote: "Verify in the repository", features: [ { title: "Attested asset screening — fails closed", - body: "Admission to the allowlist is split by what is knowable. Market facts are computed. Shariah classifications — is the core purpose a haram sector, is the token asset-backed 'ayn or a claim dayn, does it pay a riba-like yield — are attested, never inferred, via keel assets attest. An absent attestation is a rejection, not a default pass.", + body: "Admission to the allowlist is split by what is knowable. Market facts are computed. The Shariah questions are not: whether a token's core purpose is a haram sector, whether it is asset-backed ('ayn) or a claim on a debtor (dayn), and whether it pays a riba-like yield. Those are attested through keel assets attest, never inferred. An absent attestation is a rejection, not a default pass.", verify: { label: "compliance/screen.py", href: "https://github.com/CodeGateSoftware/keel/blob/main/keel/compliance/screen.py" }, }, { @@ -44,38 +44,38 @@ export const features: LocalizedPage<FeaturesContent> = { points: [ "The halal allowlist, per-order and per-day spend caps, exposure and concentration caps", "Correlation-aware sizing, a minimum-move floor, no-martingale and no-stop-widening", - "Total and weekly drawdown breakers, a consecutive-loss/edge-decay breaker", + "Total and weekly drawdown breakers, plus a breaker for consecutive losses and edge decay", "Feed-staleness and quote-balance checks", "Rail 14 — venue subscription/withdrawal attestations: live BUYs are refused until the operator attests", "Rail 17 — §65.4 qabd: withdrawal capability is attested and enforced, because an asset that cannot be withdrawn may not have been validly possessed", - "A max-spread entry gate that refuses live BUYs at or beyond 50bp spread, fail-closed on an unreadable book", - "A rail veto names itself and the command that clears it", + "A maximum-spread entry gate that refuses live BUYs at a spread of 50 basis points or wider, and refuses outright if the order book cannot be read", + "A rail veto names the rail that fired and the command that clears it", ], verify: { label: "execution/guards.py", href: "https://github.com/CodeGateSoftware/keel/blob/main/keel/execution/guards.py" }, }, { title: "Strategy gates — candidate → paper → live", - body: "A rule must walk three stages before it can touch live money. Promotion clears a two-part gate: performance floors and an overfitting check (PBO/CSCV). The 100-trade sample floor may be met by the rule's own backtest or pooled across products in paper — provided at least five products each contribute ten trades, because a pool of correlated samples overstates its power.", + body: "A rule must walk three stages before it can touch live money. Promotion clears a two-part gate: performance floors, and an overfitting check (PBO/CSCV). The 100-trade sample floor can be met by the rule's own backtest, or pooled across products in paper. Pooling requires at least five products contributing ten trades each, because a pool of correlated samples overstates its own power.", verify: { label: "agent.py — RULE_REGISTRY", href: "https://github.com/CodeGateSoftware/keel/blob/main/keel/agent.py" }, }, { title: "Honest measurement, against DCA", - body: "keel simulate replays the real rules over fetched history, compares against a simple DCA benchmark, and writes a GO-LIVE / TRAIN-MORE report naming every gate and its numbers. The backtester prices per-product slippage scaled from each asset's real liquidity (5–50bp), so results cannot be flattered by thin books. On the default rules it will very likely tell you TRAIN MORE — that is the engine working, not broken.", + body: "keel simulate replays the real rules over fetched history, compares against a simple DCA benchmark, and writes a GO-LIVE / TRAIN-MORE report naming every gate and its numbers. The backtester prices per-product slippage scaled from each asset's real liquidity, from 5 to 50 basis points, so results cannot be flattered by thin order books. On the default rules it will very likely tell you TRAIN-MORE. That is the engine working, not broken.", verify: { label: "the experiment record", href: "https://github.com/CodeGateSoftware/keel/tree/main/docs/experiments" }, }, { title: "Three deployment profiles that share nothing", - body: "Daily paper, live, and an hourly evidence profile (paper-hourly) — each with its own database and config. The hourly profile exists because the daily clock measures 2.15 signals per asset-year (a 100-trade review 31–84 years away), while the same rules on ONE_HOUR bars fire 49.4 — about 940 entry signals per year pooled, putting forward-evidence review weeks away instead of decades. It is measured net-negative too: it exists to collect admissible forward evidence, not profit.", + body: "Daily paper, live, and an hourly evidence profile (paper-hourly) — each with its own database and config. The hourly profile exists because the daily clock measures only 2.15 signals per asset-year, which puts a 100-trade review 31 to 84 years away. The same rules on ONE_HOUR bars fire 49.4 signals per asset-year, about 940 entry signals a year once pooled. That moves a forward-evidence review to weeks instead of decades. The hourly profile is measured net negative too: it exists to collect admissible forward evidence, not profit.", verify: { label: "operator runbook", href: "https://github.com/CodeGateSoftware/keel/blob/main/docs/operator-runbook.md" }, }, { title: "A broker port, not a broker lock-in", - body: "Adapters implement one contract — the keel-broker-api port — and register under the keel.brokers entry point. Coinbase Advanced Trade is the reference adapter; Robinhood ships as an optional, deliberately unwired venue; an Alpaca adapter joined in v0.10.0. A deliberately divergent fake venue keeps the port honest: the conformance suite (~3,000 tests) runs against both.", + body: "Adapters implement one contract — the keel-broker-api port — and register under the keel.brokers entry point. Coinbase Advanced Trade is the reference adapter; Robinhood ships as an optional, deliberately unwired venue; an Alpaca adapter joined in v0.10.0. A deliberately divergent fake venue keeps the port honest: the conformance suite, about 3,000 tests, runs against both.", verify: { label: "packages/", href: "https://github.com/CodeGateSoftware/keel/tree/main/packages" }, }, { title: "Confirm by default; autonomy changes who is asked", - body: "keel previews each order and asks at the terminal; headless, it declines. keel autonomy on changes who is asked, never what is allowed. To stop trading, keel kill — the kill-switch fails closed.", + body: "keel previews each order and asks you at the terminal. Running headless, with no one to ask, it declines. keel autonomy on changes who is asked, never what is allowed. To stop trading, keel kill — the kill-switch fails closed.", verify: { label: "the README, 'How keel works'", href: "https://github.com/CodeGateSoftware/keel#how-keel-works" }, }, ], @@ -84,14 +84,14 @@ export const features: LocalizedPage<FeaturesContent> = { body: [ "Nothing trades until you promote a rule, attest the venue subscription, fund the account, and — in confirm mode — type y. Long-only spot only: no leverage, no shorting, no derivatives, and sizing uses actual cash, so no riba.", "Account-level obligations no rail can see (disabling USDC rewards on idle balances, chiefly) are the operator's to verify — the operator runbook lists them.", - "And the paper profile is where every rule starts — free, simulated fills, nothing at risk, no funded venue account or trading credentials (a free read-only market-data key is all it asks). It is not a demo: the same parameter set's paper trades count toward the promotion gate's minimum, so paper evidence is the first stage of the gauntlet.", + "And the paper profile is where every rule starts: free, with simulated fills and nothing at risk. It needs no funded venue account and no trading credentials — a free, read-only market-data key is all it asks for. It is not a demo. Paper trades from the same parameter set count toward the promotion gate's minimum, which makes paper evidence the first stage of the gauntlet.", ], }, }, ar: { - rev: "2026-08-20.2", - translatedFromRev: "2026-08-20.2", + rev: "2026-08-20.3", + translatedFromRev: "2026-08-20.3", title: "خصائص محرّك الامتثال الشرعي — كيل", description: "فرزٌ موثَّق يرفض عند الفشل، و18 سكةَ أمانٍ لا تُتجاوَز، وبواباتُ ترقيةٍ تفحص الإفراط في المُلاءمة، وقياسٌ صادقٌ مقابل مؤشّر DCA — وكلُّ خاصيةٍ تشير إلى مصدرها في الشيفرة.", @@ -126,7 +126,7 @@ export const features: LocalizedPage<FeaturesContent> = { }, { title: "قياسٌ صادق، مقابل الشراء الدوري المنتظم", - body: "يعيد الأمر keel simulate تشغيلَ القواعد الحقيقية على التاريخ المجلوب، ويقارنها بمؤشّرٍ مرجعيٍّ بسيطٍ هو الشراء الدوري المنتظم (DCA)، ويكتب تقرير GO-LIVE أو TRAIN-MORE مسمّيًا كلَّ بوابةٍ وأرقامَها. ويُسعّر المحرّك الرجعي الانزلاقَ لكلِّ منتجٍ على قدر سيولته الفعلية (5–50 نقطة أساس)، فلا يمكن تجميلُ النتائج بدفاترِ أوامرَ ضعيفةِ السيولة. وعلى القواعد الافتراضية سيقول لك على الأرجح TRAIN MORE — وهذا دليلُ عمل المحرّك لا دليلُ عطبه.", + body: "يعيد الأمر keel simulate تشغيلَ القواعد الحقيقية على التاريخ المجلوب، ويقارنها بمؤشّرٍ مرجعيٍّ بسيطٍ هو الشراء الدوري المنتظم (DCA)، ويكتب تقرير GO-LIVE أو TRAIN-MORE مسمّيًا كلَّ بوابةٍ وأرقامَها. ويُسعّر المحرّك الرجعي الانزلاقَ لكلِّ منتجٍ على قدر سيولته الفعلية (5–50 نقطة أساس)، فلا يمكن تجميلُ النتائج بدفاترِ أوامرَ ضعيفةِ السيولة. وعلى القواعد الافتراضية سيقول لك على الأرجح TRAIN-MORE — وهذا دليلُ عمل المحرّك لا دليلُ عطبه.", verify: { label: "سجلّ التجارب", href: "https://github.com/CodeGateSoftware/keel/tree/main/docs/experiments" }, }, { @@ -156,8 +156,8 @@ export const features: LocalizedPage<FeaturesContent> = { }, fr: { - rev: "2026-08-20.2", - translatedFromRev: "2026-08-20.2", + rev: "2026-08-20.3", + translatedFromRev: "2026-08-20.3", title: "Fonctionnalités du moteur de conformité — keel", description: "Un filtrage attesté qui bloque par défaut, dix-huit garde-fous incontournables, des verrous de promotion avec contrôle de surapprentissage, une mesure honnête face au DCA — chaque fonctionnalité renvoie à sa source dans le code.", @@ -192,7 +192,7 @@ export const features: LocalizedPage<FeaturesContent> = { }, { title: "Mesure honnête, face au DCA", - body: "keel simulate rejoue les vraies règles sur l'historique récupéré, les compare à la référence DCA et rédige un rapport GO-LIVE / TRAIN-MORE qui nomme chaque verrou et ses chiffres. Le backtesteur applique à chaque produit un glissement calibré sur sa liquidité réelle (5 à 50 points de base), afin qu'aucun résultat ne puisse être flatté par un carnet d'ordres peu liquide. Sur les règles par défaut, il vous répondra très probablement TRAIN MORE : c'est le moteur qui fonctionne, pas une panne.", + body: "keel simulate rejoue les vraies règles sur l'historique récupéré, les compare à la référence DCA et rédige un rapport GO-LIVE / TRAIN-MORE qui nomme chaque verrou et ses chiffres. Le backtesteur applique à chaque produit un glissement calibré sur sa liquidité réelle (5 à 50 points de base), afin qu'aucun résultat ne puisse être flatté par un carnet d'ordres peu liquide. Sur les règles par défaut, il vous répondra très probablement TRAIN-MORE : c'est le moteur qui fonctionne, pas une panne.", verify: { label: "le registre des expériences", href: "https://github.com/CodeGateSoftware/keel/tree/main/docs/experiments" }, }, { diff --git a/src/i18n/pages/home.ts b/src/i18n/pages/home.ts index 74584f0..aef94d0 100644 --- a/src/i18n/pages/home.ts +++ b/src/i18n/pages/home.ts @@ -33,8 +33,8 @@ export interface HomeContent { export const home: LocalizedPage<HomeContent> = { en: { - rev: "2026-08-20.3", - title: "Keel: Open-Source Shariah Compliance Engine for Crypto", + rev: "2026-08-20.4", + title: "keel: the open-source Shariah compliance engine for crypto", description: "The open-source engine that enforces Shariah compliance on spot crypto: attested screening that fails closed and rails no order can skip. Not a fatwa engine.", hero: { @@ -45,8 +45,8 @@ export const home: LocalizedPage<HomeContent> = { honest: { title: "The honest result, stated first", body: [ - "No shipped rule family is net-positive at the taker fee actually paid on Coinbase (~1.2% per leg) — 0 of 90 configurations in one measurement matrix, 0 of 82 in another. We cross-verified a stochastic modelling note — re-derived its mathematics against keel's real numbers — and it sharpened the why: the taker fee is the entire result. Inside the venue's fee-free monthly allowance the reconstructed rules sit indistinguishably at break-even (a 14.9% win rate against a 14.88% break-even); one step outside it, break-even jumps to 29% and the same rules are decisively negative. The allowance rail is not a budget cap — it is the profitability boundary.", - "The point of this project is the enforcement machinery and the honest measurement of what runs through it — not a claim of profit. Every result is compared against a simple buy-every-period (DCA) benchmark, and the reference rules currently do not beat it after fees. We would rather you know that on the front page than discover it yourself. And we are working hard to improve the algorithms' and strategies' results — we will keep you updated with our progress.", + "No shipped rule family is net positive at the taker fee actually paid on Coinbase — about 1.2% on each side of a trade. In one measurement matrix, 0 of 90 configurations cleared; in another, 0 of 82. We then cross-verified a stochastic modelling note, re-deriving its mathematics against keel's real numbers, and it sharpened the why: the taker fee is the entire result. Inside the venue's fee-free monthly allowance, the reconstructed rules sit indistinguishably at break-even — a 14.9% win rate against a 14.88% break-even. One step outside it, break-even jumps to 29% and the same rules are decisively negative. The allowance rail is not a budget cap. It is the profitability boundary.", + "The point of this project is the enforcement machinery and the honest measurement of what runs through it, not a claim of profit. Every result is compared against a simple buy-every-period (DCA) benchmark, and the reference rules currently do not beat it after fees. We would rather you know that on the front page than discover it yourself. And we are working hard to improve the results of the algorithms and the strategies. We will report our progress here.", ], experimentLabel: "Read the experiment record", announcementLabel: "Read the announcement", @@ -58,11 +58,11 @@ export const home: LocalizedPage<HomeContent> = { }, { title: "Eighteen rails no order can skip", - body: "Spend caps, drawdown breakers, exposure limits, no-martingale, feed-staleness checks, a fail-closed kill-switch — plus the fiqh-derived ones: the venue subscription attestation and the constructive-possession (qabd) check that an asset which cannot be withdrawn may not have been validly possessed.", + body: "Spend caps, drawdown breakers, exposure limits, no-martingale, feed-staleness checks, and a kill-switch that fails closed: when something breaks, it refuses rather than allows. Then the fiqh-derived rails — the venue subscription attestation, and the constructive-possession (qabd) check, which holds that an asset you cannot withdraw may never have been validly possessed.", }, { title: "Gates that refuse to flatter", - body: "A rule walks candidate → paper → live. Promotion clears performance floors and an overfitting check (PBO/CSCV) — a rule that looks brilliant on one in-sample parameter set is exactly what the second gate exists to be suspicious of.", + body: "A rule walks candidate → paper → live. Promotion clears performance floors and an overfitting check: the probability of backtest overfitting, computed by combinatorially symmetric cross-validation (PBO/CSCV). A rule that looks brilliant on a single in-sample parameter set is exactly what that second gate exists to distrust.", }, ], fatwa: { @@ -100,8 +100,8 @@ export const home: LocalizedPage<HomeContent> = { }, ar: { - rev: "2026-08-20.3", - translatedFromRev: "2026-08-20.3", + rev: "2026-08-20.4", + translatedFromRev: "2026-08-20.4", title: "كيل: محرّك امتثال شرعي مفتوح المصدر للعملات المشفّرة", description: "المحرّك مفتوح المصدر الذي يُنفِّذ الامتثال الشرعي في التداول الفوري للعملات المشفّرة: فرزٌ موثَّق يرفض عند الفشل، وسككُ أمانٍ لا يتجاوزها أيُّ أمر. وليس محرّك فتاوى.", @@ -130,7 +130,7 @@ export const home: LocalizedPage<HomeContent> = { }, { title: "بواباتٌ لا تُجامِل", - body: "تنتقل القاعدة من مرشَّحةٍ إلى تجريبيةٍ (paper) إلى حيّة. ولا تُرقَّى إلا إذا اجتازت حدودًا دنيا للأداء وفحصًا للإفراط في المُلاءمة (PBO/CSCV) — فالقاعدة التي تبدو عبقريةً على مجموعةِ وسائطَ واحدةٍ داخل العيّنة هي بالضبط ما وُجدت البوابةُ الثانية للارتياب فيه.", + body: "تنتقل القاعدة من مرشَّحةٍ إلى تجريبيةٍ (paper) إلى حيّة. ولا تُرقَّى إلا إذا اجتازت حدودًا دنيا للأداء وفحصًا للإفراط في المُلاءمة — أي احتمالَ إفراط الاختبار الرجعي في المُلاءمة، محسوبًا بالتحقّق المتقاطع المتناظر توفيقيًّا (PBO/CSCV) — فالقاعدة التي تبدو عبقريةً على مجموعةِ وسائطَ واحدةٍ داخل العيّنة هي بالضبط ما وُجدت البوابةُ الثانية للارتياب فيه.", }, ], fatwa: { @@ -159,9 +159,9 @@ export const home: LocalizedPage<HomeContent> = { }, fr: { - rev: "2026-08-20.3", - translatedFromRev: "2026-08-20.3", - title: "Keel : le moteur open-source de conformité Shariah pour les cryptomonnaies", + rev: "2026-08-20.4", + translatedFromRev: "2026-08-20.4", + title: "keel : le moteur open-source de conformité Shariah pour les cryptomonnaies", description: "Le moteur open-source qui applique la conformité Shariah au trading de crypto au comptant : un filtrage attesté qui bloque par défaut, des garde-fous qu'aucun ordre ne contourne. Pas un moteur de fatwas.", hero: { @@ -189,7 +189,7 @@ export const home: LocalizedPage<HomeContent> = { }, { title: "Des verrous qui ne flattent personne", - body: "Une règle passe par trois états : candidate, papier, réel. Pour être promue, elle doit franchir des seuils de performance et un contrôle de surapprentissage (PBO/CSCV) — car une règle qui brille sur un seul jeu de paramètres, à l'intérieur de l'échantillon, est précisément ce dont le second verrou est là pour se méfier.", + body: "Une règle passe par trois états : candidate, papier, réel. Pour être promue, elle doit franchir des seuils de performance et un contrôle de surapprentissage — la probabilité que le backtest soit surajusté, calculée par validation croisée combinatoirement symétrique (PBO/CSCV) — car une règle qui brille sur un seul jeu de paramètres, à l'intérieur de l'échantillon, est précisément ce dont le second verrou est là pour se méfier.", }, ], fatwa: { diff --git a/src/i18n/pages/install.ts b/src/i18n/pages/install.ts index 5ddd9e8..3541834 100644 --- a/src/i18n/pages/install.ts +++ b/src/i18n/pages/install.ts @@ -78,7 +78,7 @@ export interface InstallContent { export const install: LocalizedPage<InstallContent> = { en: { - rev: "2026-08-20.5", + rev: "2026-08-20.6", title: "Download keel — macOS & Windows", description: "Download keel for macOS or Windows. Version and links come from GitHub Releases at build time; the five-minute source path is here too.", @@ -103,7 +103,7 @@ export const install: LocalizedPage<InstallContent> = { thenTitle: "Then install the wheels", allFilesTitle: "All release files", paperFirstTitle: "Start on paper — free, and nothing at risk", - paperFirstBody: "For the cautious first step: the paper profile is free and educational — simulated fills, no real orders — built for learning the workflow before any live decision. It needs no funded venue account and no trading credentials; the only key it asks for is a free, read-only market-data key to fetch candle history. The live profile is deliberately harder to reach: attestations, the promotion gauntlet, and typed human confirmations stand in the way.", + paperFirstBody: "For the cautious first step: the paper profile is free and educational, with simulated fills and no real orders. It is built for learning the workflow before any live decision. It needs no funded venue account and no trading credentials; the only key it asks for is a free, read-only market-data key, used to fetch candle history. The live profile is deliberately harder to reach — attestations, the promotion gauntlet and typed human confirmations all stand in the way.", getStarted: { title: "New here? Start with the Get Started guide", body: "A step-by-step walkthrough — first simulation, the paper profile, the operator console — with screenshots of every screen.", @@ -111,10 +111,10 @@ export const install: LocalizedPage<InstallContent> = { }, fromSource: { title: "From source — try it in five minutes", - lead: "Everything in this path is read-only and paper-side: no funds, and nothing here can place an order. You need uv and a free, read-only Coinbase Developer Platform (CDP) API key — candle history is fetched through the authenticated client, so keel fetch without a key fails with an AuthenticationError. Said upfront so step four is not a surprise.", + lead: "Everything in this path is read-only and paper-side: no funds, and nothing here can place an order. You need uv and a free, read-only Coinbase Developer Platform (CDP) API key — candle history is fetched through the authenticated client, so keel fetch without a key fails with an AuthenticationError. We say so here rather than let it surprise you at step four.", requirements: ["uv (the Python package manager)", "Any Python 3.11+ (the repo develops on 3.14)", "A free, read-only CDP API key — market data only"], expectTitle: "What you should expect", - expect: "keel simulate replays the real rules deterministically over the fetched history, compares against a DCA benchmark, and writes a GO-LIVE / TRAIN-MORE report. On the default rules it will very likely tell you TRAIN MORE and name the gates that fail — that is the engine working, not broken; the honesty is the feature.", + expect: "keel simulate replays the real rules deterministically over the fetched history, compares against a DCA benchmark, and writes a GO-LIVE / TRAIN-MORE report. On the default rules it will very likely tell you TRAIN-MORE and name the gates that failed. That is the engine working, not broken. The honesty is the feature.", next: "The next steps — promoting a rule through the gate, running the paper agent, a supervised first live order — are in the go-live runbook.", }, fromReleaseWarning: @@ -123,7 +123,7 @@ export const install: LocalizedPage<InstallContent> = { title: "Your computer will warn you about this download", lead: "The macOS and Windows builds are not code-signed, so your operating system will refuse the first open and tell you it cannot verify the developer. Nothing is broken, and nothing was detected — your computer simply does not know who wrote the program.", reason: - "Code signing is a paid certificate, and keel cannot currently afford either one: Apple's is $99 per year, and Azure Trusted Signing for Windows is about $120 per year — more than Apple's, and since 2024 it does not even buy an instant SmartScreen pass, because reputation is earned from download volume over time. There is no cheaper tier and no free open-source option on either platform, and a certificate we made ourselves would do nothing at all, because macOS trusts only certificates Apple issued.", + "Code signing means a paid certificate, and keel cannot currently afford either platform's. Apple's costs $99 a year. Azure Trusted Signing for Windows costs about $120 a year, more than Apple's. And since 2024 it does not even buy an instant SmartScreen pass, because reputation is earned from download volume over time. There is no cheaper tier and no free open-source option on either platform. A certificate we made ourselves would do nothing at all, because macOS trusts only certificates Apple issued.", macosTitle: "macOS", macosSteps: [ "Open the downloaded .dmg, then drag keel.app into your Applications folder.", @@ -140,7 +140,7 @@ export const install: LocalizedPage<InstallContent> = { "At the bottom of the General tab, tick Unblock if it is there, then OK. This is the step people miss, and skipping it brings the warning back on a later launch.", "Right-click the .zip → Extract All…, into a folder you own — for example C:\\Users\\<you>\\keel. Not Program Files: keel does not need administrator rights and should not be given them.", "Open the extracted folder and double-click keel.exe.", - "If SmartScreen appears — \"Windows protected your PC\" — click More info, then Run anyway.", + "If SmartScreen appears — “Windows protected your PC” — click More info, then Run anyway.", ], verifyTitle: "Please check what you downloaded first", verifyLead: @@ -155,15 +155,15 @@ export const install: LocalizedPage<InstallContent> = { ], avoidTitle: "First — you may not need to deal with this at all", avoidBody: - "The five-minute path below installs the same engine with no installer and no warning on any platform, because nothing is downloaded as an application — pip and uv fetch the published wheels directly, and no operating system objects to that. It needs a terminal and Python 3.11 or later, which is exactly the friction the desktop app exists to remove; but if you already have both, it is the shorter road and the rest of this note does not apply to you.", + "The five-minute path below installs the same engine with no installer and no warning on any platform. Nothing is downloaded as an application: pip and uv fetch the published wheels directly, and no operating system objects to that. It does need a terminal and Python 3.11 or later — exactly the friction the desktop app exists to remove. But if you already have both, it is the shorter road, and the rest of this note does not apply to you.", avoidLink: "Try it in five minutes", more: "Full explanation, including how to verify what you downloaded", }, }, ar: { - rev: "2026-08-20.5", - translatedFromRev: "2026-08-20.5", + rev: "2026-08-20.6", + translatedFromRev: "2026-08-20.6", title: "تنزيل كيل — macOS وWindows", description: "نزّل كيل لنظام macOS أو Windows. ويأتي رقمُ الإصدار وروابطه من GitHub Releases وقت البناء؛ ومسارُ التثبيت من المصدر في خمس دقائق هنا أيضًا.", @@ -199,7 +199,7 @@ export const install: LocalizedPage<InstallContent> = { lead: "كلُّ ما في هذا المسار بصلاحية القراءة فقط وعلى جانب التداول التجريبي: لا أموال، ولا شيء هنا يستطيع تقديم أمر تداول. وتحتاج إلى uv وإلى مفتاح API مجّانيٍّ للقراءة فقط من منصّة Coinbase Developer Platform‏ (CDP) — إذ تُجلب بيانات الشموع عبر العميل المُصادَق عليه، ولذلك يفشل الأمر keel fetch من دون مفتاحٍ بخطأ AuthenticationError؛ نقولها مقدَّمًا كي لا تكون مفاجأةً في الخطوة الرابعة.", requirements: ["‏uv (مدير حزم Python)", "أيُّ إصدارٍ من Python 3.11 فما فوق (يُطوَّر المستودع على 3.14)", "مفتاح CDP مجّاني للقراءة فقط — لبيانات السوق حصرًا"], expectTitle: "ما ينبغي أن تتوقّعه", - expect: "يعيد الأمر keel simulate تشغيلَ القواعد الحقيقية تشغيلًا حتميًّا على التاريخ المجلوب، ويقارنها بمؤشّر الشراء الدوري المنتظم (DCA) المرجعي، ويكتب تقرير GO-LIVE أو TRAIN-MORE. وعلى القواعد الافتراضية سيقول لك على الأرجح TRAIN MORE ويسمّي البوابات التي أخفقت — وهذا دليلُ عمل المحرّك لا دليلُ عطبه؛ فالصدق نفسه هو الميزة.", + expect: "يعيد الأمر keel simulate تشغيلَ القواعد الحقيقية تشغيلًا حتميًّا على التاريخ المجلوب، ويقارنها بمؤشّر الشراء الدوري المنتظم (DCA) المرجعي، ويكتب تقرير GO-LIVE أو TRAIN-MORE. وعلى القواعد الافتراضية سيقول لك على الأرجح TRAIN-MORE ويسمّي البوابات التي أخفقت — وهذا دليلُ عمل المحرّك لا دليلُ عطبه؛ فالصدق نفسه هو الميزة.", next: "أمّا الخطوات التالية — ترقيةُ قاعدةٍ عبر البوابة، وتشغيلُ الوكيل في التداول التجريبي، وأوّلُ أمرٍ حيٍّ خاضعٍ لإشرافٍ بشري — فتجدها في كتاب الانتقال إلى التشغيل الحيّ (go-live runbook).", }, fromReleaseWarning: @@ -247,8 +247,8 @@ export const install: LocalizedPage<InstallContent> = { }, fr: { - rev: "2026-08-20.5", - translatedFromRev: "2026-08-20.5", + rev: "2026-08-20.6", + translatedFromRev: "2026-08-20.6", title: "Télécharger keel — macOS et Windows", description: "Téléchargez keel pour macOS ou Windows. Le numéro de version et les liens proviennent de GitHub Releases, récupérés au moment du build ; le parcours en cinq minutes depuis les sources figure également ici.", @@ -284,7 +284,7 @@ export const install: LocalizedPage<InstallContent> = { lead: "Tout ce parcours est en lecture seule et côté papier : aucun fonds, et rien ici ne peut passer d'ordre. Il vous faut uv et une clé d'API Coinbase Developer Platform (CDP) gratuite, en lecture seule — l'historique des bougies passe par le client authentifié, si bien que keel fetch sans clé échoue sur une AuthenticationError. Autant le dire tout de suite, pour que l'étape 4 ne surprenne personne.", requirements: ["uv (le gestionnaire de paquets Python)", "Python 3.11 ou plus (le dépôt se développe sur 3.14)", "Une clé CDP gratuite en lecture seule — données de marché uniquement"], expectTitle: "À quoi vous attendre", - expect: "keel simulate rejoue les vraies règles, de façon déterministe, sur l'historique récupéré, les compare à la référence DCA et rédige un rapport GO-LIVE / TRAIN-MORE. Sur les règles par défaut, il vous répondra très probablement TRAIN MORE en nommant les verrous qui bloquent : c'est le moteur qui fonctionne, pas une panne — l'honnêteté est la fonctionnalité.", + expect: "keel simulate rejoue les vraies règles, de façon déterministe, sur l'historique récupéré, les compare à la référence DCA et rédige un rapport GO-LIVE / TRAIN-MORE. Sur les règles par défaut, il vous répondra très probablement TRAIN-MORE en nommant les verrous qui bloquent : c'est le moteur qui fonctionne, pas une panne — l'honnêteté est la fonctionnalité.", next: "Les étapes suivantes — faire franchir le verrou à une règle, lancer l'agent papier, passer un premier ordre réel sous supervision — figurent dans le runbook de mise en production.", }, fromReleaseWarning: diff --git a/src/i18n/ui.ts b/src/i18n/ui.ts index 42b4c10..a11aefb 100644 --- a/src/i18n/ui.ts +++ b/src/i18n/ui.ts @@ -32,7 +32,7 @@ export const ui = { plainLabel: "Plain English", operatorsLabel: "For operators", operatorsHint: - "Technical? This is the same project from the operator's seat: runbooks, CLI references, and the engine source.", + "Technically minded? Here is the same project from the operator's seat: runbooks, CLI references and the engine source.", }, banner: { staleTitle: "This translation may be behind the English original", @@ -76,7 +76,7 @@ export const ui = { disclaimer: "keel is a personal tool — not financial advice, and not a fatwa or religious advice. Consult a qualified financial advisor and a knowledgeable scholar before trading. You are solely responsible for your trading decisions and for your own attestations.", trademark: - "Alpaca, Coinbase, and Robinhood are trademarks of their respective owners. keel has no affiliation with, endorsement from, or sponsorship from any of them. Venue names appear solely to identify what the code talks to.", + "Alpaca, Coinbase and Robinhood are trademarks of their respective owners. keel is not affiliated with, endorsed by, or sponsored by any of them. Venue names appear solely to identify what the code talks to.", keelsh: "Not affiliated with the Kubernetes project also named Keel (keel.sh).", license: @@ -88,7 +88,7 @@ export const ui = { }, notFound: { title: "Page not found", - body: "This page does not exist. The site lives in these editions:", + body: "This page does not exist. The site is published in these editions:", }, },