You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+3-1Lines changed: 3 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -82,7 +82,7 @@ See [Grouped Review Application](docs/GROUPED_REVIEW_APP.md) for the queue contr
82
82
83
83
### Multi-user collaboration platform
84
84
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.
@@ -93,6 +93,8 @@ The repository now includes a deployable web platform for teams that outgrow the
93
93
<imgsrc="docs/assets/platform-admin.png"width="49%"alt="Reviewer account and project assignment panel">
94
94
</p>
95
95
96
+

97
+
96
98
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.
Copy file name to clipboardExpand all lines: docs/COLLABORATION_PLATFORM.md
+18-3Lines changed: 18 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -66,7 +66,13 @@ Authentication and authorization are separate.
66
66
67
67
### Renewable lease / 可续租任务
68
68
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.
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.
1. Start from the data problem: incomplete labels make true objects become false background supervision.
194
203
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.
196
205
4. Explain dual authorization: RBAC handles capability while project membership handles data scope.
197
206
5. Show bounded idempotent import and read-only visual mounts as memory-safety and data-safety decisions.
198
207
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.
199
208
200
209
## 13. Production hardening / 生产加固
201
210
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.
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.
0 commit comments