sqlite-web 0.7.2
gitea.db
action
Create
Query
access
access_token
action
action_artifact
action_run
action_run_index
action_run_job
action_runner
action_runner_token
action_schedule
action_schedule_spec
action_task
action_task_output
action_task_step
action_tasks_version
action_variable
app_state
attachment
auth_token
badge
branch
collaboration
comment
commit_status
commit_status_index
commit_status_summary
commit_sync_log
commit_sync_status
dbfs_data
dbfs_meta
deploy_key
email_address
email_hash
external_login_user
follow
gpg_key
gpg_key_import
hook_task
issue
issue_assignees
issue_content_history
issue_dependency
issue_index
issue_label
issue_pin
issue_user
issue_watch
label
language_stat
lfs_lock
lfs_meta_object
login_source
milestone
mirror
notice
notification
oauth2_application
oauth2_authorization_code
oauth2_grant
org_user
package
package_blob
package_blob_upload
package_cleanup_rule
package_file
package_property
package_version
project
project_board
project_issue
protected_branch
protected_tag
public_key
pull_auto_merge
pull_request
push_mirror
reaction
release
renamed_branch
repo_archiver
repo_hidden_file
repo_indexer_status
repo_license
repo_redirect
repo_topic
repo_transfer
repo_unit
repository
review
review_state
secret
session
sqlite_sequence
star
stopwatch
system_setting
task
team
team_invite
team_repo
team_unit
team_user
topic
tracked_time
two_factor
upload
user
user_badge
user_blocking
user_open_id
user_redirect
user_setting
version
watch
webauthn_credential
webhook
Toggle helper tables
Structure
Content
Query
Insert
Drop
Import
Export
Delete row 20289 from action
id
20289
user_id
5
op_type
5
act_user_id
5
repo_id
72
comment_id
0
is_deleted
0
ref_name
refs/heads/feat/solution-tier-multi-product
is_private
0
content
{"Commits":[{"Sha1":"3a22776ed
{"Commits":[{"Sha1":"3a22776ed81118bba6b93bfb50d5b36a70b2ee35","Message":"feat(approval-inbox): 切片二(4/5 域)——补发起人字段与不可自批硬校验\n\n蓝图 §7 裁决的方案 B:中心先落地、内控另立一片。本片补齐 5 个缺发起人的域中的 4 个。\n\n## 新增字段(两后端 schema 对等 + 迁移)\n- SolutionProject.reviewRequestedBy —— **把方案推进到当前待审状态的人**。\n 单列足够:同一时刻只有一个待审阶段。技术复核阶段=提交人、经理批准阶段=技术复核人,\n 正好都是各自阶段该被禁止自批的那一个。\n- PurchaseOrder.acceptedBy —— 接单人\n- Stocktake.submittedBy —— 提交盘点的人\n\n三列一律 nullable:迁移前的存量行无从追溯发起人,**判不了就不判**。\n给个假默认值会让不可自批看起来生效、实际保护不了任何一行。\n\n## 不可自批硬校验(两后端对等)\n方案技术复核 / 方案经理批准 / 采购审批 / 盘点审批各加 approver ≠ requester 校验,\n403 + code=SELF_APPROVAL_FORBIDDEN,与红冲/退款既有口径一致。\n角色分离挡不住 ADMIN(持全部 capability),所以必须按 actor 再判一次——两层缺一不可。\n\nactor 串进 5 条写链(两后端各自的 controller/route 补 RequestActor/requestActor)。\n\n## 契约与聚合\nselfRequestedKnown 对这 4 类转 true;聚合把 requestedBy 带出来,\n自批过滤随之在这 4 类上真正生效。UI 文案改为点名「报价审批暂未记录发起人」。\n\n## E2E 随内控调整(这些红盘是闸门在正确工作,不是回归)\n原用例里同一个 ADMIN 既提交又审批——正是不可自批要禁的。浏览器会话取不到身份时\nactor 兜底为 `role:\u003cROLE\u003e`(同角色视为同一人,刻意 fail-closed,不得为测试放宽)。\n故改为:先在浏览器断言「点了没推进」(这是该闸门唯一的浏览器级证据),\n再换一个审批人身份走 API 放行。覆盖方案双审核、采购审批、盘点审批三处。\n\n## 证据(本地工作区 2026-08-01)\n- pnpm check 0 / check:runtime 296(地板 294→296)/ check:ui 10(地板 9→10)\n- 两后端各 +1 条自批 403 断言;contracts 单测覆盖 selfRequestedKnown 全集\n- 负向实跑判红后恢复:拔掉采购不可自批校验 → 期望 403 实得 200 判红\n\n## 仍未闭环\n报价审批(ApprovalRequest 无 requestedBy)**本片未做**——并发会话正在改报价域,\n避让以免卡住对方。中心因此仍**不得**笼统宣称「已保证不可自批」。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-01T20:15:14-07:00"}],"HeadCommit":{"Sha1":"3a22776ed81118bba6b93bfb50d5b36a70b2ee35","Message":"feat(approval-inbox): 切片二(4/5 域)——补发起人字段与不可自批硬校验\n\n蓝图 §7 裁决的方案 B:中心先落地、内控另立一片。本片补齐 5 个缺发起人的域中的 4 个。\n\n## 新增字段(两后端 schema 对等 + 迁移)\n- SolutionProject.reviewRequestedBy —— **把方案推进到当前待审状态的人**。\n 单列足够:同一时刻只有一个待审阶段。技术复核阶段=提交人、经理批准阶段=技术复核人,\n 正好都是各自阶段该被禁止自批的那一个。\n- PurchaseOrder.acceptedBy —— 接单人\n- Stocktake.submittedBy —— 提交盘点的人\n\n三列一律 nullable:迁移前的存量行无从追溯发起人,**判不了就不判**。\n给个假默认值会让不可自批看起来生效、实际保护不了任何一行。\n\n## 不可自批硬校验(两后端对等)\n方案技术复核 / 方案经理批准 / 采购审批 / 盘点审批各加 approver ≠ requester 校验,\n403 + code=SELF_APPROVAL_FORBIDDEN,与红冲/退款既有口径一致。\n角色分离挡不住 ADMIN(持全部 capability),所以必须按 actor 再判一次——两层缺一不可。\n\nactor 串进 5 条写链(两后端各自的 controller/route 补 RequestActor/requestActor)。\n\n## 契约与聚合\nselfRequestedKnown 对这 4 类转 true;聚合把 requestedBy 带出来,\n自批过滤随之在这 4 类上真正生效。UI 文案改为点名「报价审批暂未记录发起人」。\n\n## E2E 随内控调整(这些红盘是闸门在正确工作,不是回归)\n原用例里同一个 ADMIN 既提交又审批——正是不可自批要禁的。浏览器会话取不到身份时\nactor 兜底为 `role:\u003cROLE\u003e`(同角色视为同一人,刻意 fail-closed,不得为测试放宽)。\n故改为:先在浏览器断言「点了没推进」(这是该闸门唯一的浏览器级证据),\n再换一个审批人身份走 API 放行。覆盖方案双审核、采购审批、盘点审批三处。\n\n## 证据(本地工作区 2026-08-01)\n- pnpm check 0 / check:runtime 296(地板 294→296)/ check:ui 10(地板 9→10)\n- 两后端各 +1 条自批 403 断言;contracts 单测覆盖 selfRequestedKnown 全集\n- 负向实跑判红后恢复:拔掉采购不可自批校验 → 期望 403 实得 200 判红\n\n## 仍未闭环\n报价审批(ApprovalRequest 无 requestedBy)**本片未做**——并发会话正在改报价域,\n避让以免卡住对方。中心因此仍**不得**笼统宣称「已保证不可自批」。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-01T20:15:14-07:00"},"CompareURL":"luoanwu/juhai-quotation-system/compare/b15cb54710ee5d1849b806adc01fcdddcaff5484...3a22776ed81118bba6b93bfb50d5b36a70b2ee35","Len":1}
...
created_unix
1785640521
Delete
Cancel