yun-zhi-ztl
a6cf862e8e
merge(main): sync latest origin/main into feature/project-review
...
Resolved 9 conflicts according to documented strategy:
- .gitignore: kept both entries (docs/review/ + CLAUDE.md)
- ClawHubCompatController.java: manual merge (use @AuthenticationPrincipal + platformRoles)
- ClawHubCompatControllerTest.java: kept ours (HEAD security tests)
- CliControllerTest.java: kept ours (HEAD platform roles tests)
- ReviewPermissionChecker.java: kept ours (stricter permission model)
- SkillPublishService.java: kept theirs (main SUPER_ADMIN bypass + events)
- SkillPublishServiceTest.java: kept theirs (main complete test suite)
- router.tsx: manual merge (HEAD's createLazyRouteComponent + main's privacy/terms)
- markdown-renderer.tsx: kept ours (HEAD frontmatter stripping + styles)
All A1-A9 security fixes preserved. No new logic introduced.
2026-03-14 17:50:38 +08:00
wowo-zZ
d631b0e20a
fix(ops): resolve storage permission and audit log JSONB type issues
...
Fixes two critical issues when deploying with runtime.sh:
1. Storage Permission Error
- Problem: AccessDeniedException when publishing skills
- Root cause: /var/lib/skillhub/storage owned by root, but app runs as 'app' user
- Solution: Pre-create storage directory with correct permissions in Dockerfile
2. Audit Log JSONB Type Error
- Problem: PostgreSQL JSONB type mismatch when recording audit logs
- Root cause: Missing type mapping annotation in AuditLog entity
- Solution: Add @JdbcTypeCode(SqlTypes.JSON) annotation and V7 migration
Changes:
- server/Dockerfile: Add storage directory creation and permission setup
- server/skillhub-domain/.../AuditLog.java: Add @JdbcTypeCode annotation
- server/skillhub-app/.../V7__fix_audit_log_jsonb_type.sql: Migration for existing data
Impact:
- New deployments: Issues resolved automatically
- Existing deployments: Flyway auto-applies V7 migration on upgrade
2026-03-14 11:23:19 +08:00
vsxd
14d86c290a
chore(release): v0.1.0-beta.7
2026-03-13 16:05:08 +08:00
vsxd
3682a4646b
Auto-publish skills submitted by super admins
2026-03-13 15:36:56 +08:00
vsxd
d82665baba
feat(review): allow admins to review their own submissions
2026-03-13 14:23:20 +08:00
yun-zhi-ztl
447a34a1d1
merge(main): sync latest origin/main into feature/project-review
2026-03-13 12:49:12 +08:00
vsxd
a85a9c3177
fix(publish): 放宽技能包上传校验
...
- application.yml 补齐缺失的文件扩展名白名单(.js,.ts,.png,.jpg,.svg)
- version 为空时自动生成时间戳版本号,不再强制报错
2026-03-13 12:47:34 +08:00
vsxd
84dd08503d
merge: bring feature/project-init into main for beta3
...
# Conflicts:
# scripts/smoke-test.sh
2026-03-13 11:45:56 +08:00
vsxd
6a9e0845d4
Complete phase 3 and 4 backend workflows
2026-03-13 11:36:34 +08:00
vsxd
5bb2eb0d98
fix(auth): grant global membership to new users
2026-03-13 11:29:01 +08:00
vsxd
0ca38e73ba
merge: bring phase4 worktree implementation into feature/project-init
...
# Conflicts:
# server/skillhub-app/src/main/java/com/iflytek/skillhub/controller/cli/CliPublishController.java
# server/skillhub-app/src/main/java/com/iflytek/skillhub/controller/portal/SkillPublishController.java
# server/skillhub-storage/src/main/java/com/iflytek/skillhub/storage/LocalFileStorageService.java
# web/src/app/router.tsx
2026-03-13 10:35:42 +08:00
yun-zhi-ztl
ddbf92435f
fix(upload): harden package extraction and storage boundaries
...
- add shared package safety policy for path normalization and size limits
- stream zip extraction for cli check and publish flows to reject traversal and oversized entries
- confine local storage keys to the configured base path and add regression coverage
2026-03-13 10:20:34 +08:00
vsxd
07ea0fa822
merge: bring phase4 worktree implementation into main
...
# Conflicts:
# server/skillhub-app/src/main/java/com/iflytek/skillhub/controller/cli/CliPublishController.java
# server/skillhub-app/src/main/java/com/iflytek/skillhub/controller/portal/SkillPublishController.java
# server/skillhub-storage/src/main/java/com/iflytek/skillhub/storage/LocalFileStorageService.java
# web/src/app/router.tsx
2026-03-13 10:20:19 +08:00
vsxd
33c44fb9cc
feat(phase4): complete auth, governance, observability, and ops polish
2026-03-13 10:17:48 +08:00
vsxd
62d9d88546
chore(release): cut v0.1.0-beta.2
2026-03-13 10:13:50 +08:00
vsxd
d4deb2fb74
fix: address review-reported auth and publish issues
2026-03-13 10:06:25 +08:00
vsxd
f7798dddc5
Revert "merge: bring review fixes into feature/project-init"
...
This reverts commit 92f63f8b89 , reversing
changes made to 78e16f0fe7 .
2026-03-13 10:06:14 +08:00
yun-zhi-ztl
7bc152a744
fix(publish): keep latest pointer aligned with published versions
...
- stop publish submission from advancing skill.latestVersionId or overwriting published-facing skill metadata while a version is still pending review\n- move latest pointer and display metadata promotion into review approval so the public skill record changes only when a version becomes PUBLISHED\n- keep SkillPublishedEvent emission on review approval only, preserving search rebuild semantics for published versions\n- add regression coverage for pending review submissions retaining published metadata and for approval promoting latest pointer plus display fields
2026-03-13 10:01:01 +08:00
vsxd
5bb887b292
fix: address review-reported auth and publish issues
2026-03-12 22:29:51 +08:00
tlzhu3
f99ffbd7ec
fix(review): tighten review and promotion access boundaries
...
- derive review namespace from skill ownership instead of trusting request input\n- require namespace membership for review submission and owner or namespace admin rights for promotion submission\n- forbid unauthorized pending-list and detail reads in review and promotion portal endpoints\n- add domain and controller regression tests for submit and read permission boundaries
2026-03-12 22:26:44 +08:00
vsxd
8c5b4d176a
feat(auth): add local username-password login
2026-03-12 21:59:28 +08:00
vsxd
3c9b95fd98
refactor(auth): remove local auth flow
2026-03-12 21:36:49 +08:00
vsxd
e63531ca3d
feat(dev): stabilize local env and phase3 flows
2026-03-12 21:33:25 +08:00
vsxd
05ec9bfbc2
feat(auth): add local username-password login
2026-03-12 21:27:01 +08:00
vsxd
559a9133ab
fix(backend): use DomainBadRequestException and ApiResponse envelope
...
- IdempotencyInterceptor: restructure Redis check to avoid swallowing
exceptions inside try-catch, use ApiResponse envelope for 409 response
- IdempotencyInterceptorTest: register JavaTimeModule for Instant
serialization, align mocks with actual implementation
- SkillRatingServiceTest: update expected exception type to match
DomainBadRequestException used in entity and service
2026-03-12 20:21:59 +08:00
vsxd
4dfa17dc4e
refactor(domain): improve SkillRating validation and add domain tests
...
- Add rating value validation in SkillRating entity
- Improve SkillRatingService error handling
- Add SkillPublishService and SkillQueryService test coverage
2026-03-12 20:11:32 +08:00
vsxd
c0e9c10e15
feat(admin): add idempotency layer and admin management API
...
- Add IdempotencyRecord entity with status tracking (PROCESSING/COMPLETED/FAILED)
- Implement IdempotencyInterceptor for request deduplication via X-Request-Id header
- Add scheduled cleanup tasks for expired and stale idempotency records
- Create admin API endpoints for user management (list/update role/update status)
- Create admin API endpoints for audit log viewing with filtering
- Add comprehensive unit tests for all components
- Configure test Redis mocks to support idempotency layer
2026-03-12 19:32:09 +08:00
vsxd
cfcdb545f0
feat(domain): update entities, services, repositories, and add shared exceptions
2026-03-12 17:46:48 +08:00
vsxd
217ed7e918
feat(social): add SkillStarService and SkillRatingService with events
2026-03-12 17:36:42 +08:00
vsxd
ae24a18e64
feat(social): add SkillStar and SkillRating entities and repositories
2026-03-12 17:19:50 +08:00
vsxd
51fa37a9c5
feat(review): implement PromotionService
...
- Add submitPromotion with duplicate check and validation
- Add approvePromotion with optimistic locking and skill copying
- Add rejectPromotion with reason recording
2026-03-12 15:52:54 +08:00
vsxd
bffc36b815
feat(review): implement ReviewService
...
- Add submitReview with duplicate check via partial unique index
- Add approveReview with optimistic locking and event publishing
- Add rejectReview with reason recording
- Add withdrawReview with PENDING status check
2026-03-12 15:42:21 +08:00
vsxd
644b3efd44
feat(review): add ReviewPermissionChecker with tests
...
- canReview: self-review blocked, GLOBAL requires SKILL_ADMIN/SUPER_ADMIN,
TEAM requires namespace ADMIN/OWNER
- canReviewPromotion: self-review blocked, requires SKILL_ADMIN/SUPER_ADMIN
- NamespaceType passed as parameter to avoid internal repository lookup
- 12 unit tests covering all permission scenarios
2026-03-12 15:24:51 +08:00
vsxd
3ebdc2691d
feat(repo): add review repositories
...
- Add ReviewTaskRepository with optimistic lock update
- Add PromotionRequestRepository
- Implement JPA repositories in infra module
2026-03-12 15:17:11 +08:00
vsxd
8a1b1a9d5f
feat(domain): add review workflow domain entities
...
- Add ReviewTaskStatus enum (PENDING, APPROVED, REJECTED)
- Add ReviewTask entity with optimistic locking
- Add PromotionRequest entity for cross-namespace promotion
2026-03-12 15:10:55 +08:00
vsxd
28040f36a2
feat(domain): add skill publish, query, download, and tag services with tests
2026-03-12 02:24:03 +08:00
vsxd
c9f9ef03f2
feat: add namespace services, controller, DTOs, and domain events
2026-03-12 02:12:00 +08:00
vsxd
4920506643
feat(domain): add SkillMetadataParser, SkillPackageValidator, and VisibilityChecker with tests
2026-03-12 02:04:29 +08:00
vsxd
8644154157
feat(domain): add Skill domain entities, repositories, and JPA implementations
2026-03-12 02:00:34 +08:00
vsxd
351829e1a9
feat(domain): add SlugValidator with comprehensive validation rules
2026-03-12 01:53:08 +08:00
vsxd
95c8c31561
feat(domain): complete Phase 1 entity fields for Namespace and NamespaceMember
2026-03-12 01:51:57 +08:00
vsxd
2991eb11e0
feat(domain/infra/auth): add domain entities, JPA repos, and auth entities
...
Task 8: Domain layer
- UserAccount entity with UserStatus lifecycle
- Namespace, NamespaceMember entities with NamespaceRole
- Repository interfaces for domain aggregates
Task 9: Infra layer
- UserAccountJpaRepository, NamespaceJpaRepository, NamespaceMemberJpaRepository
- Spring Data JPA implementations
Task 10: Auth entities and repositories
- IdentityBinding, ApiToken, Role, Permission, RolePermission, UserRoleBinding
- JPA repositories for all auth entities
- UserRoleBinding with eager-loaded Role for RBAC queries
2026-03-11 23:42:53 +08:00
vsxd
edfff6abc7
feat: complete Chunk 1 - backend skeleton and infrastructure
...
- Migrate all Maven groupId and Java packages to com.iflytek.skillhub
- Add Docker Compose with PostgreSQL 16, Redis 7, MinIO
- Add Flyway V1 migration with Phase 1 core schema (user, auth, RBAC, namespace, audit)
- Add RequestIdFilter with MDC tracing and X-Request-Id header
- Add GlobalExceptionHandler and ErrorResponse DTO
- Add HealthController (/api/v1/health) and OpenAPI config
- Add basic SecurityConfig permitting public endpoints
- Add H2 test profile for CI-friendly testing without external services
- Add top-level Makefile for dev workflow orchestration
- All 3 tests passing
2026-03-11 23:35:47 +08:00
vsxd
27b7a4dad1
feat: project ini and docs updates
2026-03-11 22:47:05 +08:00