Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions PUBLIC_CAPABILITY_STATUS.md
Original file line number Diff line number Diff line change
@@ -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.
8 changes: 4 additions & 4 deletions app/DeviceSupportSection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,9 @@ export default function DeviceSupportSection() {
<div className="device-support-head">
<div>
<div className="section-label">Device compatibility <span>03</span></div>
<h2>یک زبان مشترک برای هزاران دستگاه متصل.</h2>
<h2>یک مدل مشترک برای دستگاه‌ها و پروتکل‌های ناهمگون.</h2>
</div>
<p>لایه سازگاری CoreLink داده‌های ناهمگون دستگاه‌ها را به مدل‌های پایدار موقعیت، تله‌متری، رویداد، فرمان و رسانه تبدیل می‌کند. محصول شما با یک قرارداد واحد کار می‌کند، حتی وقتی سخت‌افزار و پروتکل تغییر می‌کند.</p>
<p>هدف لایه سازگاری CoreLink تبدیل داده‌های ناهمگون به مدل‌های نسخه‌دار محصول است. فهرست پایین نمونه‌ای از دسته‌ها و رابط‌های قابل ارزیابی است؛ پشتیبانی هر دستگاه فقط پس از validation همان پروفایل ادعا می‌شود.</p>
</div>

<div className="support-stage">
Expand All @@ -84,8 +84,8 @@ export default function DeviceSupportSection() {
<b>CoreLink</b>
</div>
<div className="support-stats" aria-label="آمار پوشش دستگاه و پروتکل">
<Counter target={250} suffix="+" label="پروتکل و خانواده پروتکلی" />
<Counter target={15000} suffix="+" label="مدل و پیکربندی دستگاه" />
<Counter target={protocols.length} suffix="" label="رابط و پروتکل نمونه در این صفحه" />
<Counter target={deviceGroups.length} suffix="" label="دسته دستگاه نمونه در این صفحه" />
</div>
<div className="signal-ring ring-a" /><div className="signal-ring ring-b" /><div className="signal-ring ring-c" />
</div>
Expand Down
50 changes: 28 additions & 22 deletions app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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",
},
];

Expand Down Expand Up @@ -180,7 +186,7 @@ export default function Home() {
زیرساخت مشترک برای ساخت و مقیاس‌دادن <em>محصولات هوشمند</em>
</h1>
<p>
دستگاه‌ها و پروتکل‌های مختلف را به یک مدل داده و API پایدار متصل
دستگاه‌ها و پروتکل‌های مختلف را به یک مدل داده و API نسخه‌دار متصل
کنید؛ سپس پنل، اپ یا راهکار White-label خود را بدون بازسازی هسته
عرضه کنید.
</p>
Expand All @@ -193,9 +199,9 @@ export default function Home() {
</a>
</div>
<div className="hero-proof" aria-label="خلاصه قابلیت‌های CoreLink">
<span><b>۲۵۰+</b> خانواده پروتکلی</span>
<span><b>۱۵٬۰۰۰+</b> مدل قابل ارزیابی</span>
<span><b>API-first</b> و چندمستاجری</span>
<span><b>1.0.0-draft</b> قرارداد عمومی</span>
<span><b>TS / Python</b> کلاینت prerelease</span>
<span><b>Device + Command</b> محدوده فعلی API</span>
</div>
</div>

Expand Down Expand Up @@ -303,7 +309,7 @@ export default function Home() {
<span className="icon-box">
<Icon name="layers" />
</span>
<small>B2B2C</small>
<small>B2B2C · Planned</small>
</div>
<h3>محصول White-label</h3>
<p>
Expand All @@ -314,7 +320,7 @@ export default function Home() {
<li>برند و تجربه اختصاصی</li>
<li>Tenant مستقل</li>
<li>نقش و دسترسی</li>
<li>SaaS یا استقرار اختصاصی</li>
<li>الگوی استقرار در حال طراحی</li>
</ul>
<div className="card-art label-art">
<i>Brand A</i>
Expand Down Expand Up @@ -378,12 +384,12 @@ export default function Home() {
</div>
<div className="layer core-layer">
<b>CoreLink Capability Layer</b>
<span>Identity</span>
<span>Device Registry</span>
<span>Digital Twin</span>
<span>Telemetry</span>
<span>Commands</span>
<span>Media</span>
<span>Identity · Alpha</span>
<span>Device Registry · Alpha</span>
<span>Digital Twin · Experimental</span>
<span>Telemetry · Experimental</span>
<span>Commands · Alpha</span>
<span>Media · Planned</span>
</div>
<div className="flow">
<ArrowUp aria-hidden="true" size={14} />
Expand Down Expand Up @@ -442,8 +448,8 @@ export default function Home() {
</div>
<p>
مخزن‌های عمومی محل انتشار تدریجی قراردادها، مستندات و ابزارهای
ادغام‌اند. وضعیت واقعی هر مورد، از «در حال تدوین» تا «قابل استفاده»،
در همان مخزن اعلام می‌شود.
ادغام‌اند. وضعیت واقعی هر مورد با واژگان maturity مشترک (Scaffold، Experimental،
Alpha، Beta، Stable، Deprecated و Planned) در همان مخزن و evidence اجرایی سنجیده می‌شود.
</p>
</div>
<div className="repo-grid">
Expand Down
31 changes: 6 additions & 25 deletions tests/rendered-html.test.mjs
Original file line number Diff line number Diff line change
@@ -1,33 +1,14 @@
import assert from "node:assert/strict";
import { readFile } from "node:fs/promises";
import test from "node:test";

const developmentPreviewMeta =
/<meta(?=[^>]*\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, /<html\b(?=[^>]*\blang=["']fa["'])(?=[^>]*\bdir=["']rtl["'])[^>]*>/i);
assert.match(html, /<title>CoreLink Platform \| زیرساخت محصولات متصل<\/title>/i);
assert.match(html, developmentPreviewMeta);
});