Skip to content

[E2E vehicle] TC-6257 verify-pr failed-CI log prefetch (green) - #303

Closed
mrizzi wants to merge 4 commits into
verify-pr-fullsendfrom
tc-6257-e2e-vehicle
Closed

mrizzi wants to merge 4 commits into
verify-pr-fullsendfrom
tc-6257-e2e-vehicle

Conversation

@mrizzi

@mrizzi mrizzi commented Sep 16, 2026

Copy link
Copy Markdown
Collaborator

Throwaway vehicle PR for the TC-6257 live E2E acceptance run (CI-dispatched verify-pr).

  • Jira: TC-6266 (throwaway, status Review, label `ai-generated-jira`, Git PR field set to this PR)
  • Head commit: fa3f4b7 — the TC-6257 green tip (CI expected to PASS on this run)
  • Purpose: prove verify-pr sources CI Status from the pre_script-prefetched `github.check_runs` (PASS on green), then a follow-up red commit proves Check 1b reads the prefetched `check-run-logs.txt`.

Delete after evidence is captured in fullsend.md.

🤖 Generated with Claude Code

Summary by Sourcery

Validate sandboxed verify-pr CI assessment by prefetched check-run results and failure logs.

New Features:

  • Prefetch head-SHA CI check outcomes and failed GitHub Actions logs for sandboxed verify-pr reviews.

Bug Fixes:

  • Enable CI status and failure-log verification without relying on GitHub network access or the gh CLI inside the sandbox.

Enhancements:

  • Pass prefetched CI results and on-demand failure-log paths through the verify-pr input bundle and correctness-agent workflow.
  • Mount failed-check logs only when needed and update the verify-pr schema, documentation, and dispatch guidance accordingly.

CI:

  • Add an intentional CI failure canary for the TC-6257 end-to-end acceptance run.

Documentation:

  • Document sandbox handling of prefetched CI statuses and failure logs in the verify-pr skill and dispatch template.

Tests:

  • Add coverage for CI check-run propagation, default empty check results, and conditional failure-log path handling.

Chores:

  • Refresh locked verify-pr harness dependencies to the tested upstream revision.

mrizzi and others added 2 commits September 16, 2026 09:48
In the CI-dispatched (sandbox) verify-pr path the CI Status check had no
data — no gh CLI or egress in the sandbox — so it degraded to WARN
"CI status could not be retrieved" (PR #301, TC-6192). Extend the
split-trust prefetch so the pre_script fetches the PR head-SHA CI
check-run outcomes on the trusted runner and embeds them in the sandbox
bundle; correctness.md Check 1 reads them in sandbox mode and keeps the
`gh` on-demand path for interactive mode.

- pre-verify-pr.sh: prefetch repos/<repo>/commits/<sha>/check-runs into
  check-runs.json, reduced to name/status/conclusion/details_url
- pre_verify_pr.py: build_github_bundle embeds github.check_runs
  (defaults to []); _github_from_dir reads check-runs.json
- verify-pr-input.schema.json: add required github.check_runs (github is
  additionalProperties:false, so the new key must be declared)
- correctness.md: Check 1 sandbox-mode branch reads pre-fetched
  check-runs; 1b notes failure logs are unavailable in the sandbox
- dispatch-template.md, SKILL.md Step 0.7: document github.check_runs
- test_pre_verify_pr.py: cover check_runs in the bundle and transform

E2E re-verification on a live dispatched PR (PASS on green, FAIL on red)
is deferred to a CI run.

Implements TC-6257

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Assisted-by: Claude Code
The CI-status prefetch gives the sandbox check-run outcomes, but on a FAIL
correctness.md Check 1b still had no failure logs to analyse: the sandbox has
no gh CLI or egress to run `gh run view --log-failed`, so it inferred the
what/why/fix from the diff alone.

Extend the split-trust prefetch to capture the logs too. The pre_script (on the
trusted runner, where GH_TOKEN lives) extracts the distinct GitHub Actions run
IDs from each FAILED check-run's details_url and concatenates their
`gh run view --log-failed` output into a single check-run-logs.txt, mounted
read-only beside verify-pr-input.json. host_files mounts single files only and
the failed set is dynamic, so one combined file is used rather than per-check
paths. The file is always created (empty when nothing failed) so its mount is
never missing; the bundle carries only its sandbox path (github.check_run_logs_path,
"" when empty), never the log text — so the large content stays out of the schema
and off the sub-agent's context until Check 1b Reads it on a FAIL. The
wait-for-checks job (fullsend-verify-pr.yml) guarantees terminal conclusions
before dispatch, so a failed check's log is complete and fetchable at that point.
Non-Actions checks (no actions/runs URL) are skipped; 1b falls back to the diff +
details_url for those. Interactive mode is unchanged (fetches via gh on demand).

- pre-verify-pr.sh: extract failed Actions run IDs (deduped) and pack their
  --log-failed output into check-run-logs.txt; always create the file
- pre_verify_pr.py: build_github_bundle gains check_run_logs_path (default "");
  _github_from_dir emits the mounted sandbox path when the log file is non-empty
- verify-pr-input.schema.json: add required github.check_run_logs_path (string)
- .fullsend/harness/verify-pr.yaml: mount check-run-logs.txt (optional)
- correctness.md / dispatch-template.md / SKILL.md: Check 1b reads the prefetched
  log file via the CI Failure Logs input on a FAIL; document the new key
- test_pre_verify_pr.py: cover the new bundle field and the path derivation
  (present/empty/absent)

TC-6257

Assisted-by: Claude Code
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@sourcery-ai

sourcery-ai Bot commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

Reviewer's Guide

This throwaway E2E vehicle PR moves sandbox verify-pr CI validation from on-demand GitHub CLI calls to trusted-runner-prefetched head-SHA check runs, with failed logs mounted separately and read only when needed, while retaining interactive-mode behavior and adding transformation/unit coverage.

Sequence diagram for prefetched verify-pr CI validation

sequenceDiagram
    participant Runner as Trusted Runner
    participant GitHub as GitHub API
    participant PreScript as pre-verify-pr.sh
    participant Bundle as verify-pr-input.json
    participant Sandbox as Verify-pr Sandbox
    participant Correctness as Correctness Sub-agent

    Runner->>PreScript: Run pre-verify-pr.sh
    PreScript->>GitHub: Fetch check-runs for COMMIT_SHA
    GitHub-->>PreScript: check-runs.json
    PreScript->>GitHub: gh run view --log-failed for failed runs
    GitHub-->>PreScript: check-run-logs.txt
    PreScript->>Bundle: Embed check_runs and check_run_logs_path
    Runner->>Sandbox: Mount bundle and check-run-logs.txt
    Sandbox->>Correctness: Provide CI Status from github.check_runs
    Correctness-->>Sandbox: PASS, WARN, or FAIL
    opt CI status is FAIL
        Correctness->>Sandbox: Read CI Failure Logs path
        Sandbox-->>Correctness: Concatenated failed-check logs
        Correctness->>Correctness: Emit create-sub-task with details_url
    end
Loading

File-Level Changes

Change Details Files
Prefetch head-commit CI outcomes and failed-check logs on the trusted runner for sandbox verification.
  • Fetch and normalize GitHub check runs for the authoritative PR head SHA.
  • Collect distinct failed GitHub Actions run logs into a single optional mounted file.
  • Mount the log file without putting its contents in the input bundle or default agent context.
.fullsend/harness/verify-pr.yaml
plugins/sdlc-workflow/scripts/pre-verify-pr.sh
Extend the verify-pr input bundle and schema to carry CI data and on-demand log access.
  • Add check_runs and check_run_logs_path to the GitHub bundle.
  • Use an empty check-run list and empty log path for green or missing-log cases.
  • Expose the sandbox log path only when captured logs are non-empty.
plugins/sdlc-workflow/schemas/verify-pr-input.schema.json
plugins/sdlc-workflow/scripts/pre_verify_pr.py
Make sandbox correctness verification consume prefetched CI data while preserving interactive behavior.
  • Pass prefetched check-run status and log-path inputs through the verify-pr skill and dispatch template.
  • Define pass, fail, pending, and no-check status handling without invoking gh in sandbox mode.
  • Read failure logs only after a failed CI verdict, with diff/details URL fallback when logs are unavailable.
plugins/sdlc-workflow/skills/verify-pr/SKILL.md
plugins/sdlc-workflow/skills/verify-pr/correctness.md
plugins/sdlc-workflow/skills/verify-pr/dispatch-template.md
Add coverage for CI bundle defaults, propagation, and conditional failure-log exposure.
  • Verify check-run data is embedded and defaults to an empty list.
  • Verify non-empty logs produce the mounted sandbox path while empty logs do not.
  • Cover CLI transformation of prefetched CI artifacts.
plugins/sdlc-workflow/scripts/test_pre_verify_pr.py

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@fullsend-ai-review

fullsend-ai-review Bot commented Sep 16, 2026

Copy link
Copy Markdown

🤖 Finished Verify Pr · ✅ Success · Started 8:36 AM UTC · Completed 8:46 AM UTC

Commit: fa3f4b7 · View workflow run →

Runtime: claude · Model: claude-opus-4-8 · Effort: high · Cost: $5.35

@sourcery-ai sourcery-ai Bot 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.

Hey - I've found 2 issues

Prompt for AI Agents
Please address the comments from this code review:

## Individual Comments

### Comment 1
<location path="plugins/sdlc-workflow/scripts/pre-verify-pr.sh" line_range="212-215" />
<code_context>
+: > "${CHECK_LOGS_FILE}"
+FAILED_RUN_IDS=$(jq -r '
+  [ .[]
+    | select(.conclusion // "" | IN("failure", "timed_out", "cancelled", "action_required"))
+    | (.details_url // "")
+    | select(test("actions/runs/[0-9]+"))
+    | capture("actions/runs/(?<id>[0-9]+)").id
+  ] | unique | .[]' "${PRE_OUTPUT_DIR}/check-runs.json")
+for run_id in ${FAILED_RUN_IDS}; do
</code_context>
<issue_to_address>
**issue (bug_risk):** The prefetch and sandbox CI-status mapping omit terminal GitHub conclusions `startup_failure` and `stale`. Those checks are neither selected for failure-log collection nor classified as failed by Check 1, so a red CI run can be reported without a FAIL verdict.

**Triggers:** When a head-SHA check run ends with `startup_failure` or `stale`.

**Suggested fix:** Treat `startup_failure` and `stale` as failed conclusions in both the shell selector and the Check 1 mapping.
</issue_to_address>

### Comment 2
<location path="plugins/sdlc-workflow/scripts/pre-verify-pr.sh" line_range="218-223" />
<code_context>
+  ] | unique | .[]' "${PRE_OUTPUT_DIR}/check-runs.json")
+for run_id in ${FAILED_RUN_IDS}; do
+  {
+    echo "===== CI run ${run_id} — failed steps ====="
+    gh run view "${run_id}" --log-failed -R "${PR_REPO}" 2>&1 \
+      || echo "(log fetch failed for run ${run_id}; see its details_url in check_runs)"
+    echo
+  } >> "${CHECK_LOGS_FILE}"
+done
</code_context>
<issue_to_address>
**issue (bug_risk):** When `gh run view --log-failed` fails, the shell still writes a header and a failure note, making `check_run_logs_path` non-empty. Check 1b then reads that file as if it were the failure log and does not take its documented diff/details_url fallback, so the actual CI failure is analyzed without its available fallback evidence.

**Triggers:** When an Actions run is failed but its log fetch returns a non-zero status.

**Suggested fix:** Only expose `check_run_logs_path` when at least one log fetch succeeds, or mark failed fetches so Check 1b explicitly falls back to the diff and check-run metadata.

```suggestion
  run_log=$(mktemp)
  if gh run view "${run_id}" --log-failed -R "${PR_REPO}" > "${run_log}" 2>&1; then
    {
      echo "===== CI run ${run_id} — failed steps ====="
      cat "${run_log}"
      echo
    } >> "${CHECK_LOGS_FILE}"
  else
    echo "(log fetch failed for run ${run_id}; see its details_url in check_runs)" >&2
  fi
  rm -f "${run_log}"
```
</issue_to_address>

Sourcery assessment

Needs a human reviewer. 2 findings to address first, and if the prefetched check-run data or failure-log path is wrong, the verifier could report an incorrect CI result and create an erroneous Jira sub-task, or miss a needed one. Reverting prevents future misclassification, but any sub-task or review decision already created would remain and require cleanup.

Blocking findings: plugins/sdlc-workflow/scripts/pre-verify-pr.sh:215, plugins/sdlc-workflow/scripts/pre-verify-pr.sh:223


Sourcery is free for open source - if you like our reviews please consider sharing them ✨

Comment on lines +212 to +215
| select(.conclusion // "" | IN("failure", "timed_out", "cancelled", "action_required"))
| (.details_url // "")
| select(test("actions/runs/[0-9]+"))
| capture("actions/runs/(?<id>[0-9]+)").id

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.

issue (bug_risk): The prefetch and sandbox CI-status mapping omit terminal GitHub conclusions startup_failure and stale. Those checks are neither selected for failure-log collection nor classified as failed by Check 1, so a red CI run can be reported without a FAIL verdict.

Triggers: When a head-SHA check run ends with startup_failure or stale.

Suggested fix: Treat startup_failure and stale as failed conclusions in both the shell selector and the Check 1 mapping.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[sdlc-workflow/verify-pr] Classified as code change request — sub-task TC-6268 created to address this feedback (treat startup_failure/stale as failed CI conclusions in the prefetch selector and Check 1 mapping).

Comment on lines +218 to +223
{
echo "===== CI run ${run_id} — failed steps ====="
gh run view "${run_id}" --log-failed -R "${PR_REPO}" 2>&1 \
|| echo "(log fetch failed for run ${run_id}; see its details_url in check_runs)"
echo
} >> "${CHECK_LOGS_FILE}"

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.

issue (bug_risk): When gh run view --log-failed fails, the shell still writes a header and a failure note, making check_run_logs_path non-empty. Check 1b then reads that file as if it were the failure log and does not take its documented diff/details_url fallback, so the actual CI failure is analyzed without its available fallback evidence.

Triggers: When an Actions run is failed but its log fetch returns a non-zero status.

Suggested fix: Only expose check_run_logs_path when at least one log fetch succeeds, or mark failed fetches so Check 1b explicitly falls back to the diff and check-run metadata.

Suggested change
{
echo "===== CI run ${run_id} — failed steps ====="
gh run view "${run_id}" --log-failed -R "${PR_REPO}" 2>&1 \
|| echo "(log fetch failed for run ${run_id}; see its details_url in check_runs)"
echo
} >> "${CHECK_LOGS_FILE}"
run_log=$(mktemp)
if gh run view "${run_id}" --log-failed -R "${PR_REPO}" > "${run_log}" 2>&1; then
{
echo "===== CI run ${run_id} — failed steps ====="
cat "${run_log}"
echo
} >> "${CHECK_LOGS_FILE}"
else
echo "(log fetch failed for run ${run_id}; see its details_url in check_runs)" >&2
fi
rm -f "${run_log}"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[sdlc-workflow/verify-pr] Classified as code change request — sub-task TC-6269 created to address this feedback (only expose check_run_logs_path when a --log-failed fetch succeeds, else fall back in Check 1b).

@fullsend-ai-review

Copy link
Copy Markdown

Verification Report for TC-6266 (commit fa3f4b7)

Check Result Details
Review Feedback N/A No inline review comments or review bodies on the PR.
Root-Cause Investigation N/A No sub-tasks were created, so there is nothing to investigate.
Scope Containment WARN Vehicle task declares no files; all 8 PR files are nominally out-of-scope but none are unimplemented (feature work belongs to TC-6257).
Diff Size WARN 305 lines across 8 files vs an expected file count of 0; proportionate to the TC-6257 feature.
Commit Traceability FAIL Neither PR commit references the verified task TC-6266; both reference TC-6257 in their trailers.
Sensitive Patterns PASS No secrets or credentials detected in added lines.
CI Status WARN CI status unavailable in the sandbox (no gh CLI/egress; the pinned skill's bundle carries no check_runs).
Acceptance Criteria PASS 0 of 0 criteria met (vehicle task specifies none).
Test Quality WARN Repetitive Test Detection: 2 CLI transform tests are parametrize candidates. Test Documentation: PASS. Eval Quality: N/A.
Test Change Classification ADDITIVE test_pre_verify_pr.py +128/-0, +5 test functions, no coverage removed.
Verification Commands N/A No task-specified verification commands; no eval-infrastructure changes.

Overall: FAIL

The only failing check is Commit Traceability. This run verifies the throwaway E2E vehicle task TC-6266, but both PR commits carry the underlying feature ID TC-6257 in their trailers (Implements TC-6257 / TC-6257) and neither references TC-6266 — so the deterministic traceability check fails against the verified task ID. This is expected for a vehicle task (TC-6266 exists only to admit the TC-6257 PR into the CI-dispatched verify-pr path) and is not a defect in the change itself.

Non-blocking observations (informational rows do not affect the overall result):

  • CI Status (WARN): CI status could not be retrieved in the sandbox — no gh CLI / network egress, and the pinned skill's prefetch bundle carries no check_runs. This PR is precisely what adds check_runs / failed-CI-log prefetch to close that gap.
  • Scope Containment & Diff Size (WARN): the vehicle task declares no files, so every changed file is nominally out-of-scope; the diff is coherent and proportionate to the TC-6257 feature (schema field, prefetch script logic, tests, and skill-doc updates).
  • Test Quality (WARN, informational): two new CLI transform tests (test_cli_transform_embeds_check_run_logs_path_when_present, test_cli_transform_empty_check_run_logs_yields_empty_path) share one setup/action/assert algorithm differing only in fixture data — a @pytest.mark.parametrize candidate. All added test functions are documented.
  • Test changes are ADDITIVE (+128/-0, +5 test functions, no coverage removed) and no secrets were detected.

No sub-tasks were created and no review feedback was present. This report is informational — a human reviewer decides whether to merge.


This comment was AI-generated by sdlc-workflow/verify-pr v0.13.9.

The split-trust prefetch children (pre-verify-pr.sh, correctness.md,
SKILL.md, dispatch-template.md, verify-pr-input.schema.json) added in
14b8be6/fa3f4b7d only take effect in a CI-dispatched run when the
URL-pinned harness base advances to a commit that contains them. The
base file bytes are unchanged (sha256 3c9dc221…), so only the pinned
commit moves a9099defa3f4b7; `fullsend lock` refreezes all 11
children (notably pre-verify-pr.sh) at fa3f4b7.

Without this the sandbox keeps running the pre-TC-6257 pinned skill,
whose bundle carries no github.check_runs — CI Status falls back to the
WARN "unavailable in sandbox" path instead of sourcing prefetched data.

Assisted-by: Claude Code
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@fullsend-ai-review

fullsend-ai-review Bot commented Sep 16, 2026

Copy link
Copy Markdown

🤖 Finished Verify Pr · ✅ Success · Started 8:51 AM UTC · Completed 9:02 AM UTC

Commit: 1185ae2 · View workflow run →

Runtime: claude · Model: claude-opus-4-8 · Effort: high · Cost: $5.66

@fullsend-ai-review

Copy link
Copy Markdown

[sdlc-workflow/verify-pr] Re: @sourcery-ai[bot] review — Classified as code change request — this review body restates two inline bug_risk findings that are already tracked as sub-tasks TC-6268 (startup_failure/stale conclusion handling) and TC-6269 (check_run_logs_path exposure). No additional sub-task created — it duplicates the inline comment threads.

@fullsend-ai-review

Copy link
Copy Markdown

Verification Report for TC-6266 (commit 1185ae2)

Check Result Details
Review Feedback WARN 2 code change requests from sourcery-ai[bot] on pre-verify-pr.sh (startup_failure/stale handling; check_run_logs_path exposure); 2 sub-tasks created. Review-body roll-up duplicates both inline threads (standalone reply, no extra sub-task).
Root-Cause Investigation SKIPPED TC-6266 is a throwaway E2E vehicle with no parent Feature link (empty issue_links; unfetchable in sandbox) and the CI failure is infrastructural (FULLSEND_MINT_URL unset); workflow-phase tracing could not be completed.
Scope Containment WARN Vehicle task declares no file scope; all 9 PR files are out-of-scope but none are unimplemented (feature work belongs to TC-6257).
Diff Size WARN 395 lines changed (332+/63-) across 9 files vs an expected file count of 0; proportionate to the underlying TC-6257 work.
Commit Traceability FAIL No commit references TC-6266; all 3 commits reference TC-6257 (the real feature). Mechanical mismatch by design for a vehicle task.
Sensitive Patterns PASS No secrets/credentials in added lines; sha256 lock hashes and GH_TOKEN prose are false-positive-excluded.
CI Status FAIL verify-pr / Harness run (verify-pr) (run 35075967609) concluded failure: app-token.mint 'FULLSEND_MINT_URL is not set' (exit 1); current run pending. CI-failure sub-task created.
Acceptance Criteria PASS Vehicle task specifies no acceptance criteria; vacuously satisfied (0 of 0).
Test Quality WARN Repetitive test pair in test_pre_verify_pr.py (parameterization candidate); Test Documentation PASS; Eval Quality: N/A (no eval reviews).
Test Change Classification ADDITIVE +5 test functions, +11 assertions, 0 removed/relaxed, 0 skips added in test_pre_verify_pr.py.
Verification Commands N/A No verification commands specified; no run-evals infrastructure changes detected.

Overall: FAIL

Overall: FAIL — two hard-fail checks. CI Status FAIL: the head-SHA check verify-pr / Harness run (verify-pr) (run 35075967609) failed at the app-token.mint step with FULLSEND_MINT_URL is not set — an infrastructure/config failure (the failed run's payload targets PR #302), not a defect in this PR's diff; a CI-failure sub-task was created. Commit Traceability FAIL: no commit references TC-6266 — all three reference TC-6257, which is expected because TC-6266 is a throwaway E2E vehicle task and the commits legitimately belong to the real feature TC-6257. Two Sourcery code-change requests on pre-verify-pr.sh were tracked as sub-tasks. The WARN checks (scope, diff size, test quality) are all consistent with the intentional vehicle-task setup. A human reviewer should decide on merge/cleanup — this vehicle task is slated for deletion after E2E evidence capture.


This comment was AI-generated by sdlc-workflow/verify-pr v0.13.9.

Deliberate failing pytest whose root cause (a runtime-computed 16-hex
canary) appears ONLY in the CI failure log, never as a literal in the
diff. Exercises the CI-dispatched verify-pr Check 1b: CI Status must be
sourced from the prefetched github.check_runs and the failure analysed
from the prefetched check-run-logs.txt. Vehicle-only — never merged.

Assisted-by: Claude Code
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@fullsend-ai-review

fullsend-ai-review Bot commented Sep 16, 2026

Copy link
Copy Markdown

🤖 Finished Verify Pr · ✅ Success · Started 9:07 AM UTC · Completed 9:16 AM UTC

Commit: 8865e11 · View workflow run →

Runtime: claude · Model: claude-opus-4-8 · Effort: high · Cost: $4.80

@fullsend-ai-review

Copy link
Copy Markdown

Verification Report for TC-6266 (commit 8865e11)

Check Result Details
Review Feedback WARN 2 code change requests (Sourcery bug_risk) tracked as sub-tasks TC-6268, TC-6269; review body already replied. All items already classified in prior runs (idempotent) - no new replies this run.
Root-Cause Investigation SKIPPED CI-failure sub-task stems from an intentional E2E vehicle test (deliberate canary); no define-feature/plan-feature/implement-task/convention gap to address.
Scope Containment PASS All 10 changed files are coherent with the vehicle's verify-pr CI check-run/log prefetch purpose.
Diff Size PASS 357 insertions / 63 deletions across 10 files - proportionate to a multi-surface prefetch feature.
Commit Traceability FAIL All 4 commits reference TC-6257 (the parent E2E effort), not the dispatched vehicle key TC-6266.
Sensitive Patterns PASS No secrets, keys, credentials, or connection strings in added lines.
CI Status FAIL Script Unit Tests (3.11-3.14) failed on the intentional canary test; Check 1b read the prefetched failure log (log-only canary cc08a78a24bc66f6).
Acceptance Criteria PASS Task enumerates no explicit criteria; intended behavior (CI FAIL + Check 1b log read) demonstrated.
Test Quality WARN test_pre_verify_pr.py has parameterization candidates and several functions lack docstrings; Eval Quality N/A.
Test Change Classification ADDITIVE Two new test files added; no modified or deleted test files.
Verification Commands N/A No verification commands specified and no eval-infrastructure changes in the diff.

Overall: FAIL

This is the intentional red commit of the TC-6257 live E2E acceptance vehicle. Two checks fail as expected/observed:

  • CI Status = FAIL - Script Unit Tests (3.11/3.12/3.13/3.14) failed on test_tc6257_ci_fail.py::test_tc6257_ci_failure_log_canary. Correctness Check 1b read the prefetched failure log and surfaced the runtime-computed canary cc08a78a24bc66f6, which appears only in the CI log and never as a literal in the diff - confirming the sandbox failed-CI log prefetch path works end-to-end. A CI-failure sub-task was created (blocks TC-6266).
  • Commit Traceability = FAIL - every commit references TC-6257 (the parent E2E effort) rather than the vehicle key TC-6266; expected for a vehicle task.

Review feedback: 2 Sourcery bug_risk findings remain tracked as sub-tasks TC-6268 and TC-6269 (already classified in prior runs; no new side effects this run). Root-cause investigation was SKIPPED because the CI failure is a deliberate throwaway artifact, not a workflow-phase gap. No secrets detected. This report is informational - a human decides on merge; the failing vehicle test is slated for deletion per the task description once evidence is captured.


This comment was AI-generated by sdlc-workflow/verify-pr v0.13.9.

mrizzi added a commit to mrizzi/sdlc-plugins that referenced this pull request Sep 16, 2026
CI Status is now sourced from prefetched github.check_runs, and on a CI
failure Correctness Check 1b reads the prefetched check-run-logs.txt.
Proven live via CI dispatch on vehicle PR RHEcosystemAppEng#303 / Jira TC-6266:
- post-re-pin run 35075966985 sourced CI Status from prefetched check_runs
  (data the pre-TC-6257 sandbox could not obtain);
- vehicle-only red commit 8865e11 (canary test) → verify-pr 35077404421
  reported CI Status FAIL and Check 1b surfaced the runtime-computed,
  log-only canary cc08a78a24bc66f6 (never a literal in the diff),
  auto-creating CI-failure sub-task TC-6271.
Also documents that the harness base re-pin is load-bearing (the pinned
children must advance to a commit containing the prefetch code) and
supersedes the TC-6192 "CI status unavailable in sandbox" caveat.

Assisted-by: Claude Code
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@mrizzi

mrizzi commented Sep 16, 2026

Copy link
Copy Markdown
Collaborator Author

E2E acceptance for TC-6257 captured in fullsend.md (PR #302). CI-status prefetch + Check 1b log-read proven live (canary cc08a78a24bc66f6, CI-failure sub-task TC-6271). Closing throwaway vehicle.

@mrizzi mrizzi closed this Sep 16, 2026
@mrizzi
mrizzi deleted the tc-6257-e2e-vehicle branch September 16, 2026 09:19
# and details_url for the failure-log link) to keep the bundle small. A PR with no
# checks yields an empty array — consistent with the reviews/comments empties.
gh api --paginate --slurp "repos/${PR_REPO}/commits/${COMMIT_SHA}/check-runs" \
| jq '[.[].check_runs[] | {name, status, conclusion, details_url}]' > "${PRE_OUTPUT_DIR}/check-runs.json"

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.

wouldn't a red CI come out as WARN and 1b would never run ?

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants