diff --git a/PUBLIC_CAPABILITY_STATUS.md b/PUBLIC_CAPABILITY_STATUS.md new file mode 100644 index 0000000..7a3f7bf --- /dev/null +++ b/PUBLIC_CAPABILITY_STATUS.md @@ -0,0 +1,29 @@ +# Public capability claim inventory + +This inventory records the evidence boundary used by website copy. Runtime code +and retained executable evidence outrank README, Issue, Project and marketing +copy when they disagree. + +| Public surface | Current maturity | Evidence boundary | +| --- | --- | --- | +| Public API | Alpha / `1.0.0-draft` | `api-contracts`: reviewed Device + Command slice and canonical event envelope | +| TypeScript SDK | Prerelease Alpha | generated client repository; not a Stable supported release | +| Python SDK | Prerelease Alpha | generated client repository; not a Stable supported release | +| Java SDK | Scaffold / Planned | repository scaffold | +| CLI | Scaffold / Planned | repository scaffold | +| MCP server | Scaffold / Planned | repository scaffold | +| Mock server | Scaffold / Planned | repository scaffold | +| Identity / Device registry / Commands | Alpha | implemented platform foundation; release hardening/evidence still gates Stable | +| Digital twin / Telemetry | Experimental | foundation exists; public product acceptance is incomplete | +| Media | Planned | no supported public v1 media claim | +| White-label experience | Planned | product direction; not a released application boundary | + +Allowed website maturity terms are **Scaffold, Experimental, Alpha, Beta, +Stable, Deprecated, Planned**. + +Device/protocol names shown on the site are evaluation examples. They do not +mean every listed model, firmware or protocol is currently supported. A support +claim requires profile-specific validation evidence. + +Review this inventory whenever runtime/contract/SDK maturity changes and before +a public website release. diff --git a/app/DeviceSupportSection.tsx b/app/DeviceSupportSection.tsx index ac64e2e..836ae4c 100644 --- a/app/DeviceSupportSection.tsx +++ b/app/DeviceSupportSection.tsx @@ -71,9 +71,9 @@ export default function DeviceSupportSection() {
Device compatibility 03
-

یک زبان مشترک برای هزاران دستگاه متصل.

+

یک مدل مشترک برای دستگاه‌ها و پروتکل‌های ناهمگون.

-

لایه سازگاری CoreLink داده‌های ناهمگون دستگاه‌ها را به مدل‌های پایدار موقعیت، تله‌متری، رویداد، فرمان و رسانه تبدیل می‌کند. محصول شما با یک قرارداد واحد کار می‌کند، حتی وقتی سخت‌افزار و پروتکل تغییر می‌کند.

+

هدف لایه سازگاری CoreLink تبدیل داده‌های ناهمگون به مدل‌های نسخه‌دار محصول است. فهرست پایین نمونه‌ای از دسته‌ها و رابط‌های قابل ارزیابی است؛ پشتیبانی هر دستگاه فقط پس از validation همان پروفایل ادعا می‌شود.

@@ -84,8 +84,8 @@ export default function DeviceSupportSection() { CoreLink
- - + +
diff --git a/app/page.tsx b/app/page.tsx index 82769f9..1d5da94 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -21,38 +21,44 @@ const repos = [ { name: "API Contracts", repo: "api-contracts", - desc: "فضای انتشار OpenAPI، AsyncAPI، Schema و مجموعه‌های Postman", - status: "در حال تدوین", + desc: "قرارداد عمومی Device و Command و envelope رویداد", + status: "Alpha · 1.0.0-draft", + }, + { + name: "TypeScript SDK", + repo: "sdk-typescript", + desc: "کلاینت تولیدشده از قرارداد عمومی v1؛ هنوز انتشار پایدار نیست", + status: "Prerelease Alpha", }, { name: "Python SDK", repo: "sdk-python", - desc: "SDK برنامه‌ریزی‌شده برای سرویس‌ها و اتوماسیون Python", - status: "برنامه‌ریزی‌شده", + desc: "کلاینت تولیدشده از قرارداد عمومی v1؛ هنوز انتشار پایدار نیست", + status: "Prerelease Alpha", }, { name: "Java SDK", repo: "sdk-java", desc: "SDK برنامه‌ریزی‌شده برای Java و سامانه‌های سازمانی", - status: "برنامه‌ریزی‌شده", + status: "Scaffold · Planned", }, { name: "CoreLink CLI", repo: "cli", desc: "ابزار خط فرمان برنامه‌ریزی‌شده برای توسعه و عملیات", - status: "برنامه‌ریزی‌شده", + status: "Scaffold · Planned", }, { name: "MCP Server", repo: "mcp-server", desc: "مسیر پیشنهادی اتصال عامل‌های هوشمند به قابلیت‌های CoreLink", - status: "برنامه‌ریزی‌شده", + status: "Scaffold · Planned", }, { name: "Mock Server", repo: "mock-server", desc: "شبیه‌ساز برنامه‌ریزی‌شده برای توسعه و تست مستقل", - status: "برنامه‌ریزی‌شده", + status: "Scaffold · Planned", }, ]; @@ -180,7 +186,7 @@ export default function Home() { زیرساخت مشترک برای ساخت و مقیاس‌دادن محصولات هوشمند

- دستگاه‌ها و پروتکل‌های مختلف را به یک مدل داده و API پایدار متصل + دستگاه‌ها و پروتکل‌های مختلف را به یک مدل داده و API نسخه‌دار متصل کنید؛ سپس پنل، اپ یا راهکار White-label خود را بدون بازسازی هسته عرضه کنید.

@@ -193,9 +199,9 @@ export default function Home() {
- ۲۵۰+ خانواده پروتکلی - ۱۵٬۰۰۰+ مدل قابل ارزیابی - API-first و چندمستاجری + 1.0.0-draft قرارداد عمومی + TS / Python کلاینت prerelease + Device + Command محدوده فعلی API
@@ -303,7 +309,7 @@ export default function Home() { - B2B2C + B2B2C · Planned

محصول White-label

@@ -314,7 +320,7 @@ export default function Home() {

  • برند و تجربه اختصاصی
  • Tenant مستقل
  • نقش و دسترسی
  • -
  • SaaS یا استقرار اختصاصی
  • +
  • الگوی استقرار در حال طراحی
  • Brand A @@ -378,12 +384,12 @@ export default function Home() {
    CoreLink Capability Layer - Identity - Device Registry - Digital Twin - Telemetry - Commands - Media + Identity · Alpha + Device Registry · Alpha + Digital Twin · Experimental + Telemetry · Experimental + Commands · Alpha + Media · Planned

    مخزن‌های عمومی محل انتشار تدریجی قراردادها، مستندات و ابزارهای - ادغام‌اند. وضعیت واقعی هر مورد، از «در حال تدوین» تا «قابل استفاده»، - در همان مخزن اعلام می‌شود. + ادغام‌اند. وضعیت واقعی هر مورد با واژگان maturity مشترک (Scaffold، Experimental، + Alpha، Beta، Stable، Deprecated و Planned) در همان مخزن و evidence اجرایی سنجیده می‌شود.

    diff --git a/tests/rendered-html.test.mjs b/tests/rendered-html.test.mjs index 5392f9f..9010442 100644 --- a/tests/rendered-html.test.mjs +++ b/tests/rendered-html.test.mjs @@ -1,33 +1,14 @@ import assert from "node:assert/strict"; +import { readFile } from "node:fs/promises"; import test from "node:test"; const developmentPreviewMeta = /]*\bname=["']codex-preview["'])(?=[^>]*\bcontent=["']development["'])[^>]*>/i; -test("renders development preview metadata", async () => { - const workerUrl = new URL("../dist/server/index.js", import.meta.url); - workerUrl.searchParams.set("test", `${process.pid}-${Date.now()}`); - const { default: worker } = await import(workerUrl.href); +test("renders production static HTML metadata", async () => { + const html = await readFile(new URL("../out/index.html", import.meta.url), "utf8"); - const response = await worker.fetch( - new Request("http://localhost/", { - headers: { accept: "text/html" }, - }), - { - ASSETS: { - fetch: async () => new Response("Not found", { status: 404 }), - }, - }, - { - waitUntil() {}, - passThroughOnException() {}, - }, - ); - - assert.equal(response.status, 200); - assert.match( - response.headers.get("content-type") ?? "", - /^text\/html\b/i, - ); - assert.match(await response.text(), developmentPreviewMeta); + assert.match(html, /]*\blang=["']fa["'])(?=[^>]*\bdir=["']rtl["'])[^>]*>/i); + assert.match(html, /CoreLink Platform \| زیرساخت محصولات متصل<\/title>/i); + assert.match(html, developmentPreviewMeta); });