Skip to content

feat: add typed capability effect evidence to agent runners - #2755

Merged
stranske merged 13 commits into
mainfrom
codex/issue-2752-capability-effect-evidence
Jul 11, 2026
Merged

feat: add typed capability effect evidence to agent runners#2755
stranske merged 13 commits into
mainfrom
codex/issue-2752-capability-effect-evidence

Conversation

@stranske

@stranske stranske commented Jul 11, 2026

Copy link
Copy Markdown
Owner

Source: Issue #2752

Closes #2752

Automated Status Summary

Scope

  • Extend the existing agent-runner output contract with optional, backwards-compatible capability/effect evidence.
  • Add outputs for capability ID, effect fingerprint, evidence artifact reference, supervision mode, and terminal disposition/evidence status.
  • Define strict formats, size bounds, absence semantics, and secret-safe handling.
  • Wire the shared runner/orchestration summaries so existing runners can emit or omit these values uniformly.
  • Adapt the evidence into Orchestrator's existing completion-event and capability ledger lifecycle.
  • Preserve candidate/shadow gating, provenance, counterexamples, TTL, kill switch, and rollback evidence.

Context for Agent

Related Issues/PRs

Tasks

  • Update the canonical runner-output contract and implementation guide.
  • Add optional outputs to registry-backed runner surfaces without changing existing required-output semantics.
  • Add shared validation/normalization tests.
  • Extend Orchestrator's completion-event adapter rather than creating a new event store.
  • Record idempotent capability/effect evidence and rejected-input diagnostics.
  • Add deliberate-break fixtures for spoofed capability IDs, unstable fingerprints, oversized refs, and missing provenance.

Acceptance criteria

  • Existing consumers remain compatible when every new field is absent.
  • Present values are schema-validated, bounded, stable, and secret-safe.
  • Replayed evidence is idempotent.
  • Orchestrator links accepted evidence to an existing candidate/shadow capability and preserves counterexamples.
  • Raw prompts or runner prose cannot activate, dispatch, or promote a capability.
  • Invalid evidence is observable and cannot mutate capability state.

Summary by CodeRabbit

  • New Features
    • Reusable Codex, Claude, Cursor, and Gemini workflows now accept optional provider-neutral “capability effect evidence” metadata and expose normalized/validated evidence via new standardized outputs.
  • Bug Fixes
    • If evidence is invalid or incomplete, the workflows now skip the agent run and any subsequent commit/push to prevent unsafe execution.
  • Documentation
    • Updated integration, workflow output references, runner implementation guidance, observability contract, and agent-runner output contract (v1.1) with the new optional fields and all-or-none validation rule.
  • Tests
    • Added unit tests plus a CLI/subprocess integration test for normalization and failure handling.

Copilot AI review requested due to automatic review settings July 11, 2026 00:16
@stranske
stranske temporarily deployed to agent-high-privilege July 11, 2026 00:16 — with GitHub Actions Inactive
@coderabbitai

coderabbitai Bot commented Jul 11, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds optional capability-effect evidence validation to the shared runner library and exposes normalized evidence through Claude, Codex, Cursor, and Gemini reusable workflows. Updates tests, contracts, integration guidance, observability documentation, and worker metadata.

Changes

Capability evidence contract

Layer / File(s) Summary
Evidence validation and CLI
scripts/runner_lib/*, tests/scripts/test_runner_lib.py
Adds structured evidence validation, normalization, GitHub output generation, CLI support, public exports, and validation tests.
Reusable workflow integration
.github/workflows/reusable-{claude,codex,cursor,gemini}-run.yml
Adds optional inputs, validation steps, output mappings, and execution gates that prevent agent runs and commits after validation failure.
Contract and integration documentation
docs/INTEGRATION_GUIDE.md, docs/ci/WORKFLOW_OUTPUTS.md, docs/contracts/*, docs/guides/*, docs/keepalive/*
Documents the version 1.1 evidence contract, validation rules, workflow outputs, implementation guidance, template contract, and observability semantics.
Worker attempt metadata
langsmith-fleet-worker-attempt.json
Updates the emitted timestamp and pull request number.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Caller
  participant ReusableRunnerWorkflow
  participant RunnerLibrary
  participant GitHubOutputs
  Caller->>ReusableRunnerWorkflow: provide optional evidence inputs
  ReusableRunnerWorkflow->>RunnerLibrary: run normalize-evidence
  RunnerLibrary->>GitHubOutputs: write normalized evidence
  ReusableRunnerWorkflow->>Caller: return validated workflow outputs
Loading

Possibly related issues

  • #2750 — Both issues extend agent-runner evidence contracts with capability IDs, effect fingerprints, artifact references, and supervision/status metadata.

Suggested labels: github:actions, codex

🚥 Pre-merge checks | ✅ 2 | ❌ 3

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning Runner contracts and validation were added, but the PR summary shows no Orchestrator completion-event/capability-ledger integration required by #2752. Add the Orchestrator adapter/ledger plumbing and replay/idempotency handling, or split this runner-only work into a separate issue.
Out of Scope Changes check ⚠️ Warning The langsmith-fleet-worker-attempt.json metadata timestamp/PR update appears unrelated to the evidence-contract objectives. Drop the attempt-metadata edit unless it is required by the PR goals; keep the changes limited to runner evidence contracts, validation, docs, and tests.
Docstring Coverage ⚠️ Warning Docstring coverage is 6.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: adding typed capability/effect evidence to agent runners.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/issue-2752-capability-effect-evidence

Comment @coderabbitai help to get the list of available commands.

@stranske
stranske force-pushed the codex/issue-2752-capability-effect-evidence branch from 11f3194 to 3e166bc Compare July 11, 2026 00:18
@stranske-keepalive

stranske-keepalive Bot commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

Automated Status Summary

Head SHA: c5d7f87
Latest Runs: ⏳ pending — Gate
Required contexts: Gate / gate, Health 45 Agents Guard / guard
Required: core tests (3.12): ⏳ pending, core tests (3.13): ⏳ pending, docker smoke: ⏳ pending, gate: ⏳ pending

Workflow / Job Result Logs
(no jobs reported) ⏳ pending

Coverage Overview

  • Coverage history entries: 1

Coverage Trend

Metric Value
Current 75.63%
Baseline 85.00%
Delta -9.37%
Minimum 70.00%
Status ✅ Pass

Top Coverage Hotspots (lowest coverage)

File Coverage Missing
scripts/issue_dedup_smoke.py 0.0% 4
scripts/runner_lib/__main__.py 0.0% 3
scripts/validate_template_sync.py 0.0% 77
scripts/langchain/topic_splitter.py 19.1% 57
tools/codex_log_analyzer.py 19.6% 140
scripts/repo_review_round2_runner.py 25.1% 344
scripts/prune_agent_stubs.py 39.7% 26
scripts/repo_review_round1_runner.py 40.7% 133
tools/ensure_workflow_timeout_variables.py 42.1% 74
scripts/sync_label_docs.py 42.9% 64
tools/ci_failure_triage.py 44.2% 123
scripts/repo_review_backlog_scan.py 45.3% 116
scripts/repo_review_body_writer.py 46.5% 86
tools/codex_session_analyzer.py 47.9% 59
scripts/create_verifier_labels.py 48.3% 58

Low Coverage Files (<50.0%)

File Coverage Missing
scripts/issue_dedup_smoke.py 0.0% 4
scripts/runner_lib/__main__.py 0.0% 3
scripts/validate_template_sync.py 0.0% 77
scripts/langchain/topic_splitter.py 19.1% 57
tools/codex_log_analyzer.py 19.6% 140
scripts/repo_review_round2_runner.py 25.1% 344
scripts/prune_agent_stubs.py 39.7% 26
scripts/repo_review_round1_runner.py 40.7% 133
tools/ensure_workflow_timeout_variables.py 42.1% 74
scripts/sync_label_docs.py 42.9% 64
tools/ci_failure_triage.py 44.2% 123
scripts/repo_review_backlog_scan.py 45.3% 116
scripts/repo_review_body_writer.py 46.5% 86
tools/codex_session_analyzer.py 47.9% 59
scripts/create_verifier_labels.py 48.3% 58

Updated automatically; will refresh on subsequent CI/Docker completions.


Keepalive checklist

Scope

  • Extend the existing agent-runner output contract with optional, backwards-compatible capability/effect evidence.
  • Add outputs for capability ID, effect fingerprint, evidence artifact reference, supervision mode, and terminal disposition/evidence status.
  • Define strict formats, size bounds, absence semantics, and secret-safe handling.
  • Wire the shared runner/orchestration summaries so existing runners can emit or omit these values uniformly.
  • Adapt the evidence into Orchestrator's existing completion-event and capability ledger lifecycle.
  • Preserve candidate/shadow gating, provenance, counterexamples, TTL, kill switch, and rollback evidence.

Context for Agent

Related Issues/PRs

Tasks

  • Update the canonical runner-output contract and implementation guide.
  • Add optional outputs to registry-backed runner surfaces without changing existing required-output semantics.
  • Add shared validation/normalization tests.
  • Extend Orchestrator's completion-event adapter rather than creating a new event store.
  • Record idempotent capability/effect evidence and rejected-input diagnostics.
  • Add deliberate-break fixtures for spoofed capability IDs, unstable fingerprints, oversized refs, and missing provenance.

Acceptance criteria

  • Existing consumers remain compatible when every new field is absent.
  • Present values are schema-validated, bounded, stable, and secret-safe.
  • Replayed evidence is idempotent.
  • Orchestrator links accepted evidence to an existing candidate/shadow capability and preserves counterexamples.
  • Raw prompts or runner prose cannot activate, dispatch, or promote a capability.
  • Invalid evidence is observable and cannot mutate capability state.

@stranske
stranske temporarily deployed to agent-high-privilege July 11, 2026 00:19 — with GitHub Actions Inactive

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 11f31947fb

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread scripts/runner_lib/core.py Outdated
Comment thread docs/contracts/agent-runner-output.md

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Extends the agent-runner output contract to optionally carry typed, provider-neutral capability/effect evidence, and wires that evidence through the shared runner library into the four registry-backed runner reusable workflows while updating the relevant documentation and tests.

Changes:

  • Add CapabilityEffectEvidence + normalize_capability_effect_evidence() validation (plus normalize-evidence CLI) to emit bounded, all-or-none evidence outputs.
  • Extend reusable-{codex,claude,cursor,gemini}-run.yml to accept optional evidence inputs, validate them pre-run, and surface validated values as workflow_call outputs.
  • Update runner contract + integration/observability docs and add unit coverage for normalization + CLI output writing.

Reviewed changes

Copilot reviewed 12 out of 12 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
tests/scripts/test_runner_lib.py Adds unit tests for evidence normalization and the new normalize-evidence CLI behavior.
scripts/runner_lib/core.py Introduces evidence schema/validation, GitHub outputs emission, and a new CLI subcommand.
scripts/runner_lib/__init__.py Exports the new evidence dataclass and normalization helper from the package surface.
docs/keepalive/Observability_Contract.md Documents the new optional evidence outputs in the keepalive observability contract.
docs/INTEGRATION_GUIDE.md Notes the optional evidence outputs and adds them to the reusable runner outputs catalog entries.
docs/guides/AGENT_RUNNER_IMPLEMENTATION.md Adds implementation guidance for validating and relaying typed evidence via the runner library CLI.
docs/contracts/agent-runner-output.md Bumps contract version to 1.1 and defines the optional evidence output schema and semantics.
docs/ci/WORKFLOW_OUTPUTS.md Updates the canonical workflow outputs catalog to include the new runner outputs.
.github/workflows/reusable-gemini-run.yml Adds optional evidence inputs + outputs and validates them via scripts.runner_lib normalize-evidence.
.github/workflows/reusable-cursor-run.yml Adds optional evidence inputs + outputs and validates them via scripts.runner_lib normalize-evidence.
.github/workflows/reusable-codex-run.yml Adds optional evidence inputs + outputs and validates them via scripts.runner_lib normalize-evidence.
.github/workflows/reusable-claude-run.yml Adds optional evidence inputs + outputs and validates them via scripts.runner_lib normalize-evidence.

Comment thread tests/scripts/test_runner_lib.py
Comment thread docs/keepalive/Observability_Contract.md Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 9

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/reusable-claude-run.yml:
- Around line 449-467: The workflow’s post-validation steps must not run when
capability evidence validation fails. Add a condition requiring
steps.capability_evidence.outcome != 'failure' to the always()-based Run Claude
and Commit and push changes steps, preserving always() while preventing agent
execution and commits after malformed evidence.
- Around line 94-127: Forward capability_id, effect_fingerprint,
evidence_artifact_ref, supervision_mode, capability_evidence_status, and
terminal_disposition from the consumer workflow’s reusable-claude-run
invocation, using the corresponding workflow inputs and preserving their
defaults, so the new fields are available end-to-end.

In @.github/workflows/reusable-cursor-run.yml:
- Around line 466-484: The workflow currently allows Run Cursor and Commit and
push changes to proceed when capability_evidence fails. Update both steps’ if
conditions to include steps.capability_evidence.outcome != 'failure' alongside
their existing conditions, ensuring invalid or partial evidence blocks agent
execution and pushing changes.

In @.github/workflows/reusable-gemini-run.yml:
- Around line 474-492: Gate the “Run Gemini” and “Commit and push changes”
workflow steps using conditions that retain their existing always-run behavior
while also requiring steps.capability_evidence.outcome != 'failure'. This must
prevent agent execution and repository mutation/push when the
capability_evidence validation fails.

In `@docs/ci/WORKFLOW_OUTPUTS.md`:
- Line 250: Insert a blank line immediately before the “Provider-neutral
optional capability evidence” heading to satisfy markdownlint MD022.

In `@docs/INTEGRATION_GUIDE.md`:
- Around line 154-160: Update docs/INTEGRATION_GUIDE.md so the quick index
consistently documents all registry-backed runners: add six capability-evidence
output rows for Cursor and Gemini, matching the entries for Codex and Claude and
the definitions in docs/ci/WORKFLOW_OUTPUTS.md. Alternatively, narrow the
paragraph’s claim to only the runners currently documented, but prefer adding
the missing Cursor and Gemini rows.

In `@scripts/runner_lib/core.py`:
- Around line 87-112: Validate CapabilityEffectEvidence during direct
construction via __post_init__ or a shared validator: allow the completely empty
legacy instance, but require every field when any capability field is populated
and reject invalid values. Ensure github_outputs() can only emit validated
evidence while preserving the public dataclass API.
- Line 41: Update CAPABILITY_ID_RE to enforce valid lowercase-kebab identifiers:
require each segment to start and end with an alphanumeric character and allow
only single hyphens between segments, while preserving the existing length
constraints and capability: prefix.

In `@tests/scripts/test_runner_lib.py`:
- Around line 61-73: The capability-ID test currently exercises the
partial-record validation instead of invalid ID validation. In
test_capability_effect_evidence_rejects_partial_records, create a complete valid
six-field evidence fixture, then override only capability_id with
capability:Consumer_Sync and assert the expected invalid-ID error; keep the
existing partial-record cases unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 651cd2bd-5d64-4b84-9f44-b86650048c2a

📥 Commits

Reviewing files that changed from the base of the PR and between 40c1af4 and 11f3194.

📒 Files selected for processing (12)
  • .github/workflows/reusable-claude-run.yml
  • .github/workflows/reusable-codex-run.yml
  • .github/workflows/reusable-cursor-run.yml
  • .github/workflows/reusable-gemini-run.yml
  • docs/INTEGRATION_GUIDE.md
  • docs/ci/WORKFLOW_OUTPUTS.md
  • docs/contracts/agent-runner-output.md
  • docs/guides/AGENT_RUNNER_IMPLEMENTATION.md
  • docs/keepalive/Observability_Contract.md
  • scripts/runner_lib/__init__.py
  • scripts/runner_lib/core.py
  • tests/scripts/test_runner_lib.py

Comment thread .github/workflows/reusable-claude-run.yml
Comment thread .github/workflows/reusable-claude-run.yml
Comment thread .github/workflows/reusable-cursor-run.yml
Comment thread .github/workflows/reusable-gemini-run.yml
Comment thread docs/ci/WORKFLOW_OUTPUTS.md
Comment thread docs/INTEGRATION_GUIDE.md
Comment thread scripts/runner_lib/core.py Outdated
Comment thread scripts/runner_lib/core.py
Comment thread tests/scripts/test_runner_lib.py
@stranske
stranske temporarily deployed to agent-high-privilege July 11, 2026 00:26 — with GitHub Actions Inactive
@stranske

Copy link
Copy Markdown
Owner Author

Addressed all currently actionable review threads in commits 2dceec99 and 8eb03f09: reject credential-shaped evidence references; synchronize the consumer contract; preserve the test environment; clarify that runner emission is not Orchestrator ingestion; gate Claude/Cursor/Gemini execution and pushes on validation; enforce strict kebab IDs and direct-dataclass validation. Validation: uv run --extra dev pytest -q tests/scripts/test_runner_lib.py (47 passed), workflow YAML validation, reusable-run focused tests (9 passed), Ruff, and template completeness.

@stranske
stranske temporarily deployed to agent-high-privilege July 11, 2026 00:29 — with GitHub Actions Inactive
@stranske

stranske commented Jul 11, 2026

Copy link
Copy Markdown
Owner Author

Runner dispatch state for autofix on PR #2755. Do not edit.

@stranske
stranske temporarily deployed to agent-high-privilege July 11, 2026 00:34 — with GitHub Actions Inactive
@github-actions github-actions Bot added the autofix Opt-in automated formatting & lint remediation label Jul 11, 2026
@stranske
stranske temporarily deployed to agent-standard July 11, 2026 00:34 — with GitHub Actions Inactive
@github-actions

Copy link
Copy Markdown
Contributor

Autofix updated these files:

  • scripts/runner_lib/core.py

@agents-workflows-bot
agents-workflows-bot Bot temporarily deployed to agent-high-privilege July 11, 2026 00:36 Inactive

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/reusable-codex-run.yml (1)

1412-1414: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Add the capability-evidence gate to Codex commit/push. Commit and push changes still runs under if: always(), so a failed capability_evidence step can still mutate and push the branch. Use the same guard as the other reusable agent workflows.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/reusable-codex-run.yml around lines 1412 - 1414, The
Commit and push changes step currently uses if: always(), allowing pushes after
capability_evidence fails. Replace this condition with the same
capability-evidence success guard used by the other reusable agent workflows,
while preserving the step’s existing commit/push behavior.
♻️ Duplicate comments (2)
docs/ci/WORKFLOW_OUTPUTS.md (1)

250-250: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add a blank line before the heading.

markdownlint reports MD022 because the new heading is not separated from the preceding content. Insert one blank line before ## Provider-neutral optional capability evidence.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/ci/WORKFLOW_OUTPUTS.md` at line 250, Insert a blank line immediately
before the “## Provider-neutral optional capability evidence” heading in
WORKFLOW_OUTPUTS.md to satisfy markdownlint MD022.

Source: Linters/SAST tools

docs/INTEGRATION_GUIDE.md (1)

154-160: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Keep the quick index consistent with the “all runners” claim.

The guide says all registry-backed runners expose these outputs, but the quick index lists rows only for Codex and Claude. Add the six corresponding Cursor and Gemini rows, or narrow the claim to the runners listed here. docs/ci/WORKFLOW_OUTPUTS.md already documents all four.

Also applies to: 252-285

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/INTEGRATION_GUIDE.md` around lines 154 - 160, The quick index is
inconsistent with the claim that all registry-backed runners expose the six
capability evidence outputs. Update the index section in INTEGRATION_GUIDE.md to
add rows for Cursor and Gemini covering capability-id, effect-fingerprint,
evidence-artifact-ref, supervision-mode, capability-evidence-status, and
terminal-disposition, matching the existing Codex and Claude entries and
WORKFLOW_OUTPUTS.md.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@scripts/runner_lib/core.py`:
- Around line 103-109: The validation around the evidence reference must detect
credential-like prefixes throughout namespaced references, not only at the
beginning. Update the checks in the validation function containing lowered_ref
and SECRET_LIKE_EVIDENCE_PREFIXES to reject matching markers at token boundaries
or anywhere appropriate in the full reference, while preserving legitimate
references; add regression tests for examples such as artifact:ghp_example and
github-actions:owner/repo:123:sk-example.
- Around line 88-90: Update _validate_capability_effect_evidence_values to
validate every value is a string before applying the empty-record
any(values.values()) check, raising the established validation error for None,
booleans, and other non-string inputs; preserve absence semantics only for valid
empty strings. Add regression coverage for constructing CapabilityEffectEvidence
with non-string fields and verify github_outputs() is not allowed to emit
invalid values.

In `@templates/consumer-repo/docs/contracts/agent-runner-output.md`:
- Line 116: Replace the `effect-fingerprint` example in the documentation with a
`sha256:` prefix followed by exactly 64 lowercase hexadecimal characters,
matching the implementation’s required format.

---

Outside diff comments:
In @.github/workflows/reusable-codex-run.yml:
- Around line 1412-1414: The Commit and push changes step currently uses if:
always(), allowing pushes after capability_evidence fails. Replace this
condition with the same capability-evidence success guard used by the other
reusable agent workflows, while preserving the step’s existing commit/push
behavior.

---

Duplicate comments:
In `@docs/ci/WORKFLOW_OUTPUTS.md`:
- Line 250: Insert a blank line immediately before the “## Provider-neutral
optional capability evidence” heading in WORKFLOW_OUTPUTS.md to satisfy
markdownlint MD022.

In `@docs/INTEGRATION_GUIDE.md`:
- Around line 154-160: The quick index is inconsistent with the claim that all
registry-backed runners expose the six capability evidence outputs. Update the
index section in INTEGRATION_GUIDE.md to add rows for Cursor and Gemini covering
capability-id, effect-fingerprint, evidence-artifact-ref, supervision-mode,
capability-evidence-status, and terminal-disposition, matching the existing
Codex and Claude entries and WORKFLOW_OUTPUTS.md.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 8092cba2-104a-48d5-bbc6-67511186c5dd

📥 Commits

Reviewing files that changed from the base of the PR and between 11f3194 and 42a0866.

📒 Files selected for processing (13)
  • .github/workflows/reusable-claude-run.yml
  • .github/workflows/reusable-codex-run.yml
  • .github/workflows/reusable-cursor-run.yml
  • .github/workflows/reusable-gemini-run.yml
  • docs/INTEGRATION_GUIDE.md
  • docs/ci/WORKFLOW_OUTPUTS.md
  • docs/contracts/agent-runner-output.md
  • docs/guides/AGENT_RUNNER_IMPLEMENTATION.md
  • docs/keepalive/Observability_Contract.md
  • scripts/runner_lib/__init__.py
  • scripts/runner_lib/core.py
  • templates/consumer-repo/docs/contracts/agent-runner-output.md
  • tests/scripts/test_runner_lib.py

Comment thread scripts/runner_lib/core.py
Comment thread scripts/runner_lib/core.py
Comment thread templates/consumer-repo/docs/contracts/agent-runner-output.md Outdated
@stranske
stranske temporarily deployed to agent-high-privilege July 11, 2026 00:47 — with GitHub Actions Inactive
@stranske stranske added the agent:codex Agent-created issues from Codex label Jul 11, 2026
@stranske
stranske temporarily deployed to agent-high-privilege July 11, 2026 02:03 — with GitHub Actions Inactive
@agents-workflows-bot
agents-workflows-bot Bot temporarily deployed to agent-high-privilege July 11, 2026 02:07 Inactive
@stranske-keepalive stranske-keepalive Bot added agent:needs-attention Agent needs human review or intervention needs-human Requires human intervention or review labels Jul 11, 2026
@stranske-keepalive
stranske-keepalive Bot temporarily deployed to agent-high-privilege July 11, 2026 02:11 Inactive
@agents-workflows-bot
agents-workflows-bot Bot temporarily deployed to agent-high-privilege July 11, 2026 02:12 Inactive
@stranske
stranske merged commit b6c2324 into main Jul 11, 2026
56 checks passed
@stranske stranske added the verify:compare Compare multiple LLM evaluations label Jul 11, 2026
@stranske
stranske deleted the codex/issue-2752-capability-effect-evidence branch July 11, 2026 02:24
@stranske
stranske temporarily deployed to agent-standard July 11, 2026 02:24 — with GitHub Actions Inactive
@stranske
stranske temporarily deployed to agent-high-privilege July 11, 2026 02:24 — with GitHub Actions Inactive
@stranske
stranske temporarily deployed to agent-standard July 11, 2026 02:24 — with GitHub Actions Inactive
@github-actions

Copy link
Copy Markdown
Contributor

Provider Comparison Report

Provider Summary

Provider Model Verdict Confidence Summary
openai gpt-5.4 CONCERNS 83% This PR solidly extends the agent-runner output contract: reusable workflows add optional evidence fields, docs are updated, shared runner library support is added, and tests likely cover schema va...
anthropic claude-sonnet-4-6 CONCERNS 82% The PR successfully implements the runner-side contract extension: optional backwards-compatible inputs/outputs are added to all four reusable runner workflows, a centralized validation library (ru...
📋 Full Provider Details (click to expand)

openai

  • Model: gpt-5.4
  • Verdict: CONCERNS
  • Confidence: 83%
  • Scores:
    • Correctness: 7.0/10
    • Completeness: 5.0/10
    • Quality: 8.0/10
    • Testing: 7.0/10
    • Risks: 6.0/10
  • Summary: This PR solidly extends the agent-runner output contract: reusable workflows add optional evidence fields, docs are updated, shared runner library support is added, and tests likely cover schema validation/normalization and backward-compatible absence semantics. Code quality appears good and the additions look secret-conscious and bounded by design. However, the documented scope and acceptance criteria go beyond runner output shaping into Orchestrator completion-event and capability-ledger behavior. Those required behaviors—idempotent replay handling, linking accepted evidence to existing candidate/shadow capabilities, preserving counterexamples, blocking activation/promotion from prose, and making invalid evidence observable without state mutation—are not evident in the changed files. As merged, the code appears to satisfy the runner-contract portion of the work, but not the full acceptance criteria stated for the PR.
  • Concerns:
    • The runner-side contract extension appears implemented and backward compatible, but the PR does not show corresponding Orchestrator-side completion-event/ledger changes required by the acceptance criteria.
    • Acceptance criteria requiring replay idempotency, linkage to existing candidate/shadow capabilities, preservation of counterexamples, and prevention of capability activation/promotion from raw prompts are not demonstrably implemented in the changed code.
    • The changes focus on validation/normalization of optional workflow outputs and documentation, but there is no visible persistence or rejected-input diagnostic path beyond runner output shaping.
    • Deliberate-break coverage for spoofed capability IDs, unstable fingerprints, oversized refs, and missing provenance seems only partially addressed via runner-lib tests; end-to-end invalid evidence observability and non-mutation of capability state are not verified here.
    • Because the reusable workflows now expose additional inputs/outputs, downstream consumers may rely on them, but the absence of visible Orchestrator integration means the evidence may be emitted without being acted on according to the documented lifecycle.

anthropic

  • Model: claude-sonnet-4-6
  • Verdict: CONCERNS
  • Confidence: 82%
  • Scores:
    • Correctness: 7.0/10
    • Completeness: 5.0/10
    • Quality: 8.0/10
    • Testing: 6.0/10
    • Risks: 7.0/10
  • Summary: The PR successfully implements the runner-side contract extension: optional backwards-compatible inputs/outputs are added to all four reusable runner workflows, a centralized validation library (runner_lib/core.py) is introduced with corresponding tests, and documentation is updated across contracts, guides, and observability docs. The runner-facing acceptance criteria (backwards compatibility, schema validation, secret-safe formatting, invalid-evidence observability) appear reasonably addressed. However, two acceptance criteria — Orchestrator linking evidence to candidate/shadow capabilities with counterexample preservation, and replay idempotency — require orchestrator-side changes that are entirely absent from this diff. The task 'Extend Orchestrator's completion-event adapter' produces no file changes. This represents a material completeness gap against the stated acceptance criteria, warranting a CONCERNS verdict rather than PASS.
  • Concerns:
    • No orchestrator files are modified in this PR, yet two acceptance criteria explicitly require orchestrator changes: 'Orchestrator links accepted evidence to an existing candidate/shadow capability and preserves counterexamples' and 'Replayed evidence is idempotent.' These cannot be satisfied by runner-side changes alone.
    • Idempotency of replayed evidence is unverifiable without orchestrator adapter changes — the runner can emit idempotent outputs but the receiving system's deduplication behavior is untouched.
    • Counterexample preservation is listed as an acceptance criterion but no code path for it exists in the diff.
    • The task 'Extend Orchestrator's completion-event adapter rather than creating a new event store' is explicitly listed but produces zero file changes in the diff — this entire task appears unimplemented.
    • reusable-codex-run.yml has +78/-0 (no deletions) while other runners have +80/-2, suggesting a possible inconsistency in how the codex runner wires outputs compared to claude/cursor/gemini runners.
    • Secret-safe handling: workflow inputs are logged in GitHub Actions step summaries by default unless explicitly masked — the diff does not show masking logic for evidence fields that might contain sensitive references.
    • Tests cover runner_lib validation in isolation but no integration tests verify the end-to-end evidence flow from runner output through to capability ledger state.

Agreement

  • Verdict: CONCERNS (all providers)
  • Correctness: scores within 1 point (avg 7.0/10, range 7.0-7.0)
  • Completeness: scores within 1 point (avg 5.0/10, range 5.0-5.0)
  • Quality: scores within 1 point (avg 8.0/10, range 8.0-8.0)
  • Testing: scores within 1 point (avg 6.5/10, range 6.0-7.0)
  • Risks: scores within 1 point (avg 6.5/10, range 6.0-7.0)

Disagreement

No major disagreements detected.

Unique Insights

  • openai: The runner-side contract extension appears implemented and backward compatible, but the PR does not show corresponding Orchestrator-side completion-event/ledger changes required by the acceptance criteria.; Acceptance criteria requiring replay idempotency, linkage to existing candidate/shadow capabilities, preservation of counterexamples, and prevention of capability activation/promotion from raw prompts are not demonstrably implemented in the changed code.; The changes focus on validation/normalization of optional workflow outputs and documentation, but there is no visible persistence or rejected-input diagnostic path beyond runner output shaping.; Deliberate-break coverage for spoofed capability IDs, unstable fingerprints, oversized refs, and missing provenance seems only partially addressed via runner-lib tests; end-to-end invalid evidence observability and non-mutation of capability state are not verified here.; Because the reusable workflows now expose additional inputs/outputs, downstream consumers may rely on them, but the absence of visible Orchestrator integration means the evidence may be emitted without being acted on according to the documented lifecycle.
  • anthropic: No orchestrator files are modified in this PR, yet two acceptance criteria explicitly require orchestrator changes: 'Orchestrator links accepted evidence to an existing candidate/shadow capability and preserves counterexamples' and 'Replayed evidence is idempotent.' These cannot be satisfied by runner-side changes alone.; Idempotency of replayed evidence is unverifiable without orchestrator adapter changes — the runner can emit idempotent outputs but the receiving system's deduplication behavior is untouched.; Counterexample preservation is listed as an acceptance criterion but no code path for it exists in the diff.; The task 'Extend Orchestrator's completion-event adapter rather than creating a new event store' is explicitly listed but produces zero file changes in the diff — this entire task appears unimplemented.; reusable-codex-run.yml has +78/-0 (no deletions) while other runners have +80/-2, suggesting a possible inconsistency in how the codex runner wires outputs compared to claude/cursor/gemini runners.; Secret-safe handling: workflow inputs are logged in GitHub Actions step summaries by default unless explicitly masked — the diff does not show masking logic for evidence fields that might contain sensitive references.; Tests cover runner_lib validation in isolation but no integration tests verify the end-to-end evidence flow from runner output through to capability ledger state.

🔍 LangSmith Traces

@stranske

Copy link
Copy Markdown
Owner Author

Verifier CONCERNS audit: current Workflows main contains the optional runner-output validation/emission contract, but the source issue requires adapting accepted/rejected evidence into Orchestrator’s completion-event and capability-ledger lifecycle, including replay idempotency and counterexample preservation. No such adapter or end-to-end replay fixture is present in this repository’s current main. This is a real completion gap, not a verifier false positive; initiating the bounded verifier follow-up lane.

@stranske

Copy link
Copy Markdown
Owner Author

📋 Follow-up issue created: #2758

Verification concerns have been analyzed and structured into a follow-up issue.

Next steps:

  1. Review the generated issue
  2. Auto-pilot will continue preparing a new PR

Or work on it manually - the choice is yours!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent:codex Agent-created issues from Codex agent:needs-attention Agent needs human review or intervention agent:retry Add to trigger agent retry after rate limit or pause agents:keepalive Use to initiate keepalive functionality with agents autofix Opt-in automated formatting & lint remediation needs-human Requires human intervention or review verify:compare Compare multiple LLM evaluations

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bridge agent-runner capability and effect evidence into Orchestrator

3 participants