sqlite-web 0.7.2
gitea.db
package_version
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 22 from package_version
id
22
package_id
4
creator_id
5
version
1.0.0-rc.5
lower_version
1.0.0-rc.5
created_unix
1789775319
is_internal
0
metadata_json
{"scope":"@juhai","name":&
{"scope":"@juhai","name":"governance","description":"基础设施层跨仓门禁(设计方案 §9):check:pins(exact pin 消费规则)、check:fixtures(契约正反例夹具)、verify:candidate(候选可晋级核验)、release:manifest(已知事实清单)、CI 模板;零依赖 CLI,供上层仓 exact pin 后在 CI 运行。","license":"UNLICENSED","bin":{"juhai-governance":"bin/cli.mjs"},"readme":"# @juhai/governance — 基础设施跨仓门禁\n\n设计方案 §4.2 / §9 定义的 `governance/` 交付:一组**零依赖**的构建期检查,随基础设施仓同一 Release 版本号发布到 Gitea npm registry(DEC-031),供上层仓 **exact pin** 后在 CI 运行(`check:pins` 为必需检查,DEC-031 附带条款 4)。\n\n## 命令(`juhai-governance \u003ccommand\u003e [--root \u003cdir\u003e]`)\n\n| 命令 | 用途 | 报告 | 退出码 |\n|---|---|---|---|\n| `check:pins [--require \u003cpkg\u003e]…` | 三层:`@juhai/*` 只允许 `x.y.z` / `workspace:*`;**对外发布包**(有 `publishConfig`)的第三方依赖同样只允许 `x.y.z`;其余第三方按 `pins-baseline.json` 的存量登记放行,登记外的新增必须 exact,登记项对应依赖消失则判红。`--require` 要求该包至少一处 exact pin(证明消费者已接入) | 无(stdout) | 1 = 有违规 |\n| `check:port-conformance` | 基础设施仓内独立端口测试:先构建 contracts/modules/clients,再跑 `runtime/test/port`;必须完整通过内核 14、模块 6、客户端 21 例,拒绝跳过与空跑 | `reports/port-conformance.latest.json` | 1 = 构建/测试/覆盖核验失败 |\n| `check:fixtures --suite \u003csuite.json\u003e… [--allow-unavailable-suite \u003cid\u003e]…` | 契约正反例夹具:校验套件配置后,ACCEPT 须零原因、REJECT 须有原因且含声明前缀;缺工作区默认失败,显式允许且有其他用例执行才可 partial | `reports/fixtures.latest.json` | 1 = 配置错误、空跑、不可用或用例不符 |\n| `verify:candidate --candidate \u003cdir\u003e --sha \u003csha\u003e …` | 候选可晋级核验(Q12-C / X12):逐份 required 报告核 sourceSha / dirty / 状态 / 地板 / digest,缺失即不合格 | `\u003cdir\u003e/release-candidate.json` 或 `--out` | 1 = 不合格 |\n| `release:manifest` | 已知事实清单,**逐项按磁盘判定**:`governance/package.json`、`runtime/clients/\u003cm\u003e/package.json`(name 须为 `@juhai/client-\u003cm\u003e`)、`reports/image-digest.json`(`sha256:` 且 `sourceSha` = HEAD)、compose 镜像是否 `@sha256:` 锁定、`reports/sbom.spdx.json`、`reports/signature.json`;任一缺失即 `status=partial` 并写明缺什么,不判定晋级 | `reports/release-manifest.latest.json` | 0 |\n| `ci:template [--out \u003cfile\u003e]` | 输出消费者最小 CI 模板(私包认证 + contracts/governance 必需 exact pin + 必需夹具) | — | 0 |\n| `check:modules` / `check:module-imports` / `check:catalog` / `catalog:drift` | 基础设施仓内部门禁(依赖 `runtime/modules.json` 与 `contracts/catalogs`) | `reports/*.latest.json` | 1 = 违规(drift 默认 0) |\n| `reports:rebind [--gates a,b] [--list] [--dry-run]` | **在 HEAD 的干净检出里重跑零依赖门禁并把报告带回**(偏差 #34-A 裁决实现)。`provenance.worktreeDirty` 由全仓 `git status` 算,而 `check:evidence` 按作用域判过期——口径不一致使得只要任何无关文件脏着就没法回绑任何报告;本工具不改判据,改为换个干净的地方生成。可行前提是 `governance/` 零依赖,临时检出**不需要 pnpm install**。作用域内有未提交输入的门禁会被跳过(否则等于用 HEAD 的结论覆盖当前工作区);目标报告自己在工作区未提交时也跳过(可能是并行会话的在途产物,覆盖即销毁,`--force` 才override);产出若不是「绑 HEAD 且 dirty=false」则拒绝带回。一个门禁可写多份报告(`workbench-snapshots` 两份快照),要么全带回要么一份不带,避免同源报告绑到不同提交。需要构建产物的 `check:fixtures` / `check:port-conformance` 与 runtime / contracts 的检查不在范围,须在装好依赖的检出里跑。 |\n| `check:migration-decs` | 仓纪律 3:`runtime/modules/*/prisma/migrations` 与 `identity/apps/*/prisma/migrations` 的 `migration.sql` 前 10 行须有 `-- decision: DEC-NNN` 且该 DEC 已批准;`state=shape` 模块不得有迁移;例外只能逐个迁移登记在 `migration-decs.exceptions.json`(条件失效判 `EXCEPTION_STALE`) | `reports/migration-decs.latest.json` | 1 = 违规 |\n| `check:facts [--candidates \u003cdir\u003e] [--report-only]` | §6.4:`modules.json` 声明的 Fact ⊆ `contracts/catalogs/facts.json` ∪ CHG-004 候选(候选须 `status: pending-dec` + `blocked_by`);候选目录不可用时报 `UNRESOLVED`(fail-closed)。**接入根 `pnpm check` 前置 CT-2 材料落地** | `reports/facts.latest.json` | 1 = 违规 / unresolved |\n| `check:caddy` | §5 / §7:`modules.json` 的 HTTP 契约经 `caddy-routes.json` 映射前缀后必须被 profiles 段登记的每份 Caddyfile(dev 基线 `stack/caddy/Caddyfile` + staging `Caddyfile.staging`)的 path 匹配器覆盖;tls=required 的 profile 另守 `TLS_DISABLED` / `TLS_HOST_MISSING` / `TLS_ISSUER_MISSING` / `HSTS_MISSING` / `PLAINTEXT_SITE_FORBIDDEN`(2026-09-16);`/healthz`、`X-Request-Id` 注入、`{$PLATFORM_API_UPSTREAM}` 必备;本机有 `caddy` 则 `caddy validate`,否则报告 `validate: skipped`(`CHECK_CADDY_DOCKER=1` 走 docker) | `reports/caddy.latest.json` | 1 = 违规 / 语法失败 |\n| `check:otel` | §5 / §15 采纳形态:`stack/otel/collector.yaml` 与登记真源 `otel-attributes.json` 逐项一致(三条 pipeline 的 processor、keep_keys allowlist、属性上限 / 时间有效性 / 产生端名单);2026-09-16 起另守告警规则——`stack/otel/prometheus.yaml` 的 `rule_files` 含登记 glob,`stack/otel/rules/*.yaml` 每条规则有 for / labels.severity / annotations.summary / annotations.runbook,expr 指标带选择器且在 alerts.metrics 登记(登记 = 有实测产生端;没有产生端的写 alerts.pending);本机有 `promtool` 则校验语法,`CHECK_OTEL_DOCKER=1` 用 compose 锁定的 prometheus 镜像跑,否则报告 `skipped` | `reports/otel.latest.json` | 1 = 违规 / promtool 失败 |\n| `check:evidence [--read-only] [--json]` | 检查报告绑定提交到 HEAD 的作用域差异,以及暂存、未暂存、删除、未跟踪输入。静态报告按 error 阻断,运行验收沿用登记的 warn;无关改动不影响。分别统计 fresh / stale / worktreeChanged / invalid / exempted,例外不计新鲜;存在 warn 或豁免时为 partial,退出 0 不代表完整验收。**未登记的报告也要逐条记账**(2026-09-18):`SCOPE_UNDECLARED` 是 info、不拦任何东西,于是「未登记」这一类可以无声增长,而它恰恰是本门禁完全看不见的那部分(当时 48 份报告里 13 份在此)。现由 `evidence-scopes.json` 的 `undeclared` 逐条写明 class / reason / recordedAt / resolveBy,五类取值 self / aggregate / provenance-missing / one-off-snapshot / no-generator;报告存在却既无作用域又无账 = `UNDECLARED_UNACCOUNTED` 判红,账指向的报告已登记或已消失 = `UNDECLARED_STALE` 判红,字段残缺或 class 非法 = `UNDECLARED_INCOMPLETE` 判红。记账**不是豁免**:no-generator 与 one-off-snapshot 的出口只有「补生成脚本后转正式登记」或「退役该报告」二选一。`--read-only` 不改报告,`--json` 只输出 JSON | `reports/evidence-freshness.latest.json`(只读模式不写) | 1 = error;0 = passed 或 partial,须读取 status / counts |\n| `check:gate-flow [--read-only] [--json]` | **每个门禁的失败信号有谁在看?**(2026-09-18 新增)治理层 2026-09-14 为自己建了 `门禁消费登记.json` 逐条回答这个问题,本仓一直没问过。实测根 `package.json` 44 个脚本里 12 个既不在 `pnpm check` 链、CI 也不调用,其中三个是真门禁——`image:smoke`(**CI 的 image job 构建镜像、生成 SBOM、签名,却从不启动它一次**,而开发计划把这六项冒烟写成 D-1 的退出条件)、`promotion:check`(事件驱动)、`check:deployed`(要 docker 与在跑的底座)。三个各有理由,但理由只散在 CLAUDE.md / README 的散文里、没有复核期。**消费关系一律自动推导,不接受声明**:从 `check` 链递归展开,再对两份 CI 工作流按脚本名与脚本里的 `.mjs` 路径现取(CI 有几处绕开 pnpm 直接 `node governance/…`)。`governance/gate-flow.json` 因此只装推不出来的那些,随接线逐条变少,也不能无声变多。F1 无人消费且未登记;F2 登记已腐烂(脚本没了 / 已被消费 / 重名);F3 流外门禁缺 reason 或 wireInWhen;F4 缺 `conditionReviewBy` 或已过期;F5 role 非法。F4 守日期不守条件——接入条件多半含人的判断,能机器化的只有「必须有人按期回来看一眼」。 | `reports/gate-flow.latest.json`(只读模式不写) | 1 = 有违规;0 = 通过 |\n| `check:ci-mirror [--read-only] [--json]` | **两条 CI 通道是不是真的同步**(2026-09-18 新增)。`CLAUDE.md` 与镜像文件自己的头注释都写着「`.gitea/workflows/platform.yml` 是 `.github` 版的镜像副本,只差四处,两份必须同步改」,而实测**没有任何东西在比对它们**。剥掉整行注释与空行、按 `governance/ci-mirror.json` 把镜像还原成主干形态之后,两份 461 行逐行相同——文件层面的差异恰好三类(镜像头注释块、artifact v3↔v4、一行 `GOV_REPORT_RUNNER`)。M1 声明之外的差异;M2 声明了却已不存在(声明不许腐烂);M3 声明缺 id 或 reason。只剥**整行**注释:行尾注释可能跟在真命令后面,剥掉会让门禁漏判。**值得有执行者的理由不是洁癖**:那行 `GOV_REPORT_RUNNER: gitea-actions` 是证据来源标注的唯一保证——act_runner 为兼容会设 `GITHUB_ACTIONS=true`,不显式覆盖,本通道产出的报告会把自己标成 github-actions 并被 `verify-candidate` 当作 CI 证据接受,一次漏同步就是一次冒充。**未决口径**见声明里的 `openDiscrepancy`:头注释宣称的差异③『fork 判定改用 `gitea.*` 上下文』**在文件里根本不存在**,两份的 fork 守卫逐字相同、全是 `github.*`;是声称做了没做还是当初判断错了,归 SRE / 框架 Owner,本门禁不替人裁决。 | `reports/ci-mirror.latest.json`(只读模式不写) | 1 = 有违规;0 = 通过 |\n| `check:deployed`(仓根脚本,不在发布 CLI 命令集) | 核对固定镜像源提交、当前 HEAD 的运行时输入、目标容器镜像及环境键。运行时有变更但镜像未构建、容器未换、无目标容器、缺源提交或脏镜像均阻断;仅治理/文档/报告变化无需重建。未提交运行时输入与缺环境键单列为 partial。默认只读,`--write-report` 才写报告;不接触业务数据 | 可选 `reports/deployed-runtime.latest.json` | 1 = 部署未满足;2 = Docker 不可用;0 = passed / partial |\n\n`catalog:drift --workspace-root \u003c工作区根\u003e` 支持独立检出指向真实工作区,也支持 `PLATFORM_CONTRACTS_WORKSPACE_ROOT`;显式路径无效时拒绝执行,自动探测不到时才保留 unknown。\n\nCatalog 对账分别处理实现状态与证据等级:`authority` 表示权威持久化实现,不自动要求或授予 E2;`candidate_e0` 可保留并记录待签收信息。只有模块明确声明 `e2` 时,才要求与 Catalog 的 `implemented_e2` 对账。不得为了消除差异自动升级 Catalog。\n\n所有报告带 `provenance`(`gitSha` / `worktreeDirty` / `runner` 原值 / `runnerNormalized` / `runId`);`worktreeDirty` 忽略 latest 报告本身。\n\nG-7 的 `port-conformance` job 保留同仓 PR 的私包认证约束,不访问数据库。每次执行使用新的临时 Vitest JSON;构建失败、测试失败或没有新报告时覆盖旧成功状态为 failed。三组逐文件地板在 `lib/port-conformance.mjs`,新增套件须同步更新覆盖清单。candidate 依赖该 job 成功,且十一份 required 报告中必须含同源码、干净工作树的端口报告;旧十份报告不能用于新版本候选。发布门禁沿用相同的源码必需报告策略。此门禁证明端口一致性,不提升模块 shape 状态。\n\n`verify:candidate` 在候选源码工作树的根目录运行:从 `runtime/reports/baseline.json` 与 `identity/reports/baseline.json` 读取最低测试数量,不能用 artifact 自报的较低地板代替。报告须为对象,验收计数与地板须为正整数,治理报告须含固定必需指标且为零;缺失、`null`、数组、标量和显式 `PARTIAL` 状态均不合格。旧治理报告没有 `status` 字段时仍按必需指标核验。指定 `--run-id` 或运行于 GitHub Actions 时要求每份报告为 CI runner;本地诊断保留 local 来源,不代表远端验收。独立调用纯函数 `evaluateCandidate` 时须显式传入 `{ baselines, requireCi, mainlineRequired }`;CLI 自动读取源码基线和 `runtime/modules.json`。\n\n### 持久化主线候选证据\n\n候选源码中的 fact / permission / audit 任一模块进入 `authority` 或 `e2` 后,必需报告从 11 份增加为 13 份,增加 `mainline-acceptance` 和 `revocation-sla`。模块登记缺失、损坏或状态非法时拒绝候选;不能由 artifact 自报关闭此要求。RC 发布入口读取相同源码策略,不接受只含旧 11 份报告的候选。\n\n主线报告须完整包含事实持久化 11、审计篡改 5、主线/撤权/混沌 11 项;各套件唯一,退出成功,无失败、pending 或 todo。撤权报告至少 20 个正数样本,按样本重算 p95/max 并比对摘要,要求 p95 \u003c 30 秒、max \u003c 60 秒。Grant 撤销通过而就业 Scope 仍待实现时,报告必须显式保持 `partial` 和未验证说明,候选结果保留这项覆盖边界;这不表示 MS-3、真实 HR/OS 接入或生产签收完成。\n\nruntime artifact 兼容旧单目录扁平上传,以及新增仓根报告后的目录结构。只在本次下载目录内读取固定的两种路径,不回退到仓内历史报告;同时发现两份时拒绝。源登记或目录读取失败也覆盖写入不合格候选,防止遗留成功报告。\n\n## 镜像、SBOM 与签名(开发计划 §3A D-1 / D-2;仓根脚本)\n\n| 脚本 | 作用 | 产物 |\n|---|---|---|\n| `pnpm image:build`(`governance/build-image.mjs`) | 用 `runtime/Dockerfile` 构建运行时镜像;默认 `--context head`(`git archive HEAD:runtime`,本机 WIP 不进镜像);私有 registry token 只经 `--secret id=npmrc,src=\u003cnpmrc\u003e`(默认 `~/.npmrc`,`--npmrc` 可指定)进入安装层,不进镜像、不打印 | `reports/image-digest.json`:`digest` = 本机 `--load` 的 image id(`digestKind` 说明;推送后换 registry manifest digest)、`sourceSha` / `worktreeDirty` / `dockerfileTracked` / 平台 / 大小 / 基础镜像 |\n| `pnpm image:sbom`(`governance/sbom.mjs`) | `syft` 或 `docker sbom` 生成完整 SPDX(OS + Node);两者都缺时退到 **lockfile 模式**:从镜像里 deploy 树的 pnpm lock 与工作区包生成只含 Node 依赖的 SPDX 2.3(`sbom.latest.json.scope` 标 partial,Debian 包不在内;完整 SBOM 由 CI image job 的 syft 产出);镜像不可用则退出 3 不写空文件 | `reports/sbom.spdx.json` + 元数据 `reports/sbom.latest.json`(tool / scope / sha256 / 包数) |\n| `pnpm image:sign`(`governance/sign-image.mjs`) | `cosign sign --key $COSIGN_KEY \u003cregistry ref@digest\u003e`;未推送 / 无密钥 / 无 cosign 时明确跳过、退出 0 | `reports/signature.json`(缺失即 Manifest `missing: signature`) |\n\n`release:manifest` 逐项按磁盘判定这三份产物;CI 的 `image` job 在 Secret 配置后产出同名 artifact(不推 registry)。\n\n## 环境晋级记录(开发计划 PF-23;DEC-024 A / DEC-026;仓根脚本)\n\n| 脚本 | 作用 | 产物 |\n|---|---|---|\n| `pnpm promotion:check -- --record \u003crecord.json\u003e [--manifest …] [--template …]`(`governance/check-promotion.mjs`) | 核验一份晋级记录:R1 形状(`stack/promotion/promotion-record.schema.json`)、R2 级序 dev→test→staging→prod(preview←candidate)、R3 同 digest(记录 = 候选 = Manifest 文件 `images.runtime.digest`,prod 禁止 rebuild 由此机器化)、R4 级别门槛(staging:eligible + SBOM + 签名或未过期 waiver;prod:Manifest complete + 签名 + 签收全闭)、R5 必需检查项、R6 审批角色 + 委派(initiator / approvals 的 `actorType`;数字员工须带未过期、TTL ≤ 24h、非自我委托的 delegation 引用——DEC-007 A,缺口 G-8)、R7 回滚演练 ≤ 600 s、R8 preview 上限、R9 签收项在模板内、R10 脏树 Manifest 禁晋级、R11 源提交交叉断言(记录 = Manifest = 制品 `images.runtime.sourceSha`,均 40 位;迁自统一交付平台 FULL_SOURCE_COMMIT_REQUIRED / ARTIFACT_SOURCE_MISMATCH,2026-09-16)、R12 迁移就绪(Manifest 有迁移目录时记录须带 `migrations` 段:expand_migrate_contract / ready / backwardCompatible / rollbackEvidence;迁自 MIGRATION_* 判定) | `reports/promotion.latest.json`(`verdict` APPROVED / APPROVED_WITH_PENDING_SIGNOFFS / REJECTED;REJECTED 退出 1) |\n\n记录模板 `stack/promotion/promotion-record.template.json`,签收模板 `stack/promotion/target-env-signoff.template.json`(P1—P9,取自 OS `target-env-signoff.json`);步骤见 [staging 晋级操作说明](../docs/staging晋级操作说明.md)。纯函数 `evaluatePromotion(record, { schema, manifest, template, today })` 可独立调用(`governance/test/promotion.test.mjs` 32 例)。\n\n## 消费方接入\n\n```bash\npnpm add -D @juhai/governance@1.0.0-rc.1 # exact pin;.npmrc 配 @juhai 作用域到 Gitea registry\npnpm exec juhai-governance ci:template --out .github/workflows/platform-governance.yml\npnpm exec juhai-governance check:pins --require @juhai/contracts --require @juhai/governance\npnpm exec juhai-governance check:fixtures --suite governance/fixtures/contracts.suite.json\n```\n\n夹具套件格式见 `check-fixtures.mjs` 头注;示例 `fixtures/contracts.suite.json`(正例取 `@juhai/contracts` 的 examples,反例故意破坏必填 / 类型 / 血缘字段)。消费者须在自己仓内建立 `governance/fixtures/contracts.suite.json`,按实际安装位置调整 schema / inputFile 路径;模板不再跳过缺失文件。\n\n套件必须有非空且不重复的 id / case id、合法 expect、已声明 schema,以及 input / inputFile 二选一。空套件、缺失 schema、损坏的本地引用、文件读取/解析/模块加载错误会生成 failed 报告并退出 1,覆盖旧的成功报告;规则必须显式返回原因数组,DEC-039 适配器的失败结论不能被重新判为成功。JSON Schema 校验仍是头注声明的子集,不代表完整元 Schema 校验或支持所有关键字。\n\n根 `pnpm check:fixtures` 先构建运行时模块,再显式带 `--allow-unavailable-suite dec-039-party-model`,仅容许独立克隆缺少企业应用工作区时跳过 DEC-039 外部套件,报告 status=partial、保留 unavailable 计数;contracts 与六个模块套件仍必须执行,缺失模块构建产物不会被该豁免放过。全部套件不可用、配置错误和真实用例失败仍阻断。消费者模板使用默认严格模式。`--allow-unavailable` 保留为显式允许所有不可用套件的诊断开关,不用于本仓根门禁。以上增强为仓内新源码,已发布的 `1.0.0-rc.0` 保持不变,本仓已准备 `1.0.0-rc.1`,实际发布及 Registry 安装状态见发布记录。\n\n## 本仓内\n\n`pnpm check`(仓根)已串联:`check:pins` → `check:modules` → `check:module-imports` → `check:catalog` → `catalog:drift` → `check:fixtures` → `check:facts` → `check:migration-decs` → `check:caddy` → governance 测试 → contracts → runtime 静态门禁 → `check:evidence`(放链尾:前面各检查已把自己的报告重绑到当前 HEAD,此时剩下的过期项才是真的没人重跑)。`pnpm check:port-conformance` 独立运行真实端口测试,CI 单独生产证据。`.github/CODEOWNERS` 仍为角色占位,不能把覆盖测试通过解释为真实团队审批已生效。发布走 DEC-031 的固定源码 RC 通道;已发布版本不覆盖,新包代码须使用后续新 RC 版本。\n","repository":{"type":"","url":""}}
...
download_count
0
Delete
Cancel