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
@@ -442,8 +448,8 @@ export default function Home() {
مخزنهای عمومی محل انتشار تدریجی قراردادها، مستندات و ابزارهای
- ادغاماند. وضعیت واقعی هر مورد، از «در حال تدوین» تا «قابل استفاده»،
- در همان مخزن اعلام میشود.
+ ادغاماند. وضعیت واقعی هر مورد با واژگان 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);
});