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

131 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": "od-plugin-publish-github",
"title": "Publish Plugin to GitHub",
"title_i18n": {
"zh-CN": "发布插件到 GitHub",
"zh-TW": "發佈外掛程式到 GitHub",
"ja": "GitHub にプラグインを公開",
"ko": "GitHub에 플러그인 게시",
"de": "Plugin auf GitHub veröffentlichen",
"fr": "Publier le plugin sur GitHub",
"ru": "Опубликовать плагин на GitHub",
"es": "Publicar plugin en GitHub",
"pt-BR": "Publicar plugin no GitHub",
"it": "Pubblica plugin su GitHub",
"vi": "Xuất bản plugin lên GitHub",
"pl": "Opublikuj wtyczkę na GitHub",
"id": "Publikasikan Plugin ke GitHub",
"nl": "Plugin publiceren naar GitHub",
"ar": "نشر الإضافة على GitHub",
"tr": "Eklentiyi GitHub'a Yayınla",
"uk": "Опублікувати плагін на GitHub",
"en": "Publish Plugin to GitHub"
},
"version": "0.1.0",
"publishedAt": "2026-05-12T23:01:12Z",
"description": "Creates a public GitHub repository for a local Open Design plugin using the GitHub CLI.",
"description_i18n": {
"zh-CN": "使用 GitHub CLI 为本地 Open Design 插件创建公共 GitHub 仓库。",
"zh-TW": "使用 GitHub CLI 為本機 Open Design 外掛程式建立公開 GitHub 儲存庫。",
"ja": "GitHub CLI を使用してローカルの Open Design プラグイン用のパブリック GitHub リポジトリを作成します。",
"ko": "GitHub CLI를 사용하여 로컬 Open Design 플러그인용 공개 GitHub 리포지토리를 생성합니다.",
"de": "Erstellt ein öffentliches GitHub-Repository für ein lokales Open Design Plugin mit der GitHub CLI.",
"fr": "Crée un dépôt GitHub public pour un plugin Open Design local à l'aide de la GitHub CLI.",
"ru": "Создаёт публичный репозиторий GitHub для локального плагина Open Design с помощью GitHub CLI.",
"es": "Crea un repositorio público de GitHub para un plugin local de Open Design usando GitHub CLI.",
"pt-BR": "Cria um repositório público no GitHub para um plugin local do Open Design usando a GitHub CLI.",
"it": "Crea un repository GitHub pubblico per un plugin Open Design locale utilizzando la GitHub CLI.",
"vi": "Tạo kho lưu trữ GitHub công khai cho plugin Open Design cục bộ bằng GitHub CLI.",
"pl": "Tworzy publiczne repozytorium GitHub dla lokalnej wtyczki Open Design za pomocą GitHub CLI.",
"id": "Membuat repositori GitHub publik untuk plugin Open Design lokal menggunakan GitHub CLI.",
"nl": "Creëert een openbare GitHub-repository voor een lokale Open Design plugin met behulp van de GitHub CLI.",
"ar": "ينشئ مستودع GitHub عام لإضافة Open Design محلية باستخدام GitHub CLI.",
"tr": "GitHub CLI kullanarak yerel bir Open Design eklentisi için herkese açık GitHub deposu oluşturur.",
"uk": "Створює публічний репозиторій GitHub для локального плагіна Open Design за допомогою GitHub CLI.",
"en": "Creates a public GitHub repository for a local Open Design plugin using the GitHub CLI."
},
"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/od-plugin-publish-github",
"tags": [
"share",
"publish",
"github",
"github-repo",
"open-source",
"plugin-authoring",
"community-plugin",
"first-party"
],
"compat": {
"agentSkills": [
{
"path": "./SKILL.md"
}
]
},
"od": {
"kind": "scenario",
"taskKind": "new-generation",
"mode": "utility",
"platform": "desktop",
"scenario": "plugin-sharing",
"surface": "github",
"useCase": {
"query": {
"en": "Publish the staged Open Design plugin to a new public GitHub repository with gh CLI.",
"zh-CN": "使用 gh CLI 把已暂存的 Open Design 插件发布成一个新的公开 GitHub 仓库。"
}
},
"inputs": [
{
"name": "source_plugin_id",
"label": "Source plugin id",
"type": "string",
"required": true
},
{
"name": "source_plugin_title",
"label": "Source plugin title",
"type": "string",
"required": true
},
{
"name": "source_plugin_version",
"label": "Source plugin version",
"type": "string"
},
{
"name": "plugin_context_path",
"label": "Copied plugin folder",
"type": "string",
"required": true
},
{
"name": "source_plugin_path",
"label": "Original plugin folder",
"type": "string"
}
],
"context": {
"skills": [
{
"path": "./SKILL.md"
}
]
},
"capabilities": [
"fs:read",
"fs:write",
"bash",
"subprocess",
"network"
]
}
}