✨ feat(vscode): 看板默认显示团队工单,同事的卡只读并贴头像
看板范围默认从「只看我的」改为「团队全部」,同事移交或推进的工单不用 手动切开关就能看见。同事的卡片按 Gitea 归属(assignee 优先,无 assignee 退回创建者)判定为只读:禁止拖列、开会话、实施、合并分支、删 worktree、 删改工单,卡片右上角贴归属人头像,详情面板属性表整体消毒并显示只读徽章。 看 PR 改动、勾已查看、生成文件摘要属于本机审查动作,照常放行。 扩展侧在消息分发前统一拦截需要归属人身份的消息,兜住前端快照过期或工单 刚被重新指派的竞态;webhook 单卡上板时同步归属,避免增量卡漏进门禁。 头像由扩展侧带 token 抓回转 data URI 下发,绕开 webview CSP 对外链图片 的限制,按 URL 进程内缓存。 Claude-Session: https://claude.ai/code/session_01KSgcQwf1mWrb8qeTKFvJbV
This commit is contained in:
1 parent
e8963ac2a2
commit
9167b86708
26 files changed
+550
-34
No files matched your search
@@ -0,0 +1,42 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { isOwnerOnlyMessage } from './readOnlyGuard'
|
||||
|
||||
describe('isOwnerOnlyMessage', () => {
|
||||
it('改工单状态的消息要门禁', () => {
|
||||
expect(isOwnerOnlyMessage('column/change')).toBe(true)
|
||||
expect(isOwnerOnlyMessage('issue/delete')).toBe(true)
|
||||
expect(isOwnerOnlyMessage('issue/close')).toBe(true)
|
||||
expect(isOwnerOnlyMessage('dependency/set')).toBe(true)
|
||||
expect(isOwnerOnlyMessage('issue/update-auto-review')).toBe(true)
|
||||
})
|
||||
|
||||
it('在本机替别人跑会话的消息要门禁', () => {
|
||||
expect(isOwnerOnlyMessage('issue/implement')).toBe(true)
|
||||
expect(isOwnerOnlyMessage('session/resume')).toBe(true)
|
||||
expect(isOwnerOnlyMessage('session/start-test')).toBe(true)
|
||||
expect(isOwnerOnlyMessage('brainstorm/continue')).toBe(true)
|
||||
})
|
||||
|
||||
it('合并分支、删 worktree 要门禁', () => {
|
||||
expect(isOwnerOnlyMessage('git/merge-preview')).toBe(true)
|
||||
expect(isOwnerOnlyMessage('worktree/delete')).toBe(true)
|
||||
})
|
||||
|
||||
it('看 PR 改动与本机审查记录放行', () => {
|
||||
expect(isOwnerOnlyMessage('pr-files/get')).toBe(false)
|
||||
expect(isOwnerOnlyMessage('pr-file-diff/get')).toBe(false)
|
||||
expect(isOwnerOnlyMessage('pr-file-summary/generate')).toBe(false)
|
||||
expect(isOwnerOnlyMessage('pr-review/set')).toBe(false)
|
||||
expect(isOwnerOnlyMessage('pr/open')).toBe(false)
|
||||
})
|
||||
|
||||
it('接管别人移交过来的工单放行(此时 assignee 已是我)', () => {
|
||||
expect(isOwnerOnlyMessage('handoff/accept')).toBe(false)
|
||||
})
|
||||
|
||||
it('看板级操作与工单无关,放行', () => {
|
||||
expect(isOwnerOnlyMessage('issues/refresh')).toBe(false)
|
||||
expect(isOwnerOnlyMessage('issues/set-scope')).toBe(false)
|
||||
expect(isOwnerOnlyMessage('issue/create')).toBe(false)
|
||||
})
|
||||
})
|
||||
Reference in new issue
Block a user