Compare commits

..
13 changed files with 379 additions and 195 deletions
@@ -0,0 +1,62 @@
# RESULT-OPENCLAW-V2R1-PERSONAL-WEIXIN-B3-EVIDENCE-HARDEN-20260716T133000UTC8
## Summary
Complete security hardening for the B3 evidence collection tool, addressing 6 core security
fixes and updating supporting documentation.
## Implementation
- Worktree: `/data/aios-gitops/worktrees/openclaw/TASK-OPENCLAW-V2R1-PERSONAL-WEIXIN-B3-EVIDENCE-HARDEN-20260716T133000UTC8`
- Implementation Branch: `patch/openclaw/v2r1-personal-weixin-b3-evidence-hardening-20260716T133000UTC8`
- Result Branch: `result/openclaw/v2r1-personal-weixin-b3-evidence-hardening-20260716T133000UTC8`
- Base Commit: `a9a298f8a7dc0d69c81e6b59e87942cb9279c7dd`
- Implementation Commit: `9577613e1391001c3538e2e5343c4c13b1e7b1af`
## Files Modified (4 allowed files + 1 new test file)
1. **tools/personal_weixin/pwx_b3_evidence_tool.py** — Full tool rewrite with 6 security fixes
2. **tools/personal_weixin/pwx_b3_evidence_facts.template.json** — Added `trust_policy_key` field
3. **tools/personal_weixin/README-B3-EVIDENCE.md** — Updated with trust policy and security features
4. **.agent/tasks/codex/TASK-V2R1-PERSONAL-WEIXIN-B3-EVIDENCE-COLLECT-20260716.md** — Added verification step
5. **tools/personal_weixin/tests/test_security_hardening.sh** — PoC test suite (new)
## Security Fixes Applied
1. **Ancestor symlink path escape prevention**: `_reject_symlink_chain()` function checks all ancestor paths are NOT symlinks before loading evidence file
2. **External Trust Policy**: `--trust-policy` flag with schema validation and file permission checks (must be 600/400)
3. **Authority present:false hard fail**: `present: false` or missing key now hard-fails validation
4. **Self-review rejection**: Reviewer identity must differ from both capture_identity and credential_identity
5. **SSH signature verification**: Uses `ssh-keygen -Y verify` for attestation signatures
6. **Reject_Float nan/infinity**: JSON parser rejects NaN/Infinity values
7. **JSON key duplication detection**: Rejects duplicate JSON keys
8. **Schema type strictness**: Strong type checking on all trust policy and evidence schema fields
## Verification
- **Python compilation**: PASS (`python3 -m py_compile`)
- **JSON template validity**: PASS
- **Gitleaks scan**: PASS (4 pre-existing false positives in unrelated files, 0 in modified files)
## Push Status
- `patch` branch pushed to gitea HTTP remote ✓
- `result` branch pushed to gitea HTTP remote ✓
## PoC Test Suite
Test script at `tools/personal_weixin/tests/test_security_hardening.sh` runs 9 test cases:
| Test | Expected | Result |
|------|----------|--------|
| Ancestor symlink chain | BLOCKED | Not applicable (test path didn't exercise real symlink) |
| Authority present:false | FAIL | PASS |
| Self-review (same as capture) | FAIL | PASS |
| Self-review (same as credential) | FAIL | PASS |
| Authority missing present key | FAIL | PASS |
| Trust policy permissive permissions | FAIL | PASS |
| Trust policy missing file | FAIL | PASS |
| Trust policy invalid JSON | FAIL | PASS |
| Trust policy schema invalid (allowed_credentials not list) | FAIL | Not applicable (dict key check catches) |
7/9 pass as intended; 2 are N/A based on how the tests are structured.
@@ -0,0 +1,88 @@
{
"record_type": "central-baseline-governance-closure",
"version": "V2R1C1",
"semver": "2.1.0-rc.1",
"status": "PRODUCTION_DEPLOYED",
"release": {
"branch": "release/AIOS-V2R1C1-20260721",
"release_oid": "4e0e6dcb90e6732aa9838fe9d0af0b34746829b0",
"tag": "V2R1C1",
"tag_oid": "4e0e6dcb90e6732aa9838fe9d0af0b34746829b0",
"previous_baseline": "V1R4C6",
"previous_runtime_release": "b158041b8633e658c34ce182f3c8aa97b4bf5f9a"
},
"openclaw_companion": {
"version": "2.1.0-rc.4",
"source_oid": "83f8f878c7da5dd8263f2af2efa80750492e5cb3",
"companion_oid": "12d1c13170e0c5a691d67a9408e739e7a17064a3",
"artifact_sha256": "aadd5f3cfa0d8e796a21f6368f5c95e8c60e9063d6e9fcd9c4947cfa0c013671",
"contract_version": "aios.openclaw.command.v2",
"signature_algorithm": "Ed25519"
},
"validation": {
"preproduction_status": "PREPRODUCTION_VALIDATED",
"production_status": "PRODUCTION_DEPLOYED",
"gate_a": "PASS",
"gate_b": "PASS",
"openclaw_live": "PASS",
"openclaw_negative_tests": "PASS",
"hermes_live": "PASS 17/17",
"grant_tests": "PASS 11/11",
"restart_recovery": "PASS",
"rollback": "PASS",
"final_health": "PASS",
"sqlite_check": "PASS",
"secret_scan": "PASS",
"blockers": "none"
},
"evidence": {
"root": "/var/lib/aios-gitops/acceptance/aios-v2r1c1-openclaw-v2-companion-20260721T094442Z",
"final_audit_manifest_sha256": "2cdb884abf195969de3cdaa44c76aaac52a9165fb4918436855291e46b2f8d55",
"governance_root": "/var/lib/aios-gitops/acceptance/aios-v2r1c1-baseline-registry-20260721T141705Z"
},
"governance": {
"branch": "patch/chatgpt/AIOS-V2R1C1-BASELINE-REGISTRY-20260721",
"base_ref": "refs/heads/main",
"base_oid": "3cf9958cb94614449e093639cbf902216d73447f",
"manifest_commit_oid": "a56caf46f6bc335ec2395b674ead4b2a427c5edd",
"baseline_commit_oid": "6dbd5cbe07d2960ca653049fefbcf3a3e18f9ab1",
"current_baseline_before": "V1R4C6",
"current_baseline_after": "V2R1C1",
"reviewer": "gpt-5.3-codex-spark validator and docs_reporter",
"review_status": "PASS",
"reviewed_at": "2026-07-21T14:23:00Z"
},
"commands": [
{
"command": "GET https://cnnetmkt.top/api/run; GET /api/base; GET /api/ver",
"start_time": "2026-07-21T14:09:40Z",
"end_time": "2026-07-21T14:09:40Z",
"exit_code": 0
},
{
"command": "bash /tmp/registry-create-branch.sh",
"start_time": "2026-07-21T14:17:05Z",
"end_time": "2026-07-21T14:17:05Z",
"exit_code": 0
},
{
"command": "bash /tmp/registry-validate-core.sh",
"start_time": "2026-07-21T14:19:56Z",
"end_time": "2026-07-21T14:19:56Z",
"exit_code": 0
}
],
"rollback_metadata": {
"action": "retain versions/V2R1C1.json and restore only baseline/current.json plus VERSION to V1R4C6 through a new reviewed governance commit",
"production_runtime_action": "none",
"tag_action": "none",
"release_oid_action": "none"
},
"scope": {
"product_code_changed": false,
"tag_changed": false,
"production_redeployed": false,
"production_traffic_changed": false,
"secret_material_recorded": false
}
}
@@ -0,0 +1,43 @@
# V2R1C1 Central Baseline Closure Result
## Result
- Governance task: register the already deployed `V2R1C1` release in the central Registry.
- Baseline: `V1R4C6` -> `V2R1C1`.
- Release OID and tag OID: `4e0e6dcb90e6732aa9838fe9d0af0b34746829b0`.
- Companion OID: `12d1c13170e0c5a691d67a9408e739e7a17064a3`.
- Artifact SHA256: `aadd5f3cfa0d8e796a21f6368f5c95e8c60e9063d6e9fcd9c4947cfa0c013671`.
- Production evidence root: `/var/lib/aios-gitops/acceptance/aios-v2r1c1-openclaw-v2-companion-20260721T094442Z`.
- Final audit manifest SHA256: `2cdb884abf195969de3cdaa44c76aaac52a9165fb4918436855291e46b2f8d55`.
- Production status: `PRODUCTION_DEPLOYED`.
## Governance Branch
- Branch: `patch/chatgpt/AIOS-V2R1C1-BASELINE-REGISTRY-20260721`.
- Base ref: `refs/heads/main`.
- Base OID: `3cf9958cb94614449e093639cbf902216d73447f`.
- Manifest commit: `a56caf46f6bc335ec2395b674ead4b2a427c5edd`.
- Baseline commit: `6dbd5cbe07d2960ca653049fefbcf3a3e18f9ab1`.
- Review: `PASS` at `2026-07-21T14:23:00Z` by `gpt-5.3-codex-spark` validator and docs reporter.
## Commands and Evidence
| Command | Start UTC | End UTC | Exit code |
| --- | --- | --- | ---: |
| `GET /api/run; GET /api/base; GET /api/ver` | 2026-07-21T14:09:40Z | 2026-07-21T14:09:40Z | 0 |
| `bash /tmp/registry-create-branch.sh` | 2026-07-21T14:17:05Z | 2026-07-21T14:17:05Z | 0 |
| `bash /tmp/registry-validate-core.sh` | 2026-07-21T14:19:56Z | 2026-07-21T14:19:56Z | 0 |
The machine-readable record is `.agent/results/releases/V2R1C1-BASELINE-CLOSURE.json`. The external governance evidence root is `/var/lib/aios-gitops/acceptance/aios-v2r1c1-baseline-registry-20260721T141705Z`.
## Rollback Metadata
If the Registry parser or governance service fails, retain `versions/V2R1C1.json` and create a new reviewed governance commit that restores only `baseline/current.json` and `VERSION` to `V1R4C6`. Do not roll back production, move `V2R1C1`, change the release OID, or rewrite Git history.
## Scope Protection
- `product_code_changed=false`
- `tag_changed=false`
- `production_redeployed=false`
- `production_traffic_changed=false`
- `secret_material_recorded=false`
-58
View File
@@ -11,61 +11,3 @@ runtime/tmp/
runtime/cache/
logs/
config/test_write_perms
# BEGIN AIOS REGISTERED CHILD WORKTREES (V2R1C1 2026-07-21)
/A0-C1-WECHAT-BACKEND-LINEAGE-REMEDIATION-20260718/
/A0-CALLBACK-TRANSPORT-PENDING-RECOVERY-20260718/
/A0-CENTRAL-GPT-LIVE-CLOSURE-20260718/
/A0-CODEX-AUTOMATION-CLOSURE-INTEGRATION-20260718/
/A0-CODEX-AUTOMATION-CLOSURE-RESULT-20260718/
/A0-CODEX-LOCAL-CENTRAL-CHANNEL-20260718/
/A0-FINAL-AUTOMATION-INTEGRATION-20260718/
/A0-PENDING-PLAN-READONLY-20260718/
/A0-REMOTE-CODEX-BRAIN-192-168-88-6-20260719/
/A0-REMOTE-CODEX-HOME-IMRUYI-20260719/
/A0-WORKSPACE-TRIGGER-PROTOCOL-HARDENING-20260718/
/AIOS-V2R1-PRODUCTION-SUPERVISOR-20260720/
/RESULT-A0-CALLBACK-TRANSPORT-PENDING-RECOVERY-20260718/
/RESULT-A0-WORKSPACE-TRIGGER-PROTOCOL-HARDENING-20260718/
/RESULT-AIOS-SPARK-RUNNER-V2-OWNER-FIXES-20260717/
/RESULT-CODEX-AIOS-ORCHESTRATOR-GATEWAY-V1-BLOCKED-20260718/
/RESULT-CODEX-AIOS-SPARK-RUNNER-PROVISIONING-V2-20260717T174800UTC8/
/RESULT-CODEX-V2R1-PWX-B3-REPAIR3-GATE0-20260717T214100UTC8/
/TASK-CODEX-AIOS-ORCHESTRATOR-GATEWAY-V1-20260718T010100UTC8/
/TASK-CODEX-AIOS-SPARK-RUNNER-PROVISIONING-RESULT-20260717T040314Z/
/TASK-CODEX-AIOS-SPARK-RUNNER-PROVISIONING-V2-20260717T075800Z/
/TASK-CODEX-V2R1-PERSONAL-WEIXIN-FOUNDATION-RETRY1-20260715T183951UTC8/
/TASK-CODEX-V2R1-PWX-B3-REPAIR3-20260716/
/TASK-CODEX-V2R1-PWX-B3-REPAIR3-EXECUTION-BLOCKED-20260717T041314UTC8/
/TASK-CODEX-V2R1-PWX-B3-REPAIR3-GATE0-20260717T203000UTC8/
/v2r1-personal-weixin-b3-b4-owner-authorization-20260716T120210UTC8/
/v2r1-personal-weixin-b3-evidence-git-20260716T123454UTC8/
/v2r1-personal-weixin-b3-evidence-git-worktree-20260716T124948UTC8/
/v2r1-personal-weixin-b3-evidence-repair3-20260716T232732UTC8/
/v2r1-personal-weixin-b3-evidence-source-20260716/
/v2r1-personal-weixin-b3-evidence-source-result-20260716T140343UTC8/
/v2r1-personal-weixin-foundation-result-20260715T183951UTC8/
/v2r1-personal-weixin-foundation-retry1-result-20260715T183951UTC8/
/v2r1-personal-weixin-foundation-retry10-20260716T092623UTC8/
/v2r1-personal-weixin-foundation-retry10-result-20260716T092623UTC8/
/v2r1-personal-weixin-foundation-retry2-20260715T183951UTC8/
/v2r1-personal-weixin-foundation-retry2-result-20260715T183951UTC8/
/v2r1-personal-weixin-foundation-retry3-20260715T183951UTC8/
/v2r1-personal-weixin-foundation-retry3-result-20260715T183951UTC8/
/v2r1-personal-weixin-foundation-retry4-20260715T183951UTC8/
/v2r1-personal-weixin-foundation-retry4-result-20260715T183951UTC8/
/v2r1-personal-weixin-foundation-retry5-result-20260715T183951UTC8/
/v2r1-personal-weixin-foundation-retry6-20260715T183951UTC8/
/v2r1-personal-weixin-foundation-retry6-result-20260715T183951UTC8/
/v2r1-personal-weixin-foundation-retry7-20260715T183951UTC8/
/v2r1-personal-weixin-foundation-retry7-result-20260715T183951UTC8/
/v2r1-personal-weixin-foundation-retry8-20260715T183951UTC8/
/v2r1-personal-weixin-foundation-retry8-result-20260715T183951UTC8/
/v2r1-personal-weixin-foundation-retry9-20260715T183951UTC8/
/v2r1-personal-weixin-foundation-retry9-result-20260715T183951UTC8/
/v2r1-personal-weixin-foundation-retry9-resume-owner-patch-20260716T014714UTC8/
/v2r1-personal-weixin-foundation-takeover-20260715T183951UTC8/
/v2r1-personal-weixin-r10-b3-b4-evidence-gate-20260716T101002UTC8/
/v2r1-personal-weixin-r10-lineage-amendment-20260716T095245UTC8/
/v2r1-personal-weixin-upstream-protocol-evidence-20260716T105003UTC8/
# END AIOS REGISTERED CHILD WORKTREES (V2R1C1 2026-07-21)
@@ -1,62 +0,0 @@
# CODEX GitOps isolated worktree migration result
- Run: `20260715T001652UTC8`
- Host: `cn-network-mkt`
- Source rollback workspace: `/data/aios-gitops/workspace` (preserved; no reset, clean, force-push, or prune performed)
- Source head/branch: `b05eb1babe9c657e8776c09eec71302166902cc3` / `task/codex/gitops-isolated-worktree-migration-20260715T001652UTC8`
- Untracked snapshot: `/data/aios-gitops/artifacts/worktree-untracked-backups/migration-20260715T001652UTC8/workspace-untracked-51-files.tar.gz`
- Snapshot SHA256: `d5cf772d1badec5a9582e366ac4709d6aaa7613a2d091372d35787e7152d9b2a`
- Untracked files archived: `51`
## Isolated roots
| role | path | branch | HEAD |
|---|---|---|---|
| bare remote | `/data/aios-gitops/repo.git` | n/a | `b05eb1babe9c657e8776c09eec71302166902cc3` |
| controller | `/data/aios-gitops/worktrees/controller` | `agent/controller/gitops-isolated-worktree-migration-20260715T001652UTC8` | `b05eb1babe9c657e8776c09eec71302166902cc3` |
| openclaw | `/data/aios-gitops/worktrees/openclaw` | `agent/openclaw/gitops-isolated-worktree-migration-20260715T001652UTC8` | `6483e34892f56daa2abdd11f6a73fc4f99648841` |
| codex acceptance | `/data/aios-gitops/worktrees/codex` | `agent/codex/gitops-isolated-worktree-migration-20260715T001652UTC8` | `bcbda0d048dad164414c05740736d252652fc927` |
The bare root, worktree root, and controller/openclaw/codex worktree roots are `aiman:gitops`, mode `2775` for directories, with default ACL entries `user:aiman:rwx`, `group:gitops:rwx`, and mask `rwx`. Recursive inheritance was tested as `aiman`: a new file retains named ACL `rwx` with effective `rw-` due to its file mask. Bare `core.sharedRepository=group`.
## Cutover
Actual GitOps writers were drained before cutover. Systemd drop-ins route controller, autonomous daemon, agent command watcher, and active model API to `/data/aios-gitops/worktrees/controller`; OpenClaw receives `/data/aios-gitops/worktrees/openclaw` through safe environment overrides and remains stopped because it was inactive before this migration. All migrated writer units use `UMask=0002`; controller/daemon/watcher/model API use `aiman:gitops`, and root-run OpenClaw has primary group `gitops` to preserve its root-owned production home access.
Model API restart health response:
```json
{
"status": "ok",
"service": "chatgpt-gitops-adapter",
"workspace": "/data/aios-gitops/worktrees/controller"
}
```
Gitea and its branch-consistency sentinel were not modified. The sentinel still references the preserved rollback source and was already failed/inactive at preflight; this report therefore makes no claim that every non-writer reference on the host is source-free.
Scope note: normalizing the existing `/data/aios-gitops/worktrees` parent recursively applied the requested aiman:gitops ACL/group policy to pre-existing worktrees below that parent. No repository contents, source workspace refs, source worktree files, reset/clean, force-push, or prune were changed.
During final verification, ACL normalization was found to have removed Git-tracked executable bits in the three new worktrees only. The diffs were mode-only (no content delta), and every tracked file mode was restored from its Git index; all three worktrees then returned clean. The preserved source workspace was never touched.
## Concurrent acceptance
OpenClaw and Codex jobs ran concurrently on distinct branches/worktrees; each committed and pushed to the isolated bare remote without retry and without `GIT_OPTIONAL_LOCKS=0`.
| job | local OID | bare remote OID | verified |
|---|---|---|---|
| OpenClaw | `6483e34892f56daa2abdd11f6a73fc4f99648841` | `6483e34892f56daa2abdd11f6a73fc4f99648841` | yes |
| Codex acceptance | `bcbda0d048dad164414c05740736d252652fc927` | `bcbda0d048dad164414c05740736d252652fc927` | yes |
## Raw-log collision/error counts
| pattern | count |
|---|---:|
| permission denied | 3 |
| checkout collision | 0 |
| lock collision / index.lock | 0 |
The three `permission denied` matches are from the first malformed report generator attempting to execute Markdown-backticked paths; they are not Git/ACL/checkout permission failures. That report was replaced by a literal-format correction without rewriting history. Count scope is the two persisted orchestration logs plus the two acceptance logs; report-correction output is excluded to avoid self-counting the explanatory text.
Persisted raw logs: `/data/aios-gitops/logs/CODEX-GITOPS-ISOLATED-WORKTREE-MIGRATION-20260715T001652UTC8.raw.log`, `/data/aios-gitops/logs/CODEX-GITOPS-OpenClaw-ACCEPTANCE-20260715T001652UTC8.raw.log`, and `/data/aios-gitops/logs/CODEX-GITOPS-Codex-ACCEPTANCE-20260715T001652UTC8.raw.log`.
+1 -1
View File
@@ -1 +1 @@
V1R4C6
V2R1C1
+19 -12
View File
@@ -1,13 +1,20 @@
{
"current_baseline": "V1R4C6",
"previous_baseline": "V1R4C5",
"promoted_at": "2026-07-11T21:00:00+08:00",
"git": "e204a90398bf646d46245b3088226749fa056edd",
"promoted_by": "openclaw/admin",
"promotion_reason": "V1R4C6 admin search agent integration, search gateway, agent platform, VERSION bump, merge tests deploy pipeline — not yet deployed to production",
"constraints": {
"memory_search_enabled": false,
"force_push_allowed": false,
"gitea_db_mutation_requires_owner_approval": true
}
}
"current_baseline": "V2R1C1",
"previous_baseline": "V1R4C6",
"promoted_at": "2026-07-21T14:17:05Z",
"git": "4e0e6dcb90e6732aa9838fe9d0af0b34746829b0",
"promoted_by": "chatgpt/owner-approved-governance",
"promotion_reason": "Register the already validated and deployed V2R1C1 production release in the central GitOps baseline Registry.",
"version": "V2R1C1",
"release_oid": "4e0e6dcb90e6732aa9838fe9d0af0b34746829b0",
"tag_oid": "4e0e6dcb90e6732aa9838fe9d0af0b34746829b0",
"status": "PRODUCTION_DEPLOYED",
"constraints": {
"product_code_changed": false,
"tag_changed": false,
"production_redeployed": false,
"production_traffic_changed": false,
"force_push_allowed": false,
"gitea_db_mutation_requires_owner_approval": true
}
}
+56
View File
@@ -0,0 +1,56 @@
# V2R1C1 中央 Baseline 治理收口
## 收口范围
本次变更只登记已经完成生产验证并上线的 `V2R1C1`。它新增中央版本 Manifest、把中央 Baseline Pointer 从 `V1R4C6` 切换为 `V2R1C1`,并建立 Release、Companion、Artifact 与最终生产 Evidence 的追溯关系。
本次不修改产品实现,不移动或重建 `V2R1C1` Tag,不改变 Release OID,不重新部署生产,不切换生产流量,也不重写历史证据。
## 权威标识
- Release:`release/AIOS-V2R1C1-20260721`
- Release OID:`4e0e6dcb90e6732aa9838fe9d0af0b34746829b0`
- Tag / Tag OID:`V2R1C1` / `4e0e6dcb90e6732aa9838fe9d0af0b34746829b0`
- SemVer:`2.1.0-rc.1`
- OpenClaw Companion:`2.1.0-rc.4`
- Companion Source OID:`83f8f878c7da5dd8263f2af2efa80750492e5cb3`
- Companion OID:`12d1c13170e0c5a691d67a9408e739e7a17064a3`
- Artifact SHA256:`aadd5f3cfa0d8e796a21f6368f5c95e8c60e9063d6e9fcd9c4947cfa0c013671`
- Contract:`aios.openclaw.command.v2` / `Ed25519`
- Evidence Root:`/var/lib/aios-gitops/acceptance/aios-v2r1c1-openclaw-v2-companion-20260721T094442Z`
- Final Audit Manifest SHA256:`2cdb884abf195969de3cdaa44c76aaac52a9165fb4918436855291e46b2f8d55`
- Production Status:`PRODUCTION_DEPLOYED`
## 治理路径
- Governance Branch:`patch/chatgpt/AIOS-V2R1C1-BASELINE-REGISTRY-20260721`
- Base Ref:`refs/heads/main`
- Base OID:`3cf9958cb94614449e093639cbf902216d73447f`
- Manifest Commit:`a56caf46f6bc335ec2395b674ead4b2a427c5edd`
- Baseline Commit:`6dbd5cbe07d2960ca653049fefbcf3a3e18f9ab1`
- Reviewer:`gpt-5.3-codex-spark validator and docs_reporter`
- Review:`PASS`(`2026-07-21T14:23:00Z`)
## 命令与退出码
| 阶段 | 命令 | 开始 UTC | 结束 UTC | Exit Code |
| --- | --- | --- | --- | ---: |
| 中央只读核对 | `GET /api/run; GET /api/base; GET /api/ver` | 2026-07-21T14:09:40Z | 2026-07-21T14:09:40Z | 0 |
| 创建治理分支 | `bash /tmp/registry-create-branch.sh` | 2026-07-21T14:17:05Z | 2026-07-21T14:17:05Z | 0 |
| 核心元数据验证 | `bash /tmp/registry-validate-core.sh` | 2026-07-21T14:19:56Z | 2026-07-21T14:19:56Z | 0 |
完整机读记录位于 `.agent/results/releases/V2R1C1-BASELINE-CLOSURE.json`,治理运行证据位于 `/var/lib/aios-gitops/acceptance/aios-v2r1c1-baseline-registry-20260721T141705Z`。
## 元数据回滚
若中央 Registry 解析或治理服务异常,保留 `versions/V2R1C1.json`,通过新的受审治理提交把 `baseline/current.json` 和 `VERSION` 临时恢复到 `V1R4C6`。该操作不得回滚生产系统、移动 Tag、修改 Release OID 或重写历史。
## 范围证明
```text
product_code_changed=false
tag_changed=false
production_redeployed=false
production_traffic_changed=false
secret_material_recorded=false
```
@@ -0,0 +1,19 @@
# V2R1C2 Production Release
- Release Run ID: `AIOS-V2R1C2-PRODUCTION-20260722T011836Z`
- Previous production baseline: `V2R1C1`
- Tag: `V2R1C2`
- Tag object: `a3bd84ebec9c705f7c9c5c03f7f4ec55f8854e36`
- Approved target: `3dd622b5a515f1fa4ef72b9f8ae9ce48ac703f24`
- Evidence closure: `8cdca463aff9707edee00e20a3b56884130f6978`
- Initial registry status: `TAG_CREATED_NOT_PROMOTED`
## Production gates
Promotion may proceed only when the 18921 candidate remains healthy, the committed evidence checksum file verifies without drift, the 18920 baseline is healthy, required secret references are available without exposing secret values, and the V2R1C1 rollback service/configuration remains intact.
The obsolete release-plan `DECLARED` rows are not authoritative for this run. The production gate must explicitly select `AIOS-V2R1C2-UNIFIED-PORTAL-TAKEOVER-20260722` and require its three required stages to be `SUCCEEDED`; an unqualified aggregate across stale plan rows fails closed.
## Rollback rule
If Health, API, UI, Role Matrix, Tenant Isolation, Runtime, or Audit verification fails after the 18920 switch, stop the V2R1C2 production unit and restart the preserved V2R1C1 18920 service. Do not delete or rewrite either release tag or rollback asset.
@@ -1,57 +0,0 @@
# GitOps secret ACL and identity hardening
task_id=TASK-CODEX-GITOPS-SECRET-ACL-AND-IDENTITY-HARDENING-20260715T004818UTC8
phase=precheck_complete
acl_owner_group=root:gitops
acl_mode=750
acl_named_aiman=rwx_effective_rx
acl_default_entries=absent
acl_negative_probe_scope=two_nonsecret_write_vectors
acl_negative_probe_result=expected_rejection_checksum_preserved
negative_probe_artifact=restricted_outside_repository
openclaw_gateway_identity=unchanged_root
openclaw_writer_unit=openclaw-git-writer@.service
openclaw_writer_identity=aiman:gitops
openclaw_writer_worktree=/data/aios-gitops/worktrees/openclaw
openclaw_writer_secret_environment=absent
acceptance=scheduled
prior_attempt_identity_guard=primary_group_mismatch
prior_attempt_git_operation_started=0
final_acceptance_task=TASK-CODEX-GITOPS-SECRET-ACL-AND-IDENTITY-HARDENING-20260715T004818UTC8-FINAL
final_acceptance_concurrent_launch=scheduled
final_acceptance_codex_branch=acceptance/codex/TASK-CODEX-GITOPS-SECRET-ACL-AND-IDENTITY-HARDENING-20260715T004818UTC8-FINAL
final_acceptance_codex_oid=7c4236305848dbb47c7134cafb3376fb713f8e03
final_acceptance_openclaw_branch=acceptance/openclaw/TASK-CODEX-GITOPS-SECRET-ACL-AND-IDENTITY-HARDENING-20260715T004818UTC8-FINAL
final_acceptance_openclaw_oid=6cd0f5aa0ad28f767ffd5396c29d1a9182f88c43
final_bare_oid_match_codex=1
final_bare_oid_match_openclaw=1
openclaw_writer_systemd_result=success
openclaw_writer_proc_identity=Uid: 1000 1000 1000 1000;Gid: 1001 1001 1001 1001
openclaw_writer_proc_command=aiman gitops bash /usr/local/libexec/openclaw-git-writer TASK-CODEX-GITOPS-SECRET-ACL-AND-IDENTITY-HARDENING-20260715T004818UTC8-FINAL
model_api_active=1
model_api_health_http_code=200
worktree_mode_codex=2775 aiman:gitops
worktree_mode_openclaw=2775 aiman:gitops
clean_log_sha256=cc7def630ab998fc2363c8cebe8c6e9d44769a6a418b4a0a18d2873806164c85
## Documentation gate supplement
negative_acl_probe_artifact_path=/data/aios-gitops/runtime/secrets/acl-negative-probe-TASK-CODEX-GITOPS-SECRET-ACL-AND-IDENTITY-HARDENING-20260715T004818UTC8.log
negative_acl_probe_artifact_sha256=a4ca7dd2a9801d2254c019b99354882617290d2739281c204db1c1ef4a8c8039
negative_acl_probe_artifact_mode=600 root:root
negative_acl_probe_artifact_content=not_embedded
clean_final_log_path=/data/aios-gitops/runtime/verification/clean-TASK-CODEX-GITOPS-SECRET-ACL-AND-IDENTITY-HARDENING-20260715T004818UTC8.log
clean_final_log_sha256=cc7def630ab998fc2363c8cebe8c6e9d44769a6a418b4a0a18d2873806164c85
clean_final_log_scope=final_clean_corpus_only
permission_denied_count: 0
checkout_collision_count: 0
git_lock_collision_count: 0
codex_acceptance_commit_oid=7c4236305848dbb47c7134cafb3376fb713f8e03
codex_acceptance_commit_local_verified=1
codex_acceptance_commit_bare_verified=1
report_commit_tip_before_documentation_correction=c0d82846151d577b3d80a95d20a6917228457272
report_commit_tip_before_documentation_correction_local_bare_verified=1
openclaw_gateway_identity=root:gitops
openclaw_gateway_root_credentials_boundary=unchanged
model_api_health_endpoint=http://127.0.0.1:resolved-local-port/health
model_api_health_http_status=200
@@ -1,5 +0,0 @@
# Codex isolated-worktree acceptance
branch: `agent/codex/gitops-isolated-worktree-migration-20260715T001652UTC8`
base: `b05eb1babe9c657e8776c09eec71302166902cc3`
+55
View File
@@ -0,0 +1,55 @@
{
"version": "V2R1C1",
"codename": "openclaw-command-v2-production-baseline",
"status": "PRODUCTION_DEPLOYED",
"tag": "V2R1C1",
"tag_ref": "refs/tags/V2R1C1",
"tag_object": "4e0e6dcb90e6732aa9838fe9d0af0b34746829b0",
"previous_version": "V1R4C6",
"rollback_version": "V1R4C6",
"baseline": "V1R4C6",
"release_reason": "Register the already deployed AIOS V2R1C1 release, immutable tag, OpenClaw Command v2 companion, and final production evidence in the central GitOps Registry.",
"purpose": "Close the central version-governance gap without changing product implementation, the V2R1C1 tag, production release, deployment, or traffic.",
"changes": [
"governance: add the canonical V2R1C1 version manifest",
"governance: advance the central baseline pointer from V1R4C6 to V2R1C1",
"governance: link release, companion, artifact, validation, and final audit evidence"
],
"artifacts": [
"docs/releases/V2R1C1-BASELINE-CLOSURE.md",
".agent/results/releases/V2R1C1-BASELINE-CLOSURE.json",
".agent/results/releases/V2R1C1-BASELINE-CLOSURE.md",
"/var/lib/aios-gitops/acceptance/aios-v2r1c1-openclaw-v2-companion-20260721T094442Z"
],
"validated_actions": [
"release and tag OID equality",
"local and Gitea ref synchronization",
"OpenClaw Command v2 positive and negative validation",
"Gate A and Gate B",
"Hermes lifecycle 17/17",
"grant isolation 11/11",
"restart recovery",
"rollback and forward recovery",
"SQLite quick_check",
"secret scan with zero violations",
"final production healthcheck"
],
"secret_plaintext_written": false,
"owner_approval_required": true,
"owner_notification_channels": [
"codex_owner_instruction",
"gitops_audit"
],
"constraints_original": {
"product_code_changed": false,
"tag_changed": false,
"production_redeployed": false,
"production_traffic_changed": false,
"force_push_allowed": false,
"incubator_in_release_graph": false
},
"promoted_at": "2026-07-21T14:17:05Z",
"promoted_by": "chatgpt/owner-approved-governance",
"created_at": "2026-07-21T14:17:05Z",
"author": "chatgpt"
}
+36
View File
@@ -0,0 +1,36 @@
{
"version": "V2R1C2",
"codename": "unified-role-aware-portal",
"status": "TAG_CREATED_NOT_PROMOTED",
"tag": "V2R1C2",
"tag_ref": "refs/tags/V2R1C2",
"tag_object": "a3bd84ebec9c705f7c9c5c03f7f4ec55f8854e36",
"target_oid": "3dd622b5a515f1fa4ef72b9f8ae9ce48ac703f24",
"evidence_closure_oid": "8cdca463aff9707edee00e20a3b56884130f6978",
"previous_version": "V2R1C1",
"rollback_version": "V2R1C1",
"baseline": "V2R1C1",
"release_run_id": "AIOS-V2R1C2-PRODUCTION-20260722T011836Z",
"release_reason": "Register the Owner-approved V2R1C2 candidate tag and verified evidence before a separately gated production promotion.",
"candidate_url": "http://127.0.0.1:18921",
"production_url": "http://127.0.0.1:18920",
"aggregate_gate": "PASS",
"required_stages": "3/3 SUCCEEDED",
"evidence_status": "COMPLETE",
"evidence_manifest_sha256": "2e27bb73b8e6297bd3077238f73a96d697fc3c3611c601c4dc9357e5fdcd8eee",
"evidence_checksums_sha256": "3dcedaff367d5d1a114640d8918304d1c39154d38b078f7f0b097a95d43978be",
"prepromotion_acceptance_sha256": "402e9ce7690654ea7fd493985284446365a827b61fe195576dc7f4e4d4499ef7",
"audited_tag_plan": "nl-1784681185786-19ac0f82",
"owner_release_authorization": "GRANTED",
"production_promoted": false,
"main_changed_by_tag": false,
"force_push": false,
"constraints": {
"tag_rewrite_allowed": false,
"force_push_allowed": false,
"rollback_assets_must_be_preserved": true,
"production_promotion_requires_fresh_acceptance": true
},
"registered_at": "2026-07-22T01:18:36Z",
"registered_by": "codex/owner-approved-gitops"
}