608 lines
22 KiB
JSON
608 lines
22 KiB
JSON
{
|
|
"schema_version": "dependency_drift_check_plan_v1",
|
|
"generated_at": "2026-06-04T20:52:25+08:00",
|
|
"program_status": {
|
|
"overall_completion_percent": 99,
|
|
"current_priority": "P1",
|
|
"current_task_id": "P1-205",
|
|
"next_task_id": "P1-206",
|
|
"read_only_mode": true
|
|
},
|
|
"source_refs": [
|
|
"docs/evaluations/package_supply_chain_inventory_2026-06-04.json",
|
|
"docs/evaluations/javascript_package_inventory_2026-06-04.json",
|
|
"docs/evaluations/docker_build_surface_inventory_2026-06-04.json",
|
|
"docs/evaluations/dependency_risk_policy_2026-06-04.json",
|
|
"docs/evaluations/agent_market_governance_snapshot_2026-06-04.json",
|
|
"docs/ai/AI_AGENT_AUTOMATION_WORKLIST_2026-06-04.md",
|
|
"docs/HARD_RULES.md"
|
|
],
|
|
"rollups": {
|
|
"total_cadence_items": 5,
|
|
"total_local_checks": 5,
|
|
"total_external_source_candidates": 10,
|
|
"by_domain": {
|
|
"python": 2,
|
|
"javascript": 3,
|
|
"docker": 3,
|
|
"policy": 1,
|
|
"cve": 2,
|
|
"license": 2,
|
|
"agent_market": 4,
|
|
"external_sources": 2,
|
|
"approval_package": 1
|
|
},
|
|
"read_only_local_check_ids": [
|
|
"python_manifest_drift_local_check",
|
|
"javascript_lockfile_drift_local_check",
|
|
"dockerfile_surface_drift_local_check",
|
|
"dependency_policy_consistency_local_check",
|
|
"agent_market_snapshot_freshness_local_check"
|
|
],
|
|
"approval_required_source_ids": [
|
|
"osv_advisory_candidate",
|
|
"github_advisory_candidate",
|
|
"pypi_registry_candidate",
|
|
"npm_registry_candidate",
|
|
"docker_hub_manifest_candidate",
|
|
"ghcr_manifest_candidate",
|
|
"package_license_metadata_candidate",
|
|
"deps_dev_license_candidate",
|
|
"agent_official_release_candidate",
|
|
"agent_benchmark_signal_candidate"
|
|
],
|
|
"design_only_cadence_ids": [
|
|
"daily_repo_drift_readonly",
|
|
"weekly_external_source_review",
|
|
"weekly_agent_market_watch_review",
|
|
"monthly_upgrade_approval_batch",
|
|
"failure_only_notification_review"
|
|
]
|
|
},
|
|
"cadence_policy": {
|
|
"timezone": "Asia/Taipei",
|
|
"items": [
|
|
{
|
|
"cadence_id": "daily_repo_drift_readonly",
|
|
"domain": "javascript",
|
|
"frequency": "daily design; activation requires P1-206 approval package or operator approval",
|
|
"activation_status": "design_only",
|
|
"owner_agent": "hermes",
|
|
"allowed_now": [
|
|
"read committed JSON snapshots",
|
|
"compare repo manifests and lockfiles",
|
|
"emit read-only drift report design"
|
|
],
|
|
"blocked_now": [
|
|
"pnpm install",
|
|
"npm audit",
|
|
"package upgrade",
|
|
"lockfile write",
|
|
"workflow activation"
|
|
],
|
|
"planned_output": "future docs/evaluations/dependency_drift_run_YYYY-MM-DD.json",
|
|
"failure_notification": "failure-only AwoooP / Telegram event after schedule is explicitly approved"
|
|
},
|
|
{
|
|
"cadence_id": "weekly_external_source_review",
|
|
"domain": "external_sources",
|
|
"frequency": "weekly design; external calls blocked until source approval",
|
|
"activation_status": "blocked_until_approval",
|
|
"owner_agent": "openclaw",
|
|
"allowed_now": [
|
|
"source list review",
|
|
"cost and rate-limit analysis",
|
|
"approval package preparation"
|
|
],
|
|
"blocked_now": [
|
|
"external CVE lookup",
|
|
"external license lookup",
|
|
"registry freshness lookup",
|
|
"paid API call"
|
|
],
|
|
"planned_output": "future external-source approval package",
|
|
"failure_notification": "only notify when approved source health check fails or data staleness exceeds threshold"
|
|
},
|
|
{
|
|
"cadence_id": "weekly_agent_market_watch_review",
|
|
"domain": "agent_market",
|
|
"frequency": "weekly design; market lookup remains approval-bound",
|
|
"activation_status": "blocked_until_approval",
|
|
"owner_agent": "nemotron",
|
|
"allowed_now": [
|
|
"read existing agent-market snapshots",
|
|
"offline comparison against committed evidence",
|
|
"prepare source approval package"
|
|
],
|
|
"blocked_now": [
|
|
"SDK installation",
|
|
"paid API call",
|
|
"shadow/canary",
|
|
"production routing",
|
|
"unapproved external market lookup"
|
|
],
|
|
"planned_output": "future agent-market watch source approval package",
|
|
"failure_notification": "failure-only AwoooP / Telegram event after approved cadence is active"
|
|
},
|
|
{
|
|
"cadence_id": "monthly_upgrade_approval_batch",
|
|
"domain": "approval_package",
|
|
"frequency": "monthly design; package generation only after P1-206",
|
|
"activation_status": "design_only",
|
|
"owner_agent": "openclaw",
|
|
"allowed_now": [
|
|
"define approval package fields",
|
|
"map dependency risk rules to upgrade candidates"
|
|
],
|
|
"blocked_now": [
|
|
"package upgrade",
|
|
"lockfile write",
|
|
"docker build",
|
|
"image rebuild",
|
|
"registry push"
|
|
],
|
|
"planned_output": "future P1-206 approval package template",
|
|
"failure_notification": "operator review only when a high/critical candidate cannot be triaged"
|
|
},
|
|
{
|
|
"cadence_id": "failure_only_notification_review",
|
|
"domain": "external_sources",
|
|
"frequency": "each approved scheduled run",
|
|
"activation_status": "design_only",
|
|
"owner_agent": "hermes",
|
|
"allowed_now": [
|
|
"document notification contract",
|
|
"define success suppression and failure escalation"
|
|
],
|
|
"blocked_now": [
|
|
"Telegram routing change",
|
|
"Alertmanager rule change",
|
|
"workflow activation"
|
|
],
|
|
"planned_output": "future notification contract for scheduled drift checks",
|
|
"failure_notification": "success stays quiet; failed run, stale source, rate-limit exhaustion, or schema mismatch notifies AwoooP / Telegram"
|
|
}
|
|
]
|
|
},
|
|
"local_check_plan": [
|
|
{
|
|
"check_id": "python_manifest_drift_local_check",
|
|
"domain": "python",
|
|
"status": "read_only_design",
|
|
"owner_agent": "hermes",
|
|
"frequency": "daily or pre-merge after approval",
|
|
"input_refs": [
|
|
"apps/api/pyproject.toml",
|
|
"apps/api/requirements.txt",
|
|
"packages/lewooogo-data/pyproject.toml",
|
|
"packages/lewooogo-brain/pyproject.toml",
|
|
"docs/evaluations/package_supply_chain_inventory_2026-06-04.json"
|
|
],
|
|
"planned_output": "python manifest drift report; no requirements rewrite",
|
|
"allowed_now": [
|
|
"read manifests",
|
|
"compare committed dependency specifiers",
|
|
"flag authority drift"
|
|
],
|
|
"blocked_now": [
|
|
"pip install",
|
|
"uv sync",
|
|
"requirements delete",
|
|
"lockfile write",
|
|
"docker build"
|
|
],
|
|
"acceptance_criteria": [
|
|
"reports pyproject / requirements drift without modifying either file",
|
|
"maps drift to P1-204 severity rules",
|
|
"emits approval package requirement for any remediation"
|
|
]
|
|
},
|
|
{
|
|
"check_id": "javascript_lockfile_drift_local_check",
|
|
"domain": "javascript",
|
|
"status": "read_only_design",
|
|
"owner_agent": "hermes",
|
|
"frequency": "daily or pre-merge after approval",
|
|
"input_refs": [
|
|
"package.json",
|
|
"apps/web/package.json",
|
|
"packages/shared-types/package.json",
|
|
"pnpm-lock.yaml",
|
|
"docs/evaluations/javascript_package_inventory_2026-06-04.json"
|
|
],
|
|
"planned_output": "pnpm importer specifier drift report; no pnpm install",
|
|
"allowed_now": [
|
|
"read package manifests",
|
|
"read pnpm-lock.yaml",
|
|
"compare importer specifiers"
|
|
],
|
|
"blocked_now": [
|
|
"pnpm install",
|
|
"pnpm update",
|
|
"npm audit",
|
|
"lockfile write",
|
|
"package publish"
|
|
],
|
|
"acceptance_criteria": [
|
|
"reports missing/mismatch/extra dependencies",
|
|
"keeps lockfile untouched",
|
|
"flags shared-types publish boundary for approval package"
|
|
]
|
|
},
|
|
{
|
|
"check_id": "dockerfile_surface_drift_local_check",
|
|
"domain": "docker",
|
|
"status": "read_only_design",
|
|
"owner_agent": "hermes",
|
|
"frequency": "weekly or Dockerfile-change after approval",
|
|
"input_refs": [
|
|
"apps/api/Dockerfile",
|
|
"apps/web/Dockerfile",
|
|
"docs/evaluations/docker_build_surface_inventory_2026-06-04.json"
|
|
],
|
|
"planned_output": "Dockerfile surface drift report; no build or pull",
|
|
"allowed_now": [
|
|
"read Dockerfiles",
|
|
"compare FROM and COPY --from references",
|
|
"compare build-time network fetch patterns"
|
|
],
|
|
"blocked_now": [
|
|
"docker build",
|
|
"image pull",
|
|
"image rebuild",
|
|
"registry push",
|
|
"production routing"
|
|
],
|
|
"acceptance_criteria": [
|
|
"reports base image, digest pin, binary source, network fetch, and healthcheck drift",
|
|
"does not contact registries",
|
|
"maps remediation to P1-206 approval package"
|
|
]
|
|
},
|
|
{
|
|
"check_id": "dependency_policy_consistency_local_check",
|
|
"domain": "policy",
|
|
"status": "read_only_design",
|
|
"owner_agent": "openclaw",
|
|
"frequency": "weekly after approval",
|
|
"input_refs": [
|
|
"docs/evaluations/package_supply_chain_inventory_2026-06-04.json",
|
|
"docs/evaluations/dependency_risk_policy_2026-06-04.json",
|
|
"docs/ai/AI_AGENT_AUTOMATION_WORKLIST_2026-06-04.md"
|
|
],
|
|
"planned_output": "policy consistency report for severity rules and next actions",
|
|
"allowed_now": [
|
|
"read committed policies",
|
|
"validate rollups",
|
|
"detect stale next_action references"
|
|
],
|
|
"blocked_now": [
|
|
"policy override",
|
|
"approval bypass",
|
|
"production change"
|
|
],
|
|
"acceptance_criteria": [
|
|
"catches stale P1 task references",
|
|
"keeps operation_boundaries false",
|
|
"requires OpenClaw/HITL for any gate change"
|
|
]
|
|
},
|
|
{
|
|
"check_id": "agent_market_snapshot_freshness_local_check",
|
|
"domain": "agent_market",
|
|
"status": "read_only_design",
|
|
"owner_agent": "nemotron",
|
|
"frequency": "weekly after approval",
|
|
"input_refs": [
|
|
"docs/evaluations/agent_market_governance_snapshot_2026-06-04.json",
|
|
"docs/ai/agent-market-watch-sources.v1.json",
|
|
"docs/runbooks/OPENCLAW-REPLACEMENT-EVALUATION.md"
|
|
],
|
|
"planned_output": "agent-market freshness report using committed snapshots only",
|
|
"allowed_now": [
|
|
"read committed market governance snapshots",
|
|
"compare stale source timestamps",
|
|
"prepare source approval package"
|
|
],
|
|
"blocked_now": [
|
|
"unapproved external market lookup",
|
|
"SDK installation",
|
|
"paid API call",
|
|
"shadow/canary",
|
|
"production routing"
|
|
],
|
|
"acceptance_criteria": [
|
|
"keeps Nemotron at offline expert role until replay evidence improves",
|
|
"detects stale market evidence without claiming current market truth",
|
|
"routes replacement questions to OpenClaw/HITL approval boundaries"
|
|
]
|
|
}
|
|
],
|
|
"external_source_candidates": [
|
|
{
|
|
"source_id": "osv_advisory_candidate",
|
|
"domain": "cve",
|
|
"source_type": "public vulnerability advisory API candidate",
|
|
"approval_status": "approval_required",
|
|
"auth_required": false,
|
|
"cost_profile": "free_public_candidate",
|
|
"rate_limit_risk": "medium",
|
|
"cache_policy": "cache advisory responses per package/version for at least 24h after approval",
|
|
"data_retention_policy": "store only package, version, advisory id, severity, source timestamp, and lookup time",
|
|
"permitted_after_approval": [
|
|
"read-only vulnerability lookup",
|
|
"severity mapping to dependency_risk_policy_v1"
|
|
],
|
|
"blocked_now": [
|
|
"external CVE lookup",
|
|
"automated remediation",
|
|
"package upgrade"
|
|
],
|
|
"owner_agent": "openclaw",
|
|
"evidence_refs": [
|
|
"docs/evaluations/dependency_risk_policy_2026-06-04.json"
|
|
]
|
|
},
|
|
{
|
|
"source_id": "github_advisory_candidate",
|
|
"domain": "cve",
|
|
"source_type": "advisory database candidate",
|
|
"approval_status": "approval_required",
|
|
"auth_required": false,
|
|
"cost_profile": "unknown_until_review",
|
|
"rate_limit_risk": "medium",
|
|
"cache_policy": "cache advisory ids and affected ranges; avoid repeated queries",
|
|
"data_retention_policy": "store minimal advisory metadata and source timestamp",
|
|
"permitted_after_approval": [
|
|
"cross-check high and critical advisories"
|
|
],
|
|
"blocked_now": [
|
|
"external advisory lookup",
|
|
"paid API call",
|
|
"package upgrade"
|
|
],
|
|
"owner_agent": "openclaw",
|
|
"evidence_refs": [
|
|
"docs/evaluations/dependency_risk_policy_2026-06-04.json"
|
|
]
|
|
},
|
|
{
|
|
"source_id": "pypi_registry_candidate",
|
|
"domain": "python_registry",
|
|
"source_type": "Python package registry freshness candidate",
|
|
"approval_status": "approval_required",
|
|
"auth_required": false,
|
|
"cost_profile": "free_public_candidate",
|
|
"rate_limit_risk": "medium",
|
|
"cache_policy": "cache package release metadata per package for 24h after approval",
|
|
"data_retention_policy": "store package name, current specifier, latest seen version, source timestamp, and lookup time",
|
|
"permitted_after_approval": [
|
|
"read-only version freshness comparison"
|
|
],
|
|
"blocked_now": [
|
|
"registry lookup",
|
|
"pip install",
|
|
"uv sync",
|
|
"package upgrade"
|
|
],
|
|
"owner_agent": "hermes",
|
|
"evidence_refs": [
|
|
"apps/api/pyproject.toml",
|
|
"docs/evaluations/package_supply_chain_inventory_2026-06-04.json"
|
|
]
|
|
},
|
|
{
|
|
"source_id": "npm_registry_candidate",
|
|
"domain": "javascript_registry",
|
|
"source_type": "JavaScript package registry freshness candidate",
|
|
"approval_status": "approval_required",
|
|
"auth_required": false,
|
|
"cost_profile": "free_public_candidate",
|
|
"rate_limit_risk": "medium",
|
|
"cache_policy": "cache package dist-tag and version metadata for 24h after approval",
|
|
"data_retention_policy": "store package name, current specifier, lockfile version, latest seen version, and source timestamp",
|
|
"permitted_after_approval": [
|
|
"read-only package freshness comparison"
|
|
],
|
|
"blocked_now": [
|
|
"registry lookup",
|
|
"npm audit",
|
|
"pnpm install",
|
|
"package upgrade",
|
|
"lockfile write"
|
|
],
|
|
"owner_agent": "hermes",
|
|
"evidence_refs": [
|
|
"apps/web/package.json",
|
|
"pnpm-lock.yaml",
|
|
"docs/evaluations/javascript_package_inventory_2026-06-04.json"
|
|
]
|
|
},
|
|
{
|
|
"source_id": "docker_hub_manifest_candidate",
|
|
"domain": "docker_registry",
|
|
"source_type": "container image manifest freshness candidate",
|
|
"approval_status": "approval_required",
|
|
"auth_required": false,
|
|
"cost_profile": "free_public_candidate",
|
|
"rate_limit_risk": "high",
|
|
"cache_policy": "cache image tag and digest metadata for 24h after approval; throttle by image",
|
|
"data_retention_policy": "store image ref, tag, digest, source timestamp, and lookup time",
|
|
"permitted_after_approval": [
|
|
"read-only digest freshness comparison"
|
|
],
|
|
"blocked_now": [
|
|
"image pull",
|
|
"docker build",
|
|
"image rebuild",
|
|
"registry push"
|
|
],
|
|
"owner_agent": "openclaw",
|
|
"evidence_refs": [
|
|
"apps/api/Dockerfile",
|
|
"apps/web/Dockerfile",
|
|
"docs/evaluations/docker_build_surface_inventory_2026-06-04.json"
|
|
]
|
|
},
|
|
{
|
|
"source_id": "ghcr_manifest_candidate",
|
|
"domain": "docker_registry",
|
|
"source_type": "GHCR image manifest freshness candidate",
|
|
"approval_status": "approval_required",
|
|
"auth_required": false,
|
|
"cost_profile": "unknown_until_review",
|
|
"rate_limit_risk": "high",
|
|
"cache_policy": "cache image tag and digest metadata for 24h after approval; no pull",
|
|
"data_retention_policy": "store image ref, tag, digest, source timestamp, and lookup time",
|
|
"permitted_after_approval": [
|
|
"read-only digest freshness comparison"
|
|
],
|
|
"blocked_now": [
|
|
"image pull",
|
|
"docker build",
|
|
"image rebuild",
|
|
"registry push"
|
|
],
|
|
"owner_agent": "openclaw",
|
|
"evidence_refs": [
|
|
"apps/api/Dockerfile",
|
|
"docs/evaluations/docker_build_surface_inventory_2026-06-04.json"
|
|
]
|
|
},
|
|
{
|
|
"source_id": "package_license_metadata_candidate",
|
|
"domain": "license",
|
|
"source_type": "package metadata license field candidate",
|
|
"approval_status": "approval_required",
|
|
"auth_required": false,
|
|
"cost_profile": "free_public_candidate",
|
|
"rate_limit_risk": "medium",
|
|
"cache_policy": "cache package license metadata for 7 days after approval",
|
|
"data_retention_policy": "store package name, version, license expression, source timestamp, and lookup time",
|
|
"permitted_after_approval": [
|
|
"read-only license metadata comparison"
|
|
],
|
|
"blocked_now": [
|
|
"external license lookup",
|
|
"legal conclusion",
|
|
"package publish",
|
|
"package upgrade"
|
|
],
|
|
"owner_agent": "openclaw",
|
|
"evidence_refs": [
|
|
"docs/evaluations/dependency_risk_policy_2026-06-04.json",
|
|
"packages/shared-types/package.json"
|
|
]
|
|
},
|
|
{
|
|
"source_id": "deps_dev_license_candidate",
|
|
"domain": "license",
|
|
"source_type": "dependency graph and license metadata candidate",
|
|
"approval_status": "approval_required",
|
|
"auth_required": false,
|
|
"cost_profile": "unknown_until_review",
|
|
"rate_limit_risk": "medium",
|
|
"cache_policy": "cache normalized dependency/license metadata for 7 days after approval",
|
|
"data_retention_policy": "store only package, version, license, dependency path summary, source timestamp, and lookup time",
|
|
"permitted_after_approval": [
|
|
"read-only transitive license review"
|
|
],
|
|
"blocked_now": [
|
|
"external license lookup",
|
|
"legal conclusion",
|
|
"package upgrade"
|
|
],
|
|
"owner_agent": "openclaw",
|
|
"evidence_refs": [
|
|
"docs/evaluations/dependency_risk_policy_2026-06-04.json"
|
|
]
|
|
},
|
|
{
|
|
"source_id": "agent_official_release_candidate",
|
|
"domain": "agent_market",
|
|
"source_type": "official release notes, docs, changelog, or repository release candidate",
|
|
"approval_status": "approval_required",
|
|
"auth_required": false,
|
|
"cost_profile": "unknown_until_review",
|
|
"rate_limit_risk": "medium",
|
|
"cache_policy": "cache source snapshots and version metadata for 7 days after approval",
|
|
"data_retention_policy": "store product name, version or release marker, source timestamp, summary, and lookup time",
|
|
"permitted_after_approval": [
|
|
"read-only AI Agent market version watch",
|
|
"candidate emergence detection",
|
|
"operator review queue update"
|
|
],
|
|
"blocked_now": [
|
|
"unapproved market lookup",
|
|
"SDK installation",
|
|
"paid API call",
|
|
"shadow/canary",
|
|
"production routing"
|
|
],
|
|
"owner_agent": "nemotron",
|
|
"evidence_refs": [
|
|
"docs/evaluations/agent_market_governance_snapshot_2026-06-04.json",
|
|
"docs/ai/agent-market-watch-sources.v1.json"
|
|
]
|
|
},
|
|
{
|
|
"source_id": "agent_benchmark_signal_candidate",
|
|
"domain": "agent_market",
|
|
"source_type": "public benchmark, leaderboard, or evaluation report candidate",
|
|
"approval_status": "approval_required",
|
|
"auth_required": false,
|
|
"cost_profile": "unknown_until_review",
|
|
"rate_limit_risk": "unknown",
|
|
"cache_policy": "cache benchmark snapshot references for 7 days after approval",
|
|
"data_retention_policy": "store benchmark name, candidate name, score summary, source timestamp, and lookup time",
|
|
"permitted_after_approval": [
|
|
"read-only market score evidence refresh",
|
|
"OpenClaw replacement evidence queue update"
|
|
],
|
|
"blocked_now": [
|
|
"unapproved market lookup",
|
|
"replacement decision",
|
|
"shadow/canary",
|
|
"production routing"
|
|
],
|
|
"owner_agent": "openclaw",
|
|
"evidence_refs": [
|
|
"docs/runbooks/OPENCLAW-REPLACEMENT-EVALUATION.md",
|
|
"docs/evaluations/agent_market_governance_snapshot_2026-06-04.json"
|
|
]
|
|
}
|
|
],
|
|
"notification_policy": {
|
|
"success_notification": "成功檢查預設不即時通知,避免洗版;結果只寫入 committed snapshot 或治理看板。",
|
|
"failure_notification": "失敗、schema mismatch、來源過期、rate-limit exhaustion、成本邊界不明或 high/critical policy hit 才通知 AwoooP / Telegram。",
|
|
"operator_review_trigger": "任何外部來源啟用、SDK 安裝、付費 API、shadow/canary、生產路由、套件升級、lockfile 寫入或 image rebuild 都必須進人工批准。"
|
|
},
|
|
"operation_boundaries": {
|
|
"read_only_plan_allowed": true,
|
|
"schedule_activation_allowed": false,
|
|
"workflow_write_allowed": false,
|
|
"external_cve_lookup_allowed": false,
|
|
"external_license_lookup_allowed": false,
|
|
"registry_lookup_allowed": false,
|
|
"agent_market_external_lookup_allowed": false,
|
|
"sdk_installation_allowed": false,
|
|
"paid_api_call_allowed": false,
|
|
"package_installation_allowed": false,
|
|
"package_upgrade_allowed": false,
|
|
"lockfile_write_allowed": false,
|
|
"docker_build_allowed": false,
|
|
"image_pull_allowed": false,
|
|
"image_rebuild_allowed": false,
|
|
"registry_push_allowed": false,
|
|
"shadow_or_canary_allowed": false,
|
|
"production_routing_allowed": false
|
|
},
|
|
"approval_boundaries": {
|
|
"sdk_installation_allowed": false,
|
|
"paid_api_call_allowed": false,
|
|
"shadow_or_canary_allowed": false,
|
|
"production_routing_allowed": false,
|
|
"destructive_operation_allowed": false
|
|
}
|
|
}
|