sqlite-web 0.7.2
gitea.db
action_run
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
Update row 25331 in action_run
id
Primary key.
INTEGER NOT NULL
title
fix(mfa): 限制初始管理员凭据并原子完成首次开通
TEXT
repo_id
INTEGER
owner_id
INTEGER
workflow_id
verify.yml
TEXT
index
INTEGER
trigger_user_id
INTEGER
schedule_id
INTEGER
ref
refs/heads/main
TEXT
commit_sha
958ef4eaa9c5c873973a94474f7ffb6ab9c16cd2
TEXT
is_fork_pull_request
INTEGER
need_approval
INTEGER
approved_by
INTEGER
event
push
TEXT
event_payload
{"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"958ef4eaa9c5c873973a94474f7ffb6ab9c16cd2","compare_url":"https://gitea.g-hi.com/pengzhiyu/IAM/compare/bff0faf3451547b455191b02c7cf7ca2a1c1ee80...958ef4eaa9c5c873973a94474f7ffb6ab9c16cd2","commits":[{"id":"958ef4eaa9c5c873973a94474f7ffb6ab9c16cd2","message":"fix(mfa): 限制初始管理员凭据并原子完成首次开通\n\n初始管理员密码原先没有有效期,首次绑定后仍可作为长期密码使用。增加固定开通期限并要求绑定时设置正式密码,保留现有 MFA 安全机制。\n\n实现内容:\n- V24 增加初始凭据截止和完成标记,固定 24 小时有效,受限会话仍最多 300 秒且不能越过开户期限\n- 正式密码替换、TOTP 消费、因素绑定、恢复码生成及审计原子提交,撤销旧身份并创建新会话\n- 处理并发开通的浏览器会话清理,仅续办当前浏览器的有效 OIDC 交易且不延长交易期限\n- 增加离线重新签发命令和私密交付流程,禁止用于已绑定账号;前端仍要求确认保存恢复码\n- 补充开通、迁移、并发、事务回滚、前端和交付脚本测试,同步账号与 MFA 合同\n\n验证:\n- Maven 定向 verify:BootstrapEnrollmentIT 10 项、AccountsIT 15 项、MfaIT 34 项、TotpTest 3 项通过\n- AttackProtectionIT 12 项、SessionLifecycleIT 26 项、AuthorizationIT 26 项、BrowserSecurityIT 5 项通过\n- 初始凭据及三类 MFA 迁移测试各 1 项通过;AuthorizationMigrationIT 修正旧版本断言后 3 项通过\n- npm run check:21 个文件 173 项测试以及格式、lint、类型检查、构建通过\n- python3 deploy/lab/test-bootstrap.py:3 项通过\n- Maven console profile package 通过,最终 JAR 的前端资源和 V24 迁移与工作区一致\n- 后端全量测试及本阶段真实浏览器验收未运行\n\nBREAKING CHANGE: 需执行 V24 并同步升级前后端;历史未绑定初始管理员必须离线重新签发,初始开通确认接口新增必填 new_password,旧实例不能混跑\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/958ef4eaa9c5c873973a94474f7ffb6ab9c16cd2","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-09T18:38:18+08:00","added":["deploy/lab/test-bootstrap.py","iam-server/src/main/resources/db/migration/V24__bootstrap_credential_lifecycle.sql","iam-server/src/test/java/com/iam/server/data/BootstrapCredentialMigrationIT.java","iam-server/src/test/java/com/iam/server/protocol/BootstrapEnrollmentIT.java","iam-server/src/test/java/com/iam/server/protocol/TestAdministrator.java"],"removed":[],"modified":["deploy/lab/lab.py","docs/accounts.md","docs/mfa.md","iam-admin-web/src/pages/MfaPage.tsx","iam-admin-web/src/test/mfa.test.tsx","iam-server/src/main/java/com/iam/server/IamApplication.java","iam-server/src/main/java/com/iam/server/accounts/AccountService.java","iam-server/src/main/java/com/iam/server/accounts/AccountStore.java","iam-server/src/main/java/com/iam/server/accounts/BootstrapCli.java","iam-server/src/main/java/com/iam/server/accounts/BootstrapService.java","iam-server/src/main/java/com/iam/server/protocol/MfaService.java","iam-server/src/main/java/com/iam/server/protocol/ProtocolConfiguration.java","iam-server/src/main/java/com/iam/server/protocol/SessionLifecycle.java","iam-server/src/main/java/com/iam/server/web/MfaController.java","iam-server/src/test/java/com/iam/server/accounts/AccountsIT.java","iam-server/src/test/java/com/iam/server/data/AuthorizationMigrationIT.java","iam-server/src/test/java/com/iam/server/protocol/AuthorizationIT.java","iam-server/src/test/java/com/iam/server/protocol/MfaHttpClient.java","iam-server/src/test/java/com/iam/server/protocol/P08Environment.java","iam-server/src/test/java/com/iam/server/protocol/ProtocolFixture.java","scripts/bootstrap-admin.py"]},{"id":"f59b781e837c7cc0afc4916f4e7ace4d5e37f760","message":"fix(mfa): 修复受限会话恢复并增加递增冷却\n\n修复受限 MFA 会话过期后的页面恢复,并区分挑战终态与临时限流,防止用户等待后继续提交已失效的挑战。\n\n实现内容:\n- 全局 401 覆盖 PENDING/RECOVERY,补充 MFA 路由保护和明确退出导航\n- 挑战及绑定截止不晚于基础会话期限,终态要求重新开始,临时限流按 Retry-After 等待且不自动提交\n- V23 增加账号共享失败累计,每五次无效证明按 30/60/120/300 秒递增冷却,并原子记录审计与 Outbox\n- 保留 TOTP 防重放、恢复码单次消费、管理员禁止停用及独立二次验证授权\n- 补充集成、迁移、前端与浏览器验收测试,同步接口合同\n\n验证:\n- Maven 定向 verify:TotpTest 3 项、AttackProtectionIT 12 项、BrowserSecurityIT 5 项及三类 MFA 迁移测试各 1 项通过\n- MfaIT 首轮两项测试夹具异常已修复,定向 verify 重跑 34 项全部通过\n- npm run check:21 个文件共 171 项测试通过,格式、lint、类型及构建通过;最终脚本补测后格式与 lint 再次通过\n- Maven console profile package 成功,最终 JAR 浏览器 S01—S07 完整通过,S08 正式登录路由单独补测通过\n- 后端全量测试及原 P11 浏览器全套未运行\n\nBREAKING CHANGE: 挑战耗尽由 429 改为 400,新增 MFA_CHALLENGE_CONSUMED 和 MFA_COOLDOWN;需执行 V23、同步升级前后端并协调停止旧实例\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/f59b781e837c7cc0afc4916f4e7ace4d5e37f760","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-09T18:13:57+08:00","added":["iam-admin-web/scripts/acceptance-mfa-stage3.mjs","iam-admin-web/src/test/mfa-route.test.tsx","iam-server/src/main/resources/db/migration/V23__mfa_failure_cooldown.sql","iam-server/src/test/java/com/iam/server/data/MfaCooldownMigrationIT.java"],"removed":[],"modified":["docs/attack-protection.md","docs/console/page-api-matrix.md","docs/mfa.md","iam-admin-web/scripts/acceptance-p11-t01.mjs","iam-admin-web/src/App.tsx","iam-admin-web/src/lib/auth.tsx","iam-admin-web/src/pages/MfaPage.tsx","iam-admin-web/src/test/mfa.test.tsx","iam-server/src/main/java/com/iam/server/protocol/MfaService.java","iam-server/src/main/java/com/iam/server/protocol/ProtocolStore.java","iam-server/src/test/java/com/iam/server/protocol/MfaIT.java"]},{"id":"c0aca8ed9cb6c24340ab9a6cf3c22ff42d68c59b","message":"fix(mfa): 为敏感因素操作增加独立二次验证授权\n\n登录验证不再授权认证器重绑、恢复码再生成或停用 MFA,敏感操作必须完成新的 TOTP 验证。\n\n实现内容:\n- 新增 V22 授权表,绑定用户、会话、因素代际与操作类型,五分钟有效并在业务事务内原子消费\n- 保持首次绑定与恢复码受限重绑、管理员禁用限制及普通管理会话强度语义\n- 前端按具体操作弹出验证,身份变化、取消或过期终止,成功后最多续办一次并使用轮换后的 CSRF\n- 补充迁移、授权边界、前端续办测试以及接口文档和浏览器验收脚本\n\n验证:\n- MfaIT 23、AttackProtectionIT 12、TotpTest 3、BrowserSecurityIT 5、MfaMigrationIT 1、MfaStepUpMigrationIT 1 均通过\n- npm run check 通过:20 个文件共 157 项测试,格式、静态检查、类型检查与构建通过\n- 最后调整验收脚本后 npm run format:check 通过;console 制品打包通过\n- 最终制品的真实浏览器 12 个场景分两轮覆盖通过;完整单轮受账号限流影响,脚本已加入窗口等待\n- git diff --check 通过;后端全量测试未运行\n\nBREAKING CHANGE: 敏感因素操作需在挑战中指定 operation 并携带 X-MFA-Step-Up 授权。上线须执行 V22 并同步升级前后端,旧实例不可混跑;升级会清除未完成的绑定候选。\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/c0aca8ed9cb6c24340ab9a6cf3c22ff42d68c59b","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-09T17:17:07+08:00","added":["iam-server/src/main/resources/db/migration/V22__mfa_step_up_authorization.sql","iam-server/src/test/java/com/iam/server/data/MfaStepUpMigrationIT.java"],"removed":[],"modified":["docs/adr/A25-p11-administrator-mfa.md","docs/console/page-api-matrix.md","docs/mfa.md","iam-admin-web/scripts/acceptance-p11-t01.mjs","iam-admin-web/src/lib/api.ts","iam-admin-web/src/lib/auth.tsx","iam-admin-web/src/pages/MfaPage.tsx","iam-admin-web/src/test/api.test.ts","iam-admin-web/src/test/mfa.test.tsx","iam-server/src/main/java/com/iam/server/protocol/MfaService.java","iam-server/src/main/java/com/iam/server/web/MfaController.java","iam-server/src/test/java/com/iam/server/protocol/MfaIT.java"]},{"id":"7f8cdc4698e73b2af30f932250521b0d12198f06","message":"chore(evidence): 外置验收截图并记录历史清理映射\n\n批量浏览器截图占据仓库主要体积,改为独立归档并保留证据追溯方式。\n\n实现内容:\n- 排除 docs/evidence 下批量图片再次进入版本控制,保留其他文档图片\n- 增加 3473 张截图的归档校验清单及 146 个历史提交的新旧映射\n- 将 534 处截图链接指向归档说明并保留原路径,补充恢复及后续证据规则\n\n验证:\n- 146 个历史提交的非截图文件及父提交关系逐一核对通过\n- 3473 张归档图片逐一核对 SHA-256,通过归档完整性检查\n- 全部归档图片被忽略,其他文档图片未被误排除\n- 534 处改写链接目标校验及 git diff --check 通过\n- 未运行业务测试,本次没有修改业务代码或测试断言\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/7f8cdc4698e73b2af30f932250521b0d12198f06","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-09T15:37:26+08:00","added":["docs/evidence/README.md","docs/evidence/history-rewrite-map.txt","docs/evidence/screenshots-archive.json"],"removed":[],"modified":[".gitignore","docs/README.md","docs/evidence/P08/result.md","docs/evidence/P09/T01/recheck/result.md","docs/evidence/P09/T01/result.md","docs/evidence/P09/T02/group-lifecycle/visual-review.md","docs/evidence/P09/T02/recheck/result.md","docs/evidence/P09/T02/recheck/visual-review.md","docs/evidence/P09/T02/result.md","docs/evidence/P09/T03/result.md","docs/evidence/P09/T03/visual-review.md","docs/evidence/P09/T04/result.md","docs/evidence/P09/T04/visual-review.md","docs/evidence/P09/T05/result.md","docs/evidence/P09/T05/visual-review.md","docs/evidence/P09/T06/m2-exit.md","docs/evidence/P09/T06/visual-review.md","docs/evidence/P10/T01/result.md","docs/evidence/P10/T02/result.md","docs/evidence/P10/T03/result.md","docs/evidence/P10/T04/result.md","docs/evidence/P10/T05/result.md","docs/evidence/P11-PRE01/result.md","docs/evidence/P11/T01/dynamic-review.md","docs/evidence/P11/T01/result.md","docs/evidence/P11/T02/dynamic-review.md","docs/evidence/P11/T02/result.md","docs/evidence/P11/T03/result.md","docs/evidence/P11/T04/README.md","docs/evidence/P11/T04/coverage.md","docs/evidence/P11/T04/failures.md","docs/evidence/P11/T05/README.md","docs/evidence/P11/T06/README.md","docs/evidence/P11/T06/coverage.md","docs/evidence/P11/T07/README.md","docs/evidence/P11/T07/manual-checklist.md"]},{"id":"7da2727c1fa0b56e93f3c0bf68882dedc18dc46d","message":"docs(capacity): 归档生命周期锁优化与两小时故障复验\n\n记录共享生命周期读锁候选的同条件短测、正式稳定性及故障复验,保留失败与修正,并按原预算维持未通过裁决。\n\n实现内容:\n- 归档原始样本、源码摘要、曲线、认证方案评审及复算脚本\n- 同步开发计划和容量任务,区分历史、诊断、正式结果及目标缺口\n- 固定派生CSV使用LF,核对220份证据摘要与Git暂存内容一致\n- 保留耗尽探针首次失败及补测,记录7个独立环境与私有材料清理\n\n验证:\n- 冻结候选 ./mvnw -B -ntp clean verify -Pconsole:491个唯一测试通过,零失败、零跳过,AOSP及冻结前端构建通过\n- Python统计合同11项通过;最终故障工具javac及AOSP通过\n- 正式7200秒:815729成功、31错误、零漏发和429;刷新P95 303.72ms仍超过200ms预算\n- 10类低档隔离探针及9类持续背景故障最终通过,初次失败与预热错误保留\n- 归档JSON/Python语法、摘要与git diff --cached --check通过\n- L1自身目标仍未满足,限定试运行依据不足,P12未通过;未进入P13、未推送\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/7da2727c1fa0b56e93f3c0bf68882dedc18dc46d","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-08T20:21:54+08:00","added":["docs/evidence/P12/capacity/lock-cost-20261008/README.md","docs/evidence/P12/capacity/lock-cost-20261008/after/catalog-sessions.json","docs/evidence/P12/capacity/lock-cost-20261008/after/cleanup-environment.json","docs/evidence/P12/capacity/lock-cost-20261008/after/commands.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/after/curves/timeline.csv","docs/evidence/P12/capacity/lock-cost-20261008/after/curves/timeline.html","docs/evidence/P12/capacity/lock-cost-20261008/after/environment.json","docs/evidence/P12/capacity/lock-cost-20261008/after/hash.json","docs/evidence/P12/capacity/lock-cost-20261008/after/jvm-worker.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/after/mixed-1000-short-metrics.json","docs/evidence/P12/capacity/lock-cost-20261008/after/mixed-1000-short-samples.jsonl.gz","docs/evidence/P12/capacity/lock-cost-20261008/after/mixed-1000-short-summary.json","docs/evidence/P12/capacity/lock-cost-20261008/after/plan.json","docs/evidence/P12/capacity/lock-cost-20261008/after/preparation.json","docs/evidence/P12/capacity/lock-cost-20261008/after/profile-0.json","docs/evidence/P12/capacity/lock-cost-20261008/after/profile-1.json","docs/evidence/P12/capacity/lock-cost-20261008/after/progress.json","docs/evidence/P12/capacity/lock-cost-20261008/after/report-with-warmup.json","docs/evidence/P12/capacity/lock-cost-20261008/after/report.json","docs/evidence/P12/capacity/lock-cost-20261008/after/resources.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/after/round.json","docs/evidence/P12/capacity/lock-cost-20261008/after/smoke.json","docs/evidence/P12/capacity/lock-cost-20261008/after/tool-build.json","docs/evidence/P12/capacity/lock-cost-20261008/artifact-comparison.json","docs/evidence/P12/capacity/lock-cost-20261008/authentication-options.md","docs/evidence/P12/capacity/lock-cost-20261008/baseline/catalog-sessions.json","docs/evidence/P12/capacity/lock-cost-20261008/baseline/cleanup-environment.json","docs/evidence/P12/capacity/lock-cost-20261008/baseline/commands.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/baseline/curves/timeline.csv","docs/evidence/P12/capacity/lock-cost-20261008/baseline/curves/timeline.html","docs/evidence/P12/capacity/lock-cost-20261008/baseline/digest-plans.json","docs/evidence/P12/capacity/lock-cost-20261008/baseline/environment.json","docs/evidence/P12/capacity/lock-cost-20261008/baseline/error-types.json","docs/evidence/P12/capacity/lock-cost-20261008/baseline/exceptions-0.json","docs/evidence/P12/capacity/lock-cost-20261008/baseline/exceptions-1.json","docs/evidence/P12/capacity/lock-cost-20261008/baseline/jvm-worker.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/baseline/mixed-short-metrics.json","docs/evidence/P12/capacity/lock-cost-20261008/baseline/mixed-short-samples.jsonl.gz","docs/evidence/P12/capacity/lock-cost-20261008/baseline/mixed-short-summary.json","docs/evidence/P12/capacity/lock-cost-20261008/baseline/plan.json","docs/evidence/P12/capacity/lock-cost-20261008/baseline/preparation.json","docs/evidence/P12/capacity/lock-cost-20261008/baseline/progress.json","docs/evidence/P12/capacity/lock-cost-20261008/baseline/report-with-warmup.json","docs/evidence/P12/capacity/lock-cost-20261008/baseline/report.json","docs/evidence/P12/capacity/lock-cost-20261008/baseline/resources.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/baseline/smoke.json","docs/evidence/P12/capacity/lock-cost-20261008/baseline/threads-1-0.json","docs/evidence/P12/capacity/lock-cost-20261008/baseline/threads-1-1.json","docs/evidence/P12/capacity/lock-cost-20261008/baseline/threads-2-0.json","docs/evidence/P12/capacity/lock-cost-20261008/baseline/threads-2-1.json","docs/evidence/P12/capacity/lock-cost-20261008/baseline/tool-build.json","docs/evidence/P12/capacity/lock-cost-20261008/baseline/tool-source.tar.gz","docs/evidence/P12/capacity/lock-cost-20261008/before/catalog-sessions.json","docs/evidence/P12/capacity/lock-cost-20261008/before/cleanup-environment.json","docs/evidence/P12/capacity/lock-cost-20261008/before/commands.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/before/curves/timeline.csv","docs/evidence/P12/capacity/lock-cost-20261008/before/curves/timeline.html","docs/evidence/P12/capacity/lock-cost-20261008/before/environment.json","docs/evidence/P12/capacity/lock-cost-20261008/before/hash.json","docs/evidence/P12/capacity/lock-cost-20261008/before/jvm-worker.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/before/mixed-1000-short-metrics.json","docs/evidence/P12/capacity/lock-cost-20261008/before/mixed-1000-short-samples.jsonl.gz","docs/evidence/P12/capacity/lock-cost-20261008/before/mixed-1000-short-summary.json","docs/evidence/P12/capacity/lock-cost-20261008/before/plan.json","docs/evidence/P12/capacity/lock-cost-20261008/before/preparation.json","docs/evidence/P12/capacity/lock-cost-20261008/before/profile-0.json","docs/evidence/P12/capacity/lock-cost-20261008/before/profile-1.json","docs/evidence/P12/capacity/lock-cost-20261008/before/progress.json","docs/evidence/P12/capacity/lock-cost-20261008/before/report-with-warmup.json","docs/evidence/P12/capacity/lock-cost-20261008/before/report.json","docs/evidence/P12/capacity/lock-cost-20261008/before/resources.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/before/round.json","docs/evidence/P12/capacity/lock-cost-20261008/before/smoke.json","docs/evidence/P12/capacity/lock-cost-20261008/before/tool-build.json","docs/evidence/P12/capacity/lock-cost-20261008/candidate-overlay.tar.gz","docs/evidence/P12/capacity/lock-cost-20261008/cleanup-check-initial.json","docs/evidence/P12/capacity/lock-cost-20261008/cleanup.json","docs/evidence/P12/capacity/lock-cost-20261008/concurrency.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/background-exhaust/curves/timeline.csv","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/background-exhaust/curves/timeline.html","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/background-exhaust/low-exhaust-samples.jsonl.gz","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/background-exhaust/low-exhaust-summary.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/background-exhaust/plan.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/background-exhaust/progress.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/background-exhaust/report-with-warmup.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/background-exhaust/report.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/catalog-sessions.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/cleanup-environment.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/commands.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/environment.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/exhaust-results/exhaust-prepare.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/exhaust-results/exhaust-recovery.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/exhaust-results/exhaust.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/exhaust-results/summary.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/jvm-worker.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/preparation.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/repair-commands.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/repair-progress.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/repair.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/smoke.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/tool-build.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-exhaust-final/tool-source.tar.gz","docs/evidence/P12/capacity/lock-cost-20261008/fault-overlap.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair-rationale.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/background-exhaust/curves/timeline.csv","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/background-exhaust/curves/timeline.html","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/background-exhaust/low-exhaust-samples.jsonl.gz","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/background-exhaust/low-exhaust-summary.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/background-exhaust/plan.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/background-exhaust/progress.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/background-exhaust/report-with-warmup.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/background-exhaust/report.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/background-notifications/curves/timeline.csv","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/background-notifications/curves/timeline.html","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/background-notifications/low-notifications-samples.jsonl.gz","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/background-notifications/low-notifications-summary.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/background-notifications/plan.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/background-notifications/progress.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/background-notifications/report-with-warmup.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/background-notifications/report.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/catalog-sessions.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/cleanup-environment.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/commands.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/environment.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/exhaust-results/exhaust-prepare.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/exhaust-results/exhaust-recovery.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/exhaust-results/exhaust.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/exhaust-results/summary.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/jvm-worker.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/notifications-results/NOTIFICATION_DELAY.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/notifications-results/NOTIFICATION_DUPLICATE.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/notifications-results/NOTIFICATION_FAIL.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/notifications-results/WORKER_PAUSE.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/notifications-results/summary.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/preparation.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/repair-commands.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/repair-progress.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/repair.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/smoke.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/tool-build.json","docs/evidence/P12/capacity/lock-cost-20261008/fault-repair/tool-source.tar.gz","docs/evidence/P12/capacity/lock-cost-20261008/faults/background-results/curves/timeline.csv","docs/evidence/P12/capacity/lock-cost-20261008/faults/background-results/curves/timeline.html","docs/evidence/P12/capacity/lock-cost-20261008/faults/background-results/low-fault-background-samples.jsonl.gz","docs/evidence/P12/capacity/lock-cost-20261008/faults/background-results/low-fault-background-summary.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/background-results/plan.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/background-results/progress.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/background-results/report-with-warmup.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/background-results/report.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/catalog-sessions.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/cleanup-environment.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/commands.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/faults/environment.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/fault-results/exhaust-prepare.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/fault-results/exhaust.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/fault-results/instance-prepare.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/fault-results/instance-recovery.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/fault-results/instance-unavailable.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/fault-results/postgres-prepare.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/fault-results/postgres-recovery.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/fault-results/postgres-unavailable.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/fault-results/redis-prepare.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/fault-results/redis-recovery.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/fault-results/redis-unavailable.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/fault-results/summary.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/fault-results/transaction-prepare.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/fault-results/transaction-recovery.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/fault-results/transaction.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/followup-commands.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/faults/followup.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/jvm-worker.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/faults/notification-results/NOTIFICATION_DELAY.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/notification-results/NOTIFICATION_DUPLICATE.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/notification-results/NOTIFICATION_FAIL.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/notification-results/WORKER_PAUSE.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/notification-results/summary.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/preparation.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/probes.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/smoke.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/tool-build.json","docs/evidence/P12/capacity/lock-cost-20261008/faults/tool-source.tar.gz","docs/evidence/P12/capacity/lock-cost-20261008/final-validation.json","docs/evidence/P12/capacity/lock-cost-20261008/followup-source.json","docs/evidence/P12/capacity/lock-cost-20261008/followup-source.tar.gz","docs/evidence/P12/capacity/lock-cost-20261008/full-tests.json","docs/evidence/P12/capacity/lock-cost-20261008/manifest.json","docs/evidence/P12/capacity/lock-cost-20261008/recompute-commands.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/recompute-concurrency.py","docs/evidence/P12/capacity/lock-cost-20261008/recompute-results.py","docs/evidence/P12/capacity/lock-cost-20261008/sample-audit.json","docs/evidence/P12/capacity/lock-cost-20261008/secret-scan-initial.json","docs/evidence/P12/capacity/lock-cost-20261008/secret-scan.json","docs/evidence/P12/capacity/lock-cost-20261008/short-comparison.json","docs/evidence/P12/capacity/lock-cost-20261008/source-provenance.json","docs/evidence/P12/capacity/lock-cost-20261008/stability/catalog-sessions.json","docs/evidence/P12/capacity/lock-cost-20261008/stability/cleanup-environment.json","docs/evidence/P12/capacity/lock-cost-20261008/stability/commands.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/stability/curves/timeline.csv","docs/evidence/P12/capacity/lock-cost-20261008/stability/curves/timeline.html","docs/evidence/P12/capacity/lock-cost-20261008/stability/environment.json","docs/evidence/P12/capacity/lock-cost-20261008/stability/error-type-snapshot.json","docs/evidence/P12/capacity/lock-cost-20261008/stability/first-hour-resource-snapshot.json","docs/evidence/P12/capacity/lock-cost-20261008/stability/jvm-worker.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/stability/mixed-low-2h-metrics.json","docs/evidence/P12/capacity/lock-cost-20261008/stability/mixed-low-2h-samples.jsonl.gz","docs/evidence/P12/capacity/lock-cost-20261008/stability/mixed-low-2h-summary.json","docs/evidence/P12/capacity/lock-cost-20261008/stability/plan.json","docs/evidence/P12/capacity/lock-cost-20261008/stability/preparation.json","docs/evidence/P12/capacity/lock-cost-20261008/stability/progress.json","docs/evidence/P12/capacity/lock-cost-20261008/stability/report-with-warmup.json","docs/evidence/P12/capacity/lock-cost-20261008/stability/report.json","docs/evidence/P12/capacity/lock-cost-20261008/stability/resources.jsonl","docs/evidence/P12/capacity/lock-cost-20261008/stability/round.json","docs/evidence/P12/capacity/lock-cost-20261008/stability/smoke.json","docs/evidence/P12/capacity/lock-cost-20261008/stability/tool-build.json","docs/evidence/P12/capacity/lock-cost-20261008/statistics-validation.json","docs/evidence/P12/capacity/lock-cost-20261008/targeted-repair-failures.json","docs/evidence/P12/capacity/lock-cost-20261008/targeted-tests-initial.json","docs/evidence/P12/capacity/lock-cost-20261008/tool-source.tar.gz","docs/evidence/P12/capacity/lock-cost-20261008/validation-commands.jsonl"],"removed":[],"modified":["docs/02-IAM开发计划.md","docs/evidence/P12/capacity/README.md","docs/evidence/P12/capacity/closure.json","docs/tasks/P12-capacity-T02.md","docs/tasks/P12-capacity-T03.md","docs/tasks/P12-capacity-T04.md","docs/tasks/P12-capacity-T05.md","docs/tasks/P12-capacity-T06.md"]}],"total_commits":0,"head_commit":{"id":"958ef4eaa9c5c873973a94474f7ffb6ab9c16cd2","message":"fix(mfa): 限制初始管理员凭据并原子完成首次开通\n\n初始管理员密码原先没有有效期,首次绑定后仍可作为长期密码使用。增加固定开通期限并要求绑定时设置正式密码,保留现有 MFA 安全机制。\n\n实现内容:\n- V24 增加初始凭据截止和完成标记,固定 24 小时有效,受限会话仍最多 300 秒且不能越过开户期限\n- 正式密码替换、TOTP 消费、因素绑定、恢复码生成及审计原子提交,撤销旧身份并创建新会话\n- 处理并发开通的浏览器会话清理,仅续办当前浏览器的有效 OIDC 交易且不延长交易期限\n- 增加离线重新签发命令和私密交付流程,禁止用于已绑定账号;前端仍要求确认保存恢复码\n- 补充开通、迁移、并发、事务回滚、前端和交付脚本测试,同步账号与 MFA 合同\n\n验证:\n- Maven 定向 verify:BootstrapEnrollmentIT 10 项、AccountsIT 15 项、MfaIT 34 项、TotpTest 3 项通过\n- AttackProtectionIT 12 项、SessionLifecycleIT 26 项、AuthorizationIT 26 项、BrowserSecurityIT 5 项通过\n- 初始凭据及三类 MFA 迁移测试各 1 项通过;AuthorizationMigrationIT 修正旧版本断言后 3 项通过\n- npm run check:21 个文件 173 项测试以及格式、lint、类型检查、构建通过\n- python3 deploy/lab/test-bootstrap.py:3 项通过\n- Maven console profile package 通过,最终 JAR 的前端资源和 V24 迁移与工作区一致\n- 后端全量测试及本阶段真实浏览器验收未运行\n\nBREAKING CHANGE: 需执行 V24 并同步升级前后端;历史未绑定初始管理员必须离线重新签发,初始开通确认接口新增必填 new_password,旧实例不能混跑\n","url":"https://gitea.g-hi.com/pengzhiyu/IAM/commit/958ef4eaa9c5c873973a94474f7ffb6ab9c16cd2","author":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"committer":{"name":"starry","email":"gamebyteyu@gmail.com","username":""},"verification":null,"timestamp":"2026-10-09T18:38:18+08:00","added":["deploy/lab/test-bootstrap.py","iam-server/src/main/resources/db/migration/V24__bootstrap_credential_lifecycle.sql","iam-server/src/test/java/com/iam/server/data/BootstrapCredentialMigrationIT.java","iam-server/src/test/java/com/iam/server/protocol/BootstrapEnrollmentIT.java","iam-server/src/test/java/com/iam/server/protocol/TestAdministrator.java"],"removed":[],"modified":["deploy/lab/lab.py","docs/accounts.md","docs/mfa.md","iam-admin-web/src/pages/MfaPage.tsx","iam-admin-web/src/test/mfa.test.tsx","iam-server/src/main/java/com/iam/server/IamApplication.java","iam-server/src/main/java/com/iam/server/accounts/AccountService.java","iam-server/src/main/java/com/iam/server/accounts/AccountStore.java","iam-server/src/main/java/com/iam/server/accounts/BootstrapCli.java","iam-server/src/main/java/com/iam/server/accounts/BootstrapService.java","iam-server/src/main/java/com/iam/server/protocol/MfaService.java","iam-server/src/main/java/com/iam/server/protocol/ProtocolConfiguration.java","iam-server/src/main/java/com/iam/server/protocol/SessionLifecycle.java","iam-server/src/main/java/com/iam/server/web/MfaController.java","iam-server/src/test/java/com/iam/server/accounts/AccountsIT.java","iam-server/src/test/java/com/iam/server/data/AuthorizationMigrationIT.java","iam-server/src/test/java/com/iam/server/protocol/AuthorizationIT.java","iam-server/src/test/java/com/iam/server/protocol/MfaHttpClient.java","iam-server/src/test/java/com/iam/server/protocol/P08Environment.java","iam-server/src/test/java/com/iam/server/protocol/ProtocolFixture.java","scripts/bootstrap-admin.py"]},"repository":{"id":125,"owner":{"id":16,"login":"pengzhiyu","login_name":"","source_id":0,"full_name":"","email":"228834386@qq.com","avatar_url":"https://gitea.g-hi.com/avatar/bcd8cfbb58b96e4afa8ab5f6ac09cb16","html_url":"https://gitea.g-hi.com/pengzhiyu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-07-15T09:26:56+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"pengzhiyu"},"name":"IAM","full_name":"pengzhiyu/IAM","description":"Identity and Access Management(身份识别与访问管理)","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":27,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/pengzhiyu/IAM/languages","html_url":"https://gitea.g-hi.com/pengzhiyu/IAM","url":"https://gitea.g-hi.com/api/v1/repos/pengzhiyu/IAM","link":"","ssh_url":"git@gitea.g-hi.com:pengzhiyu/IAM.git","clone_url":"https://gitea.g-hi.com/pengzhiyu/IAM.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-10-08T17:04:24+08:00","updated_at":"2026-10-10T13:44:43+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":16,"login":"pengzhiyu","login_name":"","source_id":0,"full_name":"","email":"16+pengzhiyu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/bcd8cfbb58b96e4afa8ab5f6ac09cb16","html_url":"https://gitea.g-hi.com/pengzhiyu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-07-15T09:26:56+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"pengzhiyu"},"sender":{"id":16,"login":"pengzhiyu","login_name":"","source_id":0,"full_name":"","email":"16+pengzhiyu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/bcd8cfbb58b96e4afa8ab5f6ac09cb16","html_url":"https://gitea.g-hi.com/pengzhiyu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-07-15T09:26:56+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"pengzhiyu"}}
TEXT
trigger_event
push
TEXT
status
INTEGER
version
INTEGER (default 0
started
INTEGER
stopped
INTEGER
previous_duration
INTEGER
created
INTEGER
updated
INTEGER
raw_concurrency
TEXT
concurrency_group
TEXT NOT NULL (default ''
concurrency_cancel
INTEGER NOT NULL (default FALSE
Update
Cancel