Files
lefarcenandGitHub da7c4ae051 fix(web): rank Community "Newest" by shipped publishedAt, not local install timestamps (#5597)
* 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)
2026-07-14 08:43:57 +00:00

114 lines
5.2 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"$schema": "https://open-design.ai/schemas/plugin.v1.json",
"specVersion": "1.0.0",
"name": "design-system-levels",
"title": "Levels",
"title_i18n": {
"zh-CN": "Levels",
"zh-TW": "Levels",
"ja": "Levels",
"ko": "Levels",
"de": "Levels",
"fr": "Levels",
"ru": "Levels",
"es": "Levels",
"pt-BR": "Levels",
"it": "Levels",
"vi": "Levels",
"pl": "Levels",
"id": "Levels",
"nl": "Levels",
"ar": "Levels",
"tr": "Levels",
"uk": "Levels",
"en": "Levels"
},
"version": "0.1.0",
"publishedAt": "2026-05-12T07:18:16Z",
"description": "Conversion-focused design that removes friction and guides users toward action through clarity, trust, and speed.",
"description_i18n": {
"zh-CN": "以转化为核心的设计,通过清晰度、信任感和速度消除摩擦,引导用户采取行动。",
"zh-TW": "以轉換為核心的設計,透過清晰度、信任感和速度消除摩擦,引導使用者採取行動。",
"ja": "明確性、信頼性、スピードを通じて摩擦を取り除き、ユーザーをアクションへ導くコンバージョン重視のデザイン。",
"ko": "명확성, 신뢰성, 속도를 통해 마찰을 제거하고 사용자를 행동으로 유도하는 전환 중심 디자인.",
"de": "Conversion-fokussiertes Design, das Reibung beseitigt und Nutzer durch Klarheit, Vertrauen und Geschwindigkeit zur Aktion führt.",
"fr": "Design axé sur la conversion qui élimine les frictions et guide les utilisateurs vers l'action grâce à la clarté, la confiance et la rapidité.",
"ru": "Дизайн, ориентированный на конверсию, который устраняет трения и направляет пользователей к действию через ясность, доверие и скорость.",
"es": "Diseño centrado en la conversión que elimina fricciones y guía a los usuarios hacia la acción mediante claridad, confianza y velocidad.",
"pt-BR": "Design focado em conversão que remove atritos e guia usuários para a ação através de clareza, confiança e velocidade.",
"it": "Design orientato alla conversione che elimina gli attriti e guida gli utenti verso l'azione attraverso chiarezza, fiducia e velocità.",
"vi": "Thiết kế tập trung vào chuyển đổi, loại bỏ ma sát và hướng dẫn người dùng đến hành động thông qua sự rõ ràng, tin cậy và tốc độ.",
"pl": "Projektowanie skoncentrowane na konwersji, które usuwa tarcia i prowadzi użytkowników do działania poprzez przejrzystość, zaufanie i szybkość.",
"id": "Desain yang berfokus pada konversi yang menghilangkan hambatan dan memandu pengguna menuju tindakan melalui kejelasan, kepercayaan, dan kecepatan.",
"nl": "Conversiegericht ontwerp dat wrijving vermindert en gebruikers naar actie leidt door duidelijkheid, vertrouwen en snelheid.",
"ar": "تصميم يركز على التحويل يزيل الاحتكاك ويوجه المستخدمين نحو الإجراء من خلال الوضوح والثقة والسرعة.",
"tr": "Netlik, güven ve hız yoluyla sürtünmeyi ortadan kaldıran ve kullanıcıları eyleme yönlendiren dönüşüm odaklı tasarım.",
"uk": "Дизайн, орієнтований на конверсію, який усуває тертя та спрямовує користувачів до дії через ясність, довіру та швидкість.",
"en": "Conversion-focused design that removes friction and guides users toward action through clarity, trust, and speed."
},
"license": "MIT",
"tags": [
"design-system",
"first-party",
"design",
"layout-structure"
],
"od": {
"kind": "scenario",
"taskKind": "new-generation",
"mode": "design-system",
"scenario": "design",
"surface": "web",
"useCase": {
"query": {
"en": "Generate a {{artifactKind}} using the Levels design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.",
"zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Levels design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md."
}
},
"inputs": [
{
"name": "artifactKind",
"label": "Artifact kind",
"type": "select",
"options": [
"landing page",
"dashboard",
"marketing site",
"app screen"
],
"default": "landing page"
},
{
"name": "brief",
"label": "Brief",
"type": "text",
"placeholder": "What should the page communicate?"
}
],
"context": {
"designSystem": {
"ref": "levels",
"primary": true
},
"assets": [
"./DESIGN.md"
]
},
"pipeline": {
"stages": [
{
"id": "generate",
"atoms": [
"file-write",
"live-artifact"
]
}
]
},
"capabilities": [
"prompt:inject",
"fs:write"
]
}
}