feat(governance): show callback owner review triage
All checks were successful
CD Pipeline / tests (push) Successful in 1m9s
Code Review / ai-code-review (push) Successful in 10s
CD Pipeline / build-and-deploy (push) Successful in 4m10s
CD Pipeline / post-deploy-checks (push) Successful in 1m27s

This commit is contained in:
Your Name
2026-05-25 08:46:21 +08:00
parent b184a09086
commit 383a29a139
6 changed files with 128 additions and 0 deletions

View File

@@ -1215,6 +1215,26 @@ def _km_stale_callback_owner_review_work_item(
"target_surface": "awooop_runs_callback_evidence",
"target_href": f"/awooop/runs?{target_query}",
"work_item_href": f"/awooop/work-items?{work_item_query}",
"triage": {
"schema_version": "km_stale_callback_owner_review_triage_v1",
"flow_stage": "callback_observed_owner_review_link_missing",
"ai_lead_agent": "Hermes",
"supporting_agents": ["OpenClaw", "ElephantAlpha"],
"automation_state": "manual_owner_review_required",
"safe_to_auto_repair": False,
"blocking_reason": reason or "no_matching_completion_item",
"matching_strategy": "related_incident_id_exact_match",
"already_done": [
"callback_reply_persisted",
"completion_queue_checked",
"generated_read_only_work_item",
],
"next_actions": [
"review_runs_callback_evidence",
"queue_matching_km_stale_candidate",
"complete_owner_review_after_owner_approval",
],
},
"writes_on_read": False,
"manual_review_required": True,
"batch_writes_allowed": False,

View File

@@ -578,6 +578,26 @@ def test_km_stale_completion_summary_generates_owner_review_work_item() -> None:
"&work_item_id=km-callback-owner-review%3Aawoooi%3AINC-20260524-16109D"
"&incident_id=INC-20260524-16109D"
),
"triage": {
"schema_version": "km_stale_callback_owner_review_triage_v1",
"flow_stage": "callback_observed_owner_review_link_missing",
"ai_lead_agent": "Hermes",
"supporting_agents": ["OpenClaw", "ElephantAlpha"],
"automation_state": "manual_owner_review_required",
"safe_to_auto_repair": False,
"blocking_reason": "no_matching_completion_item",
"matching_strategy": "related_incident_id_exact_match",
"already_done": [
"callback_reply_persisted",
"completion_queue_checked",
"generated_read_only_work_item",
],
"next_actions": [
"review_runs_callback_evidence",
"queue_matching_km_stale_candidate",
"complete_owner_review_after_owner_approval",
],
},
"writes_on_read": False,
"manual_review_required": True,
"batch_writes_allowed": False,

View File

@@ -2021,6 +2021,10 @@
"callbackOwnerReviewLatest": "Latest: {incident} / {action}",
"callbackOwnerReviewQueue": "Completion queue: ready {ready}; blocked {blocked}; completed {completed}; failed {failed}",
"callbackOwnerReviewNext": "Next: {next}",
"callbackOwnerReviewFlow": "Flow: {stage}; match: {strategy}",
"callbackOwnerReviewAgents": "Lead: {lead}; support: {support}",
"callbackOwnerReviewAutomation": "Automation: {state}; safe auto-repair={safe}",
"callbackOwnerReviewBlocker": "Blocker: {reason}",
"callbackOwnerReviewEmpty": "Recent callback evidence is matched or no data is available yet",
"ciSecretHygiene": "Repo-controlled step env / action input exposure is guarded; key rotation and log retention remain",
"governance": "Unresolved governance alerts: {unresolved}; pending dispatch: {queued}",
@@ -2801,6 +2805,10 @@
"noRelated": "This incident has no matching owner-review completion item yet.",
"fetchFailed": "KM owner-review summary failed to load: {reason}",
"openWorkItem": "Open work item",
"triageFlow": "Flow: {stage}; match: {strategy}",
"triageAgents": "Lead: {lead}; support: {support}",
"triageAutomation": "Automation: {state}; safe auto-repair={safe}",
"triageBlocker": "Blocker: {reason}",
"statuses": {
"matched_owner_review": "Matched owner review",
"no_related_owner_review": "No matched owner review",

View File

@@ -2022,6 +2022,10 @@
"callbackOwnerReviewLatest": "最新:{incident} / {action}",
"callbackOwnerReviewQueue": "Completion queue可處理 {ready};卡住 {blocked};完成 {completed};失敗 {failed}",
"callbackOwnerReviewNext": "下一步:{next}",
"callbackOwnerReviewFlow": "流程:{stage};匹配:{strategy}",
"callbackOwnerReviewAgents": "主責:{lead};協作:{support}",
"callbackOwnerReviewAutomation": "自動化:{state};可安全自動修復={safe}",
"callbackOwnerReviewBlocker": "卡點:{reason}",
"callbackOwnerReviewEmpty": "近期 callback evidence 均已匹配或尚無資料",
"ciSecretHygiene": "repo 可控 step env / action input 泄漏面已加 guard仍需 key rotation 與 log retention 收斂",
"governance": "未解治理告警:{unresolved}pending dispatch{queued}",
@@ -2802,6 +2806,10 @@
"noRelated": "本 Incident 尚未對到 owner-review completion item。",
"fetchFailed": "KM owner-review 摘要讀取失敗:{reason}",
"openWorkItem": "開啟工作項",
"triageFlow": "流程:{stage};匹配:{strategy}",
"triageAgents": "主責:{lead};協作:{support}",
"triageAutomation": "自動化:{state};可安全自動修復={safe}",
"triageBlocker": "卡點:{reason}",
"statuses": {
"matched_owner_review": "已匹配 owner review",
"no_related_owner_review": "未匹配 owner review",

View File

@@ -307,11 +307,25 @@ interface KmStaleCallbackOwnerReviewWorkItem {
target_surface?: string | null;
target_href?: string | null;
work_item_href?: string | null;
triage?: KmStaleCallbackOwnerReviewTriage | null;
writes_on_read?: boolean | null;
manual_review_required?: boolean | null;
batch_writes_allowed?: boolean | null;
}
interface KmStaleCallbackOwnerReviewTriage {
schema_version?: string;
flow_stage?: string | null;
ai_lead_agent?: string | null;
supporting_agents?: string[];
automation_state?: string | null;
safe_to_auto_repair?: boolean | null;
blocking_reason?: string | null;
matching_strategy?: string | null;
already_done?: string[];
next_actions?: string[];
}
interface KmStaleCompletionSummary {
schema_version?: string;
project_id?: string | null;
@@ -1488,6 +1502,7 @@ function CallbackKmCompletionSummary({
? summary.related_items[0]
: null;
const workItem = summary.work_item?.status === "open" ? summary.work_item : null;
const triage = workItem?.triage ?? null;
return (
<div className="mt-3 border-t border-[#e0ddd4] pt-3">
@@ -1540,6 +1555,33 @@ function CallbackKmCompletionSummary({
{t("openWorkItem")}
</Link>
) : null}
{triage ? (
<div className="mt-2 grid gap-1 text-xs text-[#5f5b52]">
<p>
{t("triageFlow", {
stage: triage.flow_stage ?? "--",
strategy: triage.matching_strategy ?? "--",
})}
</p>
<p>
{t("triageAgents", {
lead: triage.ai_lead_agent ?? "--",
support: triage.supporting_agents?.join(" / ") || "--",
})}
</p>
<p>
{t("triageAutomation", {
state: triage.automation_state ?? "--",
safe: String(triage.safe_to_auto_repair ?? false),
})}
</p>
<p>
{t("triageBlocker", {
reason: triage.blocking_reason ?? "--",
})}
</p>
</div>
) : null}
</div>
</div>
);

View File

@@ -784,11 +784,25 @@ type KmStaleCallbackOwnerReviewWorkItem = {
target_surface?: string | null;
target_href?: string | null;
work_item_href?: string | null;
triage?: KmStaleCallbackOwnerReviewTriage | null;
writes_on_read?: boolean | null;
manual_review_required?: boolean | null;
batch_writes_allowed?: boolean | null;
};
type KmStaleCallbackOwnerReviewTriage = {
schema_version?: string;
flow_stage?: string | null;
ai_lead_agent?: string | null;
supporting_agents?: string[];
automation_state?: string | null;
safe_to_auto_repair?: boolean | null;
blocking_reason?: string | null;
matching_strategy?: string | null;
already_done?: string[];
next_actions?: string[];
};
type KmStaleCallbackCompletionSummary = {
schema_version?: string;
status?: string | null;
@@ -1584,6 +1598,7 @@ function buildWorkItems(
const latestCallbackSummary =
latestCallbackOwnerReview?.km_stale_completion_summary ?? null;
const latestCallbackWorkItem = latestCallbackSummary?.work_item ?? null;
const latestCallbackTriage = latestCallbackWorkItem?.triage ?? null;
const remediationQueue = telemetry.slo?.adr100?.verification_coverage?.remediation_queue;
const remediationTotal = remediationQueue?.total ?? 0;
const remediationReadyForAi = remediationQueue?.ready_for_ai ?? 0;
@@ -1803,6 +1818,21 @@ function buildWorkItems(
t("evidence.callbackOwnerReviewNext", {
next: latestCallbackWorkItem?.next_step ?? "--",
}),
t("evidence.callbackOwnerReviewFlow", {
stage: latestCallbackTriage?.flow_stage ?? "--",
strategy: latestCallbackTriage?.matching_strategy ?? "--",
}),
t("evidence.callbackOwnerReviewAgents", {
lead: latestCallbackTriage?.ai_lead_agent ?? "--",
support: latestCallbackTriage?.supporting_agents?.join(" / ") || "--",
}),
t("evidence.callbackOwnerReviewAutomation", {
state: latestCallbackTriage?.automation_state ?? "--",
safe: String(latestCallbackTriage?.safe_to_auto_repair ?? false),
}),
t("evidence.callbackOwnerReviewBlocker", {
reason: latestCallbackTriage?.blocking_reason ?? "--",
}),
]
: [t("evidence.callbackOwnerReviewEmpty")],
href: latestCallbackWorkItem?.target_href ?? "/awooop/runs",