Skip to content

Commit 4dda014

Browse files
committed
feat: streamline collaborative review workflow
1 parent 2da0909 commit 4dda014

33 files changed

Lines changed: 2813 additions & 83 deletions

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ platform/campus-deploy/本机平台登录信息.txt
4545
platform/campus-deploy/platform.pid
4646
platform/campus-deploy/logs/
4747

48+
# Generated handbook deliverables and render QA (builder assets stay tracked)
49+
docs/YOLO_Label_Recovery_项目开发学习与大厂面试手册.docx
50+
docs/_handbook_qa*/
51+
4852
# IDE and OS files
4953
.idea/
5054
.vscode/

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ See [Grouped Review Application](docs/GROUPED_REVIEW_APP.md) for the queue contr
8282

8383
### Multi-user collaboration platform
8484

85-
The repository now includes a deployable web platform for teams that outgrow the portable desktop reviewer. A Vue 3 + TypeScript client talks to a Spring Boot 4 REST API backed by MySQL and Flyway. JWT authentication, `ADMIN / REVIEWER / AUDITOR` RBAC, project membership, pessimistic task claiming, renewable leases, optimistic versions and immutable audit events prevent duplicate work and stale decisions. The Python bridge streams the existing `review_queue.csv` into the API in bounded, idempotent batches.
85+
The repository now includes a deployable web platform for teams that outgrow the portable desktop reviewer. A Vue 3 + TypeScript client talks to a Spring Boot 4 REST API backed by MySQL and Flyway. JWT authentication, `ADMIN / REVIEWER / AUDITOR` RBAC, project membership, pessimistic task claiming, renewable leases, optimistic versions and immutable audit events prevent duplicate work and stale decisions. One-click decisions automatically advance through image-grouped candidates; visible lease/network health and a reviewer-scoped recent-decision correction path make failures recoverable without weakening the audit boundary. The Python bridge streams the existing `review_queue.csv` into the API in bounded, idempotent batches.
8686

8787
![Real role-aware login entry](docs/assets/platform-login.png)
8888

@@ -93,6 +93,8 @@ The repository now includes a deployable web platform for teams that outgrow the
9393
<img src="docs/assets/platform-admin.png" width="49%" alt="Reviewer account and project assignment panel">
9494
</p>
9595

96+
![Real one-click review, lease and recent-decision workflow](docs/assets/platform-review-productivity.png)
97+
9698
These are captures of the actual Vue + Spring Boot application, not design mockups. The login view shows the role-aware entry used by reviewers; the workspace shows a claimed task, real review visual, class confidence, constrained decisions and live project progress; the admin view demonstrates account creation and project membership assignment.
9799

98100
```mermaid

README.zh-CN.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282

8383
### 多人登录协作平台
8484

85-
当便携式桌面审核器无法满足多人并行工作时,可以启用仓库内的 Web 协作平台。Vue 3 + TypeScript 前端连接 Spring Boot 4 REST API,使用 MySQL + Flyway 持久化;JWT 登录、`ADMIN / REVIEWER / AUDITOR` 角色、项目成员隔离、悲观锁原子领任务、可续租心跳、乐观版本号和不可变审计事件共同防止重复审核与旧页面覆盖。Python 桥接脚本会把现有 `review_queue.csv` 以有界、幂等批次流式导入。
85+
当便携式桌面审核器无法满足多人并行工作时,可以启用仓库内的 Web 协作平台。Vue 3 + TypeScript 前端连接 Spring Boot 4 REST API,使用 MySQL + Flyway 持久化;JWT 登录、`ADMIN / REVIEWER / AUDITOR` 角色、项目成员隔离、悲观锁原子领任务、可续租心跳、乐观版本号和不可变审计事件共同防止重复审核与旧页面覆盖。主审核采用“一键决定并自动前进”,租约/心跳/网络状态直接可见,“我的最近审核”只返回当前审核人在当前项目中的记录并支持审计式纠错。Python 桥接脚本会把现有 `review_queue.csv` 以有界、幂等批次流式导入。
8686

8787
![真实角色登录入口](docs/assets/platform-login.png)
8888

@@ -93,6 +93,8 @@
9393
<img src="docs/assets/platform-admin.png" width="49%" alt="审核账号与项目分配面板">
9494
</p>
9595

96+
![真实一键审核、租约状态与最近决定纠错流程](docs/assets/platform-review-productivity.png)
97+
9698
以上均为 Vue + Spring Boot 应用的真实运行截图,不是设计示意图。登录页展示审核人员实际使用的角色入口;工作台同时展示已领取任务、真实审核图、类别置信度、受约束决策按钮和项目实时进度;管理员界面展示账号创建与项目成员分配能力。
9799

98100
```mermaid

docs/COLLABORATION_PLATFORM.md

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,13 @@ Authentication and authorization are separate.
6666

6767
### Renewable lease / 可续租任务
6868

69-
A claim is not permanent. It records `claimed_by` and `lease_until`; the browser sends a heartbeat every 60 seconds. Closing the browser stops renewal, so the task becomes claimable after the configured lease period. A reviewer must release or finish the active task before switching projects.
69+
A claim is not permanent. It records `claimed_by` and `lease_until`; the browser sends a heartbeat every 30 seconds and renders the remaining lease, renewal state and browser network state. Closing the browser stops renewal, so the task becomes claimable after the configured lease period. A reviewer must release or finish the active task before switching projects.
70+
71+
### One-click throughput and audited correction / 一键审核与审计式纠错
72+
73+
The high-frequency path intentionally uses one-click decisions: a valid action is persisted immediately, then the client claims the next pending candidate in the same image or advances to the next image. Reviewers do not pay a second confirmation click for every box. Completed decisions remain recoverable through a reviewer-scoped recent list. The original reviewer or an administrator may reopen and revise them with the current optimistic version, and every revision produces an audit event.
74+
75+
高频主流程采用“一键决定并自动前进”:合法动作立即写入服务端,优先进入本图下一框,本图完成后进入下一图,不为每个框增加二次确认成本。已完成决定仍可通过“我的最近审核”找回;原审核人或管理员使用最新乐观版本进行改判,并为每次修订生成审计事件。
7076

7177
### Optimistic version / 乐观版本
7278

@@ -172,12 +178,15 @@ See [campus-deploy/README.md](../platform/campus-deploy/README.md). Local passwo
172178
| POST | `/api/tasks/claim-next?projectId={id}` | Atomically lease one task |
173179
| POST | `/api/tasks/{id}/heartbeat` | Renew current user's lease |
174180
| POST | `/api/tasks/{id}/decision` | Submit constrained decision and expected version |
181+
| PUT | `/api/tasks/{id}/decision` | Revise an owned/admin decision with expected version |
182+
| GET | `/api/tasks/recent?projectId={id}` | Current reviewer's recent decisions in one project |
183+
| GET | `/api/tasks/{id}/image-candidates` | All candidate boxes grouped by source image |
175184
| GET | `/api/tasks/{id}/visual` | Read an authorized real review image |
176185
| GET | `/api/projects/{id}/audit` | Read project audit trail, admin/auditor |
177186

178187
## 11. Reproduce documentation screenshots / 重建文档截图
179188

180-
The screenshot tool uses Chrome DevTools directly and adds no browser-automation dependency to the application. Credentials are supplied only through process environment variables; the script waits for animations and images, captures four pages, and releases the temporary claimed task.
189+
The screenshot tool uses Chrome DevTools directly and adds no browser-automation dependency to the application. Credentials are supplied only through process environment variables; the script waits for animations and images, captures login/dashboard/admin/review/productivity states, and releases the temporary claimed task.
181190

182191
截图脚本直接调用 Chrome DevTools,不给业务项目增加浏览器自动化依赖。账号密码只通过当前进程环境变量传入;脚本会等待动画和图片稳定,拍摄四个页面,并释放临时领取的任务。
183192

@@ -192,11 +201,17 @@ node platform\tools\capture_platform_screenshots.mjs docs\assets
192201

193202
1. Start from the data problem: incomplete labels make true objects become false background supervision.
194203
2. Explain why offline inference and online review are separated: GPU jobs are expensive and bursty; human review is concurrent and stateful.
195-
3. Draw the claim transaction and lease timeline; emphasize pessimistic locking for allocation and optimistic locking for stale clients.
204+
3. Draw the claim transaction and lease timeline; emphasize pessimistic locking for allocation, visible heartbeat recovery and optimistic locking for stale clients.
196205
4. Explain dual authorization: RBAC handles capability while project membership handles data scope.
197206
5. Show bounded idempotent import and read-only visual mounts as memory-safety and data-safety decisions.
198207
6. Close with evidence: `30,183` imported candidates, `4,465` migrated decisions, two-account concurrent validation, real screenshots, automated Java/Python tests and two reproducible deployment modes.
199208

200209
## 13. Production hardening / 生产加固
201210

211+
### Query-path indexes / 查询路径索引
212+
213+
Flyway `V2__review_productivity_indexes.sql` adds indexes that match user-visible access paths: `(project_id, split, image_name, id)` supports the image-grouped left rail, while `(reviewer_id, decided_at, id)` supports deterministic newest-first recent decisions. The migration has been validated against MySQL 8.4; Hibernate validates the resulting schema instead of mutating it at runtime.
214+
215+
索引来自真实交互路径:按图聚合列表需要快速定位同项目、同划分、同图片的候选;最近审核需要按审核人和决定时间倒序读取。迁移由 Flyway 版本化执行,生产环境不依赖 Hibernate 自动改表。
216+
202217
Before exposing the service beyond a trusted LAN, terminate TLS at a reverse proxy, rotate JWT/database secrets, disable bootstrap admin after first setup, back up MySQL, centralize logs and metrics, and define account disable/password-reset procedures. Docker Compose is an auditable single-host baseline; Kubernetes or managed databases are deployment choices, not prerequisites for the core workflow.
83.5 KB
Loading
97.9 KB
Loading
49.3 KB
Loading
81.3 KB
Loading
131 KB
Loading
60.9 KB
Loading

0 commit comments

Comments
 (0)