mirror of
https://github.com/nexu-io/open-design.git
synced 2026-09-20 06:15:06 +08:00
da7c4ae051
* fix(web): rank Community "Newest" by shipped publishedAt, not local install timestamps
The Community gallery Newest toggle sorted by the installed-record
updatedAt/installedAt. Those are stamped when a machine seeds its own
database, so a fresh install (or an upgrade that re-stamps the catalog)
writes the whole bundled catalog milliseconds apart in folder-walk
order — Newest showed reverse walk order (roughly reverse-alphabetical),
unrelated to publication recency.
Root-cause fix: bundled templates now ship a real publication date.
- packages/contracts: add optional manifest field publishedAt (ISO 8601).
- apps/web sortByNewest: freshness = publishedAt when parseable, else
updatedAt (right signal for user-installed plugins); tie-breaks and
stability unchanged.
- plugins/_official: backfill publishedAt into all 460 bundled manifests
from each folder's first-appearance commit date in upstream git
history.
- e2e: repository-resource guard requiring every bundled manifest to
declare a parseable publishedAt, so the signal cannot silently erode.
- docs: field reference entries in plugins-spec (en + zh-CN).
Issue: https://plane.powerformer.net/open-design/projects/49832a02-3158-4faf-bf2f-d0e39c40c7e6/issues/ca0778af-97f5-4fc0-bc63-739280904979
Generated-By: looper 0.0.0-dev (runner=worker, agent=claude-code)
* worker: 模板用最新筛选,筛选出来的不是最新的
Generated-By: looper 0.0.0-dev (runner=worker, agent=claude-code)
* fix(web): keep shipped appeal order inside same-publishedAt batches
Review follow-up (#5597, nettee): after the freshness tie on an equal
publishedAt, the comparator still consulted local updatedAt/installedAt,
which a fresh install stamps in folder-walk order — so every
same-publication batch (largest: 322 manifests on one catalog date)
re-sorted per machine instead of keeping the shipped visual-appeal
ranking. Same-publishedAt records now preserve their incoming position;
local timestamps break ties only when at least one side has no usable
publishedAt. Adds the requested regression spec pinning
same-publishedAt / different-updatedAt records.
Generated-By: looper 0.0.0-dev (runner=worker, agent=claude-code)
* fix(web): gate publishedAt freshness to bundled records; untrack oversized looper attachment
Review follow-up (#5597, nettee round 2): publishedAt was overriding
updatedAt for every visible plugin, so a user-installed github/local/
marketplace plugin carrying an old manifest publishedAt would be buried
behind bundled templates despite a newer local install. publishedAtMs
now returns null for non-bundled records — "Newest" means install
recency for user installs, catalog publication for bundled ones. Adds
the requested regression (non-bundled, old publishedAt, newer
updatedAt) and clarifies the field docs (en + zh-CN).
CI repair: commit 578f7a9 tracked .looper-attachments/bug13_1.png
(3.8MB bug screenshot), tripping the Static gate 1MiB blob guard and
the Validate workspace aggregate. Untrack it and gitignore
.looper-attachments/ so harness attachments stay out of the repo.
Generated-By: looper 0.0.0-dev (runner=worker, agent=claude-code)
135 lines
7.0 KiB
JSON
135 lines
7.0 KiB
JSON
{
|
||
"$schema": "https://open-design.ai/schemas/plugin.v1.json",
|
||
"specVersion": "1.0.0",
|
||
"name": "example-docs-page",
|
||
"title": "Docs Page",
|
||
"title_i18n": {
|
||
"zh-CN": "文档页面",
|
||
"zh-TW": "文件頁面",
|
||
"ja": "ドキュメントページ",
|
||
"ko": "문서 페이지",
|
||
"de": "Dokumentationsseite",
|
||
"fr": "Page de documentation",
|
||
"ru": "Страница документации",
|
||
"es": "Página de documentación",
|
||
"pt-BR": "Página de documentação",
|
||
"it": "Pagina di documentazione",
|
||
"vi": "Trang tài liệu",
|
||
"pl": "Strona dokumentacji",
|
||
"id": "Halaman Dokumentasi",
|
||
"nl": "Documentatiepagina",
|
||
"ar": "صفحة التوثيق",
|
||
"tr": "Dokümantasyon Sayfası",
|
||
"uk": "Сторінка документації",
|
||
"en": "Docs Page"
|
||
},
|
||
"version": "0.1.0",
|
||
"publishedAt": "2026-05-12T07:18:16Z",
|
||
"description": "A documentation page — inline-start nav, scrollable article body, inline-end table of contents. Use when the brief mentions \"docs\", \"documentation\", \"guide\", \"API reference\", or \"tutorial\".",
|
||
"description_i18n": {
|
||
"zh-CN": "文档页面 — 侧边导航、可滚动正文和目录。当需求提到'文档'、'指南'、'API 参考'或'教程'时使用。",
|
||
"zh-TW": "文件頁面 — 側邊導覽、可捲動內文和目錄。當需求提到'文件'、'指南'、'API 參考'或'教學'時使用。",
|
||
"ja": "ドキュメントページ — サイドナビゲーション、スクロール可能な本文、目次を含むレイアウト。'ドキュメント'、'ガイド'、'API リファレンス'、'チュートリアル'が指定された際に使用します。",
|
||
"ko": "문서 페이지 — 사이드 탐색, 스크롤 가능한 본문, 목차로 구성됩니다. '문서', '가이드', 'API 참조' 또는 '튜토리얼'이 언급될 때 사용하세요.",
|
||
"de": "Eine Dokumentationsseite mit seitlicher Navigation, scrollbarem Artikelbereich und Inhaltsverzeichnis. Verwenden Sie sie bei Erwähnung von 'Dokumentation', 'Anleitung', 'API-Referenz' oder 'Tutorial'.",
|
||
"fr": "Une page de documentation avec navigation latérale, contenu déroulant et table des matières. À utiliser lorsque le brief mentionne 'documentation', 'guide', 'référence API' ou 'tutoriel'.",
|
||
"ru": "Страница документации с боковой навигацией, прокручиваемым содержимым и оглавлением. Используйте при упоминании 'документация', 'руководство', 'справочник API' или 'учебник'.",
|
||
"es": "Una página de documentación con navegación lateral, cuerpo de artículo desplazable y tabla de contenidos. Úsela cuando se mencione 'documentación', 'guía', 'referencia API' o 'tutorial'.",
|
||
"pt-BR": "Uma página de documentação com navegação lateral, corpo de artigo rolável e sumário. Use quando o briefing mencionar 'documentação', 'guia', 'referência de API' ou 'tutorial'.",
|
||
"it": "Una pagina di documentazione con navigazione laterale, corpo dell'articolo scorrevole e indice dei contenuti. Da usare quando il brief menziona 'documentazione', 'guida', 'riferimento API' o 'tutorial'.",
|
||
"vi": "Trang tài liệu với thanh điều hướng bên, nội dung cuộn được và mục lục. Sử dụng khi yêu cầu đề cập 'tài liệu', 'hướng dẫn', 'tham chiếu API' hoặc 'hướng dẫn chi tiết'.",
|
||
"pl": "Strona dokumentacji z boczną nawigacją, przewijaną treścią artykułu i spisem treści. Używaj, gdy brief wspomina o 'dokumentacji', 'przewodniku', 'referencji API' lub 'tutorialu'.",
|
||
"id": "Halaman dokumentasi dengan navigasi samping, isi artikel yang dapat digulir, dan daftar isi. Gunakan saat brief menyebutkan 'dokumentasi', 'panduan', 'referensi API', atau 'tutorial'.",
|
||
"nl": "Een documentatiepagina met zijnavigatie, scrollbare artikelinhoud en inhoudsopgave. Gebruik bij vermelding van 'documentatie', 'handleiding', 'API-referentie' of 'tutorial'.",
|
||
"ar": "صفحة توثيق تحتوي على شريط تنقل جانبي، محتوى قابل للتمرير وجدول محتويات. استخدمها عندما يذكر الملخص 'توثيق' أو 'دليل' أو 'مرجع API' أو 'برنامج تعليمي'.",
|
||
"tr": "Yan gezinme, kaydırılabilir makale içeriği ve içindekiler tablosu içeren dokümantasyon sayfası. Brief'te 'dokümantasyon', 'kılavuz', 'API referansı' veya 'öğretici' geçtiğinde kullanın.",
|
||
"uk": "Сторінка документації з бічною навігацією, прокручуваним вмістом статті та змістом. Використовуйте, коли бриф згадує 'документація', 'посібник', 'довідник API' або 'підручник'.",
|
||
"en": "A documentation page — inline-start nav, scrollable article body, inline-end table of contents. Use when the brief mentions \"docs\", \"documentation\", \"guide\", \"API reference\", or \"tutorial\"."
|
||
},
|
||
"license": "MIT",
|
||
"author": {
|
||
"name": "Open Design",
|
||
"url": "https://github.com/nexu-io"
|
||
},
|
||
"homepage": "https://github.com/nexu-io/open-design/tree/main/plugins/_official/examples/docs-page",
|
||
"tags": [
|
||
"example",
|
||
"first-party",
|
||
"prototype",
|
||
"engineering",
|
||
"web",
|
||
"desktop",
|
||
"docs",
|
||
"documentation",
|
||
"guide",
|
||
"tutorial",
|
||
"api-reference",
|
||
"untitled"
|
||
],
|
||
"compat": {
|
||
"agentSkills": [
|
||
{
|
||
"path": "./SKILL.md"
|
||
}
|
||
]
|
||
},
|
||
"od": {
|
||
"kind": "scenario",
|
||
"taskKind": "new-generation",
|
||
"mode": "prototype",
|
||
"platform": "desktop",
|
||
"scenario": "engineering",
|
||
"surface": "web",
|
||
"preview": {
|
||
"type": "html",
|
||
"entry": "./example.html"
|
||
},
|
||
"useCase": {
|
||
"query": {
|
||
"en": "A documentation page — inline-start nav, scrollable article body, inline-end table of contents. Use when the brief mentions \"docs\", \"documentation\", \"guide\", \"API reference\", or \"tutorial\".",
|
||
"zh-CN": "使用这个插件完成以下任务:A documentation page — inline-start nav, scrollable article body, inline-end table of contents. Use when the brief mentions \"docs\", \"documentation\", \"guide\", \"API reference\", or \"tutorial\"."
|
||
},
|
||
"exampleOutputs": [
|
||
{
|
||
"path": "./example.html",
|
||
"title": "Docs Page"
|
||
}
|
||
]
|
||
},
|
||
"context": {
|
||
"skills": [
|
||
{
|
||
"path": "./SKILL.md"
|
||
}
|
||
],
|
||
"designSystem": {
|
||
"primary": true
|
||
},
|
||
"craft": [
|
||
"typography",
|
||
"typography-hierarchy",
|
||
"typography-hierarchy-editorial",
|
||
"rtl-and-bidi"
|
||
],
|
||
"assets": [
|
||
"./example.html"
|
||
]
|
||
},
|
||
"pipeline": {
|
||
"stages": [
|
||
{
|
||
"id": "generate",
|
||
"atoms": [
|
||
"file-write",
|
||
"live-artifact"
|
||
]
|
||
}
|
||
]
|
||
},
|
||
"capabilities": [
|
||
"prompt:inject",
|
||
"fs:write"
|
||
]
|
||
}
|
||
}
|