Files
lefarcen 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.0 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-gradient",
"title": "Gradient",
"title_i18n": {
"zh-CN": "渐变",
"zh-TW": "漸層",
"ja": "グラデーション",
"ko": "그라데이션",
"de": "Verlauf",
"fr": "Dégradé",
"ru": "Градиент",
"es": "Degradado",
"pt-BR": "Gradiente",
"it": "Gradiente",
"vi": "Gradient",
"pl": "Gradient",
"id": "Gradien",
"nl": "Verloop",
"ar": "التدرج",
"tr": "Degrade",
"uk": "Градієнт",
"en": "Gradient"
},
"version": "0.1.0",
"publishedAt": "2026-05-12T07:18:16Z",
"description": "Smooth color transitions and gradient-rich surfaces for modern, playful interfaces with visual depth.",
"description_i18n": {
"zh-CN": "平滑的色彩过渡和丰富的渐变效果,为现代界面增添趣味性和视觉层次。",
"zh-TW": "平滑的色彩過渡和豐富的漸層效果,為現代介面增添趣味性和視覺層次。",
"ja": "なめらかな色の遷移と豊かなグラデーション表現で、モダンで遊び心のある視覚的な奥行きを持つインターフェースを実現。",
"ko": "부드러운 색상 전환과 풍부한 그라데이션으로 시각적 깊이를 더한 현대적이고 활기찬 인터페이스를 구현합니다.",
"de": "Weiche Farbübergänge und verlaufsreiche Oberflächen für moderne, verspielte Interfaces mit visueller Tiefe.",
"fr": "Transitions de couleurs fluides et surfaces riches en dégradés pour des interfaces modernes et ludiques avec de la profondeur visuelle.",
"ru": "Плавные цветовые переходы и насыщенные градиентами поверхности для современных, игривых интерфейсов с визуальной глубиной.",
"es": "Transiciones de color suaves y superficies ricas en degradados para interfaces modernas y divertidas con profundidad visual.",
"pt-BR": "Transições suaves de cores e superfícies ricas em gradientes para interfaces modernas e divertidas com profundidade visual.",
"it": "Transizioni di colore fluide e superfici ricche di sfumature per interfacce moderne e giocose con profondità visiva.",
"vi": "Chuyển đổi màu mượt mà và bề mặt gradient phong phú cho giao diện hiện đại, vui tươi với chiều sâu thị giác.",
"pl": "Płynne przejścia kolorów i bogate w gradienty powierzchnie dla nowoczesnych, żywych interfejsów z głębią wizualną.",
"id": "Transisi warna yang mulus dan permukaan kaya gradien untuk antarmuka modern yang playful dengan kedalaman visual.",
"nl": "Vloeiende kleurovergangen en verlooprijke oppervlakken voor moderne, speelse interfaces met visuele diepte.",
"ar": "انتقالات لونية سلسة وأسطح غنية بالتدرجات لواجهات عصرية ومرحة ذات عمق بصري.",
"tr": "Görsel derinliğe sahip modern ve eğlenceli arayüzler için pürüzsüz renk geçişleri ve degrade açısından zengin yüzeyler.",
"uk": "Плавні колірні переходи та багаті на градієнти поверхні для сучасних, грайливих інтерфейсів із візуальною глибиною.",
"en": "Smooth color transitions and gradient-rich surfaces for modern, playful interfaces with visual depth."
},
"license": "MIT",
"tags": [
"design-system",
"first-party",
"design",
"morphism-effects"
],
"od": {
"kind": "scenario",
"taskKind": "new-generation",
"mode": "design-system",
"scenario": "design",
"surface": "web",
"useCase": {
"query": {
"en": "Generate a {{artifactKind}} using the Gradient 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 Gradient 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": "gradient",
"primary": true
},
"assets": [
"./DESIGN.md"
]
},
"pipeline": {
"stages": [
{
"id": "generate",
"atoms": [
"file-write",
"live-artifact"
]
}
]
},
"capabilities": [
"prompt:inject",
"fs:write"
]
}
}