Skip to content

Claude/marketplace extension install vote 4oi69c#265

Open
khuepm wants to merge 7 commits into
mainfrom
claude/marketplace-extension-install-vote-4oi69c
Open

Claude/marketplace extension install vote 4oi69c#265
khuepm wants to merge 7 commits into
mainfrom
claude/marketplace-extension-install-vote-4oi69c

Conversation

@khuepm

@khuepm khuepm commented Jul 12, 2026

Copy link
Copy Markdown
Owner

Summary

Loại thay đổi

  • feat — Tính năng mới
  • fix — Sửa bug
  • refactor — Cải thiện code, không thay đổi hành vi
  • chore — Công việc bảo trì (deps, CI, config)
  • docs — Cập nhật tài liệu
  • perf — Cải thiện hiệu năng
  • test — Thêm / sửa test
  • security — Vá lỗ hổng bảo mật

Phase / Feature liên quan


✅ Definition of Done (DoD)

Tất cả mục bên dưới phải được tích ✅ trước khi merge.

Code Quality

  • Không có TypeScript error (pnpm typecheck pass ✅)
  • Tất cả tests pass (pnpm test — 0 failures)
  • Không có lint error (pnpm lint / ESLint clean)
  • Self-review: đọc lại diff line-by-line trước khi request review

Architecture & Docs

  • Cập nhật architecture.md nếu có thay đổi cấu trúc hệ thống
  • Cập nhật apps/cms/openapi.yaml cho mọi endpoint mới / thay đổi
  • Cập nhật packages/sdk types tương ứng với API changes
  • Cập nhật docs trong docs/en/features/ nếu thay đổi ảnh hưởng người dùng

Testing

  • Viết unit test cho logic mới
  • Viết integration test cho các endpoint / service
  • Với logic phức tạp / boundary conditions: có property-based test (fast-check)
  • Test thủ công trên Docker runtime (docker compose up)

Runtime Compatibility

  • Route / service hoạt động trên Cloudflare Workers runtime
  • Route / service hoạt động trên Node.js / Docker runtime
  • Nếu dùng API chỉ có trên một runtime: đã gate bằng feature flag và ghi chú trong docs/en/features/runtime-abstraction.md

Security

  • Không có secret / credential hardcoded trong code
  • Input validation: tất cả payload đầu vào được validate (Zod / schema)
  • Multi-tenant isolation: query có WHERE siteId = ? (không leak data cross-tenant)
  • Với SCIM / OAuth: token không được log hoặc lưu plaintext

Database / Migrations

  • Migration file có trong packages/database/drizzle/ nếu có schema change
  • Migration có thể chạy lại nhiều lần (idempotent) hoặc có guard IF NOT EXISTS
  • Rollback plan được ghi chú trong PR description nếu migration phức tạp

Conventional Commits

  • Commit messages theo format type(scope): description
    • feat(cms): add SCIM token rotation
    • fix(studio): correct flow editor drag offset
    • docs: update AI copilot feature guide

Screenshots / Recordings

Rollback Plan

Notes for Reviewers

khuepm and others added 7 commits July 7, 2026 12:16
… community submit

Extend the marketplace beyond publish/install:

- Trusted source: catalog now exposes a `verified` flag (signature +
  registered publisher key + integrity hash) driving a "Verified" badge;
  install still re-verifies cryptographically.
- Download: GET /extensions/:slug/download bumps download_count and 302s to
  the signed bundle (?redirect=0 returns metadata JSON).
- Voting: POST/DELETE /extensions/:slug/vote — idempotent upvotes backed by a
  unique (userId, marketplaceSlug) index; catalog carries voteCount/hasVoted.
- Community submit: POST /submit creates a global, unpublished `pending`
  listing; GET /submissions + POST /submissions/:id/review moderate it
  (extensions:configure).

Schema: new extension_votes table + extensions.download_count /
submission_status / submitted_by (migration 0043).

Studio marketplace page and the public marketplace app get verified badges,
vote controls, download buttons and a submit dialog.

Also adds scripts/marketplace-submodule-migration.sh + docs to extract
apps/marketplace into the lumibase-ai/marketplace submodule (run separately —
this scope has no push access to that repo).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UTMH25d9LHWBjF2z3Ys9Ha
…ript

The target repo usually has an initial README/license commit on main, so the
extracted subtree history is a non-fast-forward and the push is rejected.

- Recreate the marketplace-export branch each run (resumable after a failed push).
- Add FORCE=1 → push with --force-with-lease to replace scaffolding.
- On rejection, print reconciliation guidance and exit before touching the
  monorepo. Document both paths.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UTMH25d9LHWBjF2z3Ys9Ha
--force-with-lease needs a remote-tracking ref; an ad-hoc URL push has none, so
it always rejects with "stale info". The target main is throwaway scaffold, so
plain --force is the correct and safe choice here.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UTMH25d9LHWBjF2z3Ys9Ha
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant