spec: add mvp governance policy packs
This commit is contained in:
216
policy-packs/no-fake-progress/policy.yaml
Normal file
216
policy-packs/no-fake-progress/policy.yaml
Normal file
@@ -0,0 +1,216 @@
|
||||
apiVersion: reporting-governance/v1alpha1
|
||||
kind: PolicyPack
|
||||
metadata:
|
||||
id: no-fake-progress
|
||||
title: No Fake Progress
|
||||
version: 1.0.0
|
||||
summary: >-
|
||||
Prevent status language, reminders, or unsupported next-step claims from
|
||||
being treated as real progress without new evidence.
|
||||
owner: reporting-governance-plugin
|
||||
severity_default: medium
|
||||
applies_to:
|
||||
runtimes: [openclaw]
|
||||
task_modes: [interactive, silent]
|
||||
workflow_shapes: [single-agent, parent-child]
|
||||
channels: [telegram]
|
||||
tags: [reporting, evidence, anti-fake-progress]
|
||||
spec:
|
||||
evaluation_mode: any_rule_match
|
||||
rules:
|
||||
- id: no-fake-progress.no-new-evidence
|
||||
title: Progress-bearing checkpoint requires new evidence
|
||||
intent: >-
|
||||
Prevent narrative-only progress reports from satisfying checkpoint
|
||||
obligations when nothing new has been attached since the last report.
|
||||
triggers:
|
||||
event_types: [task_checkpoint_sent, task_status_changed]
|
||||
derived_signals: [checkpoint_progress_claim]
|
||||
claim_types: [progress]
|
||||
conditions:
|
||||
all:
|
||||
- fact: claim.is_progress_bearing
|
||||
equals: true
|
||||
- fact: evidence.new_items_since_last_checkpoint
|
||||
equals: 0
|
||||
evidence_requirements:
|
||||
progress:
|
||||
min_new_items_since_last_checkpoint: 1
|
||||
allowed_quality_floor: weak
|
||||
must_reference_evidence_classes: [tool_output, file_change, decision_record, runtime_artifact]
|
||||
decision_output:
|
||||
decision: annotate_placeholder
|
||||
severity: medium
|
||||
reason: >-
|
||||
checkpoint contains no new evidence and cannot count as substantive progress
|
||||
suggested_status: in_progress
|
||||
required_actions:
|
||||
- action: rewrite_message
|
||||
target: outgoing_report
|
||||
mandatory: true
|
||||
details:
|
||||
mode: replace_with_placeholder
|
||||
- action: append_audit_note
|
||||
target: task_record
|
||||
mandatory: true
|
||||
details:
|
||||
note: original progress wording preserved for audit; no new evidence was attached
|
||||
operator_notice:
|
||||
required: true
|
||||
channel: telegram
|
||||
urgency: medium
|
||||
message: >-
|
||||
Progress update was rewritten as a placeholder because no new
|
||||
evidence was attached since the previous checkpoint.
|
||||
must_reference: []
|
||||
deadline: null
|
||||
operator_message_templates:
|
||||
placeholder_rewrite: >-
|
||||
Progress update: work is still in progress, but no new auditable
|
||||
artifact was attached since the previous checkpoint. The next update
|
||||
must include new evidence such as tool output, a file change, or a
|
||||
decision record.
|
||||
|
||||
- id: no-fake-progress.repeated-status-only
|
||||
title: Repeated status-only updates must not be framed as advancement
|
||||
intent: >-
|
||||
Distinguish liveness or continuity from actual task advancement.
|
||||
triggers:
|
||||
event_types: [task_checkpoint_sent, forced_operator_update]
|
||||
derived_signals: [repeated_status_only_update]
|
||||
claim_types: [progress]
|
||||
conditions:
|
||||
all:
|
||||
- fact: message.status_only
|
||||
equals: true
|
||||
- fact: message.substantive_delta_from_previous
|
||||
equals: false
|
||||
evidence_requirements:
|
||||
progress:
|
||||
min_new_items_since_last_checkpoint: 1
|
||||
allowed_quality_floor: weak
|
||||
decision_output:
|
||||
decision: rewrite
|
||||
severity: medium
|
||||
reason: >-
|
||||
repeated status-only update was presented as progress without a new substantive delta
|
||||
suggested_status: in_progress
|
||||
required_actions:
|
||||
- action: rewrite_message
|
||||
target: outgoing_report
|
||||
mandatory: true
|
||||
details:
|
||||
mode: reframe_as_continuity_update
|
||||
- action: append_audit_note
|
||||
target: task_record
|
||||
mandatory: true
|
||||
details:
|
||||
note: repeated status-only update reframed to avoid fake progress
|
||||
operator_notice:
|
||||
required: false
|
||||
channel: telegram
|
||||
urgency: low
|
||||
message: null
|
||||
must_reference: []
|
||||
deadline: null
|
||||
operator_message_templates:
|
||||
placeholder_rewrite: >-
|
||||
Continuity update only: task status remains unchanged since the last
|
||||
checkpoint. No new progress artifact has been attached yet.
|
||||
|
||||
- id: no-fake-progress.reminder-presented-as-progress
|
||||
title: Reminder-only activity must not count as progress
|
||||
intent: >-
|
||||
Prevent nudges, reminders, or waiting-state management from being
|
||||
presented as actual task advancement unless new evidence accompanies them.
|
||||
triggers:
|
||||
event_types: [task_checkpoint_sent, operator_review_requested]
|
||||
derived_signals: [reminder_only_activity]
|
||||
claim_types: [progress]
|
||||
conditions:
|
||||
all:
|
||||
- fact: activity.kind
|
||||
equals: reminder_only
|
||||
- fact: evidence.new_items_since_last_checkpoint
|
||||
equals: 0
|
||||
evidence_requirements:
|
||||
progress:
|
||||
min_new_items_since_last_checkpoint: 1
|
||||
allowed_quality_floor: weak
|
||||
decision_output:
|
||||
decision: rewrite
|
||||
severity: medium
|
||||
reason: >-
|
||||
reminder-only activity was presented as task progress without supporting evidence
|
||||
suggested_status: in_progress
|
||||
required_actions:
|
||||
- action: rewrite_message
|
||||
target: outgoing_report
|
||||
mandatory: true
|
||||
details:
|
||||
mode: reframe_as_non_progress_update
|
||||
- action: append_audit_note
|
||||
target: task_record
|
||||
mandatory: true
|
||||
details:
|
||||
note: reminder-only activity cannot satisfy progress reporting on its own
|
||||
operator_notice:
|
||||
required: false
|
||||
channel: telegram
|
||||
urgency: low
|
||||
message: null
|
||||
must_reference: []
|
||||
deadline: null
|
||||
operator_message_templates:
|
||||
placeholder_rewrite: >-
|
||||
Non-progress update: reminder or follow-up activity occurred, but no
|
||||
new task evidence was attached. This does not count as substantive progress.
|
||||
|
||||
- id: no-fake-progress.next-step-claim-without-evidence
|
||||
title: Concrete next-step claims need supporting evidence or explicit uncertainty
|
||||
intent: >-
|
||||
Prevent unsupported claims about what was prepared, queued, or made ready
|
||||
for the next segment of work.
|
||||
triggers:
|
||||
event_types: [task_checkpoint_sent, task_status_changed]
|
||||
derived_signals: [next_step_asserted]
|
||||
claim_types: [progress]
|
||||
conditions:
|
||||
all:
|
||||
- fact: claim.next_step_asserted
|
||||
equals: true
|
||||
- fact: claim.next_step_has_supporting_evidence
|
||||
equals: false
|
||||
evidence_requirements:
|
||||
progress:
|
||||
min_new_items_since_last_checkpoint: 1
|
||||
allowed_quality_floor: weak
|
||||
must_reference_evidence_classes: [decision_record, tool_output, file_change, runtime_artifact]
|
||||
decision_output:
|
||||
decision: annotate_placeholder
|
||||
severity: medium
|
||||
reason: >-
|
||||
next-step claim was stated without evidence showing the prerequisite work or decision basis
|
||||
suggested_status: in_progress
|
||||
required_actions:
|
||||
- action: rewrite_message
|
||||
target: outgoing_report
|
||||
mandatory: true
|
||||
details:
|
||||
mode: qualify_next_step_claim
|
||||
- action: append_audit_note
|
||||
target: task_record
|
||||
mandatory: true
|
||||
details:
|
||||
note: unsupported next-step assertion qualified by governance
|
||||
operator_notice:
|
||||
required: false
|
||||
channel: telegram
|
||||
urgency: low
|
||||
message: null
|
||||
must_reference: []
|
||||
deadline: null
|
||||
operator_message_templates:
|
||||
placeholder_rewrite: >-
|
||||
Next step is proposed, not yet evidenced. Before it can be reported as
|
||||
prepared or ready, the task needs a supporting artifact or decision record.
|
||||
Reference in New Issue
Block a user