Skip to content

feat(fullsend): switch agents to claude-opus-5-5 at explicit medium effort - #363

Merged
mrizzi merged 4 commits into
mainfrom
TC-7278
Nov 2, 2026
Merged

mrizzi merged 4 commits into
mainfrom
TC-7278

Conversation

@mrizzi

@mrizzi mrizzi commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • Pin harness/verify-pr.yaml, harness/triage-security.yaml and the native eval agent (evals/fullsend/run.py defaults, suite harness.yaml/eval.yaml) to claude-opus-5-5 at explicit effort: medium, on the fullsend v0.52.0 CLI and image from TC-7300.
  • Replace the floating opus alias in both agent frontmatters with the concrete claude-opus-5-5 ID.
  • Add plugins/sdlc-workflow/scripts/test_model_pins.py. It fails if any production/eval pin disagrees with the others, uses a floating alias, or if a .fullsend/ composing child overrides the base model/effort.
  • triage-security fix: create FULLSEND_OUTPUT_DIR in Step 0.6's sandbox-mode branch only. fullsend's Claude runtime does not create this directory. claude-opus-4-8 created it on its own, but claude-opus-5-5 follows the single-write rule and stopped without writing a result. Covered by a new test; GATE_COMMANDS_SHA256 updated.
  • Re-pin both .fullsend/harness/*.yaml to dc6c74ae (upstream branch) and regenerate .fullsend/lock.yaml with the fullsend v0.52.0 CLI (second lock run unchanged).
  • Docs: new fullsend.md section "Managing the agent model" (where model/effort are set, which setting wins, why concrete IDs and explicit effort, change procedure including the sandbox image's Claude Code version, Vertex prerequisite, pre-merge proof recipe, forced-tool_choice note); native eval model/effort source documented in docs/testing/fullsend-gate-evals.md.

Precedence, verified in fullsend source: --model > FULLSEND_MODEL > config agents: entry > harness model: > agent frontmatter. In production the harness value wins.

Out of scope: the remaining claude-opus-4-8 references are the eval judge model, which is tracked in TC-7279.

Pre-merge live proofs

Verification

  • python3 -m pytest plugins/sdlc-workflow/scripts/: 812 passed, 3 skipped
  • uvx skillsaw: 0 errors (triage-security SKILL.md 15,911/16k tokens); claude plugin validate plugins/sdlc-workflow: passed

The red verify-pr / Harness run check is TC-7313 (the Jira service account cannot edit its own comments) and is unrelated to this PR.

Merge with a merge commit, so the pinned SHA survives.

Implements TC-7278

🤖 Generated with Claude Code

@sourcery-ai

sourcery-ai Bot commented Oct 30, 2026

Copy link
Copy Markdown
Contributor

Sorry @mrizzi, you've used your own review budget of 250,000 diff characters for the last 7 days.

You can request another review in 3 days and 8 hours by commenting @sourcery-ai review. Upgrade to get a review now.

@sourcery-ai

sourcery-ai Bot commented Oct 30, 2026

Copy link
Copy Markdown
Contributor

Reviewer's Guide

The PR standardizes production and native-eval agent execution on the concrete claude-opus-5-5 model at explicit medium effort, adds automated fail-closed protection against pin drift and child overrides, documents the model-management and pre-merge proof workflow, and updates the pinned Fullsend harness dependencies and lockfile.

Sequence diagram for Fullsend model and effort resolution

sequenceDiagram
    participant Operator
    participant Run as Fullsend run
    participant Harness as Harness config
    participant Agent as Agent frontmatter
    participant Claude as Claude runtime
    participant Vertex

    Operator->>Run: fullsend run
    Run->>Harness: Read model and effort
    alt model flag or FULLSEND_MODEL is set
        Run->>Run: EffectiveModel
    else no higher-priority model
        Run->>Agent: Read fallback model
    end
    Run->>Claude: --model claude-opus-5-5
    Run->>Claude: --effort medium
    Claude->>Vertex: Inference request
    Vertex-->>Claude: Model response
    Claude-->>Run: Run result and metrics
Loading

Flow diagram for validating model pins before merge

flowchart TD
    Edit[Edit production and eval model pins] --> Pin[Set claude-opus-5-5 and medium effort]
    Pin --> Test[test_model_pins.py]
    Test -->|pass| Repin[Re-pin .fullsend harness bases]
    Test -->|fail| Fix[Fix alias, drift, or child override]
    Fix --> Test
    Repin --> Lock[Run fullsend lock]
    Lock --> Proof[Run verify-pr, triage-security, and native eval proofs]
    Proof --> Metrics[Confirm provider model in metrics.json]
    Metrics --> Merge[Merge with a merge commit]
Loading

File-Level Changes

Change Details Files
Pin production and native evaluation agents to Claude Opus 5.5 with explicit medium effort across all runtime and configuration entry points.
  • Update production harness model and effort values.
  • Replace agent frontmatter aliases with the concrete model ID.
  • Change native eval defaults and suite metadata to match the production pin.
  • Document precedence, prerequisites, update procedure, verification, and judge-model limitations.
harness/verify-pr.yaml
harness/triage-security.yaml
plugins/sdlc-workflow/agents/verify-pr.md
plugins/sdlc-workflow/agents/triage-security.md
evals/fullsend/run.py
evals/fullsend/triage-security/harness.yaml
evals/fullsend/triage-security/eval.yaml
fullsend.md
docs/testing/fullsend-gate-evals.md
Add fail-closed consistency checks to prevent model or effort drift and unintended composing-child overrides.
  • Collect pins from YAML, Markdown frontmatter, and Python argparse defaults without importing evaluation code.
  • Reject missing pins, floating aliases, disagreements, and .fullsend child overrides.
  • Add mutation-based tests covering drift, aliases, overrides, and missing defaults.
plugins/sdlc-workflow/scripts/test_model_pins.py
Re-pin the Fullsend composing harnesses to the upstream branch and regenerate the dependency lockfile.
  • Move both base references to upstream commit b709de7 with updated content hashes.
  • Regenerate dependency and artifact hashes, including the new pin-test script, using the supported Fullsend toolchain.
  • Preserve immutable lock metadata for both harnesses.
.fullsend/harness/verify-pr.yaml
.fullsend/harness/triage-security.yaml
.fullsend/lock.yaml

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 Oct 30, 2026 •

Copy link
Copy Markdown

🤖 Finished Verify Pr · ✅ Success · Started 8:34 AM UTC · Completed 8:41 AM UTC

Commit: aeddaf8 · View workflow run →

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

@fullsend-ai-review

Copy link
Copy Markdown

Verification Report for TC-7278 (commit aeddaf8)

Check Result Details
Review Feedback N/A No reviews or inline review comments on the PR
Root-Cause Investigation N/A No sub-tasks created (no review feedback, CI, or eval failures)
Scope Containment PASS 13 changed files exactly match the task's 12 Files to Modify + 1 Files to Create
Diff Size PASS +449/-140 across 13 files; proportionate (lock.yaml regen is the bulk)
Commit Traceability PASS Both commits reference TC-7278 (Implements trailer)
Sensitive Patterns PASS No secrets/credentials in added lines; sha256 pins are integrity hashes
CI Status PASS All 8 check-runs pass/skip; 'Eval PR Run' commit status success; no failures/pending
Acceptance Criteria WARN 8 of 8 satisfied from diff/CI; 4 runtime live-proof criteria not confirmable in sandbox
Test Quality PASS Repetitive Test PASS, Test Documentation PASS (6/6 docstrings), Eval Quality N/A
Test Change Classification ADDITIVE test_model_pins.py is a new file; no modified/deleted tests
Verification Commands PASS git grep reasoned clean of live refs; pytest covered by Script Unit Tests (3.11-3.14) green

Overall: WARN

All intent, security, CI, and test-quality checks pass. The implementation switches all production and eval agent pins to claude-opus-5-5 at explicit effort: medium, pins the concrete model ID in both agent frontmatters, re-pins and re-locks the .fullsend/ harnesses, adds a fail-closed model-pin consistency test (test_model_pins.py, 6 documented tests), and documents model management in fullsend.md. Acceptance Criteria is WARN (not FAIL): all 8 criteria are satisfied by the diff/CI or by the enabling artifacts present in it, but the 3 pre-merge live-proof criteria (verify-pr, triage-security, native eval agent running on the new model) and the "run that does not reach the new model is a failure" criterion are runtime-evidence criteria that cannot be confirmed from the diff inside the sandbox — a human reviewer should confirm the live-proof run links/logs are attached to the PR before merge. No code-change requests, no sub-tasks created.


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

@fullsend-ai-review

fullsend-ai-review Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

🤖 Finished Verify Pr · ❌ Failure (validation failed after 2 iteration(s)) · Started 9:01 AM UTC · Completed 9:03 AM UTC

Commit: 644c9bd · View workflow run →

Runtime: claude · Model: claude-opus-5-5 · Effort: medium

…ffort

Pin verify-pr, triage-security and the native eval agent to the concrete
claude-opus-5-5 model ID with explicit effort medium, replace the floating
opus alias in both agent frontmatters, add a fail-closed model-pin
consistency test, and document how the agent model is managed.

Implements TC-7278

Assisted-by: Claude Code
Co-Authored-By: Claude Opus 5.5 <[email protected]>
…4ce00b

Move both composing children's base: to the rebased model-switch commit
and regenerate lock.yaml with the fullsend v0.52.0 CLI (second lock run
unchanged).

Implements TC-7278

Assisted-by: Claude Code
Co-Authored-By: Claude Opus 5.5 <[email protected]>
@fullsend-ai-review

fullsend-ai-review Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

🤖 Finished Verify Pr · ❌ Failure (post-script /home/runner/work/sdlc-plugins/sdlc-plugins/.fullsend/.fullsend-cache/resources/sha256/709bb41caf28726c869c28b47ac2d2035d56553d89fd6909ed42edfe6c4f4d33/scripts/post-verify-pr.sh failed: ex…) · Started 9:18 AM UTC · Completed 9:23 AM UTC

Commit: a1136ce · View workflow run →

Runtime: claude · Model: claude-opus-5-5 · Effort: medium · Cost: $2.31

@fullsend-ai-review

Copy link
Copy Markdown

Verification Report for TC-7278 (commit a1136ce)

Check Result Details
Review Feedback N/A No reviews or inline review comments on the PR
Root-Cause Investigation N/A No sub-tasks created
Scope Containment WARN All 13 task files present; 1 extra file .github/workflows/tc-7278-verify-pr-proof.yml (temporary pre-merge proof, commit a1136ce marked "drop before merge")
Diff Size PASS +568/-77 across 14 files (13 expected); bulk is lock.yaml regen, new test, docs, temp workflow
Commit Traceability PASS All 3 commits reference TC-7278
Sensitive Patterns PASS No literal secrets; hits are ${{ secrets.* }} refs, pinned URLs, and sha256 integrity hashes
CI Status PASS All 16 completed check-runs success/skipped; Eval PR Run status success; only in-progress entry is this verify-pr run
Acceptance Criteria FAIL 5 of 8 criteria met; triage-security and native-eval live proofs have no attached evidence; verify-pr live proof in progress (this run)
Test Quality PASS Repetitive Test PASS (parametrized), Test Documentation PASS (all tests have docstrings), Eval Quality: N/A
Test Change Classification ADDITIVE New test_model_pins.py only; no modified/deleted tests
Verification Commands PASS git grep claude-opus-4-8 hits only the judge-model pin (TC-7279 scope) and test drift fixtures; 19/19 model-pin tests pass; Script Unit Tests green on 3.11–3.14

Overall: FAIL

  • Acceptance Criteria (FAIL): the code, pin, re-lock, drift-test and documentation criteria are met. Both harnesses, both agent frontmatters (opus → claude-opus-5-5), the run.py defaults and the eval suite configs select claude-opus-5-5 at effort: medium. The .fullsend/ base #sha256= pins and the lock.yaml per-file hashes match the PR-head files. test_model_pins.py fails closed on drift, aliases, child overrides and a missing default. fullsend.md adds "Managing the agent model".
  • Missing live proofs: no run links or logs are attached for (a) the local fullsend run of the triage-security production harness on claude-opus-5-5 or (b) the native eval agent paid run per docs/testing/fullsend-gate-evals.md. CI cannot prove the eval side, because eval-pr-run.yml sources run.py from main. The verify-pr live proof is this run; confirm that it completes, validates and posts. Attach all proofs to the PR, then re-run verification.
  • Before merge: drop commit a1136ce, which adds the temporary .github/workflows/tc-7278-verify-pr-proof.yml. Confirm that pinned commit 74ce00b is on an upstream branch (this could not be checked from the sandbox), and merge with a merge commit.
  • Note: claude-opus-4-8 remains as the eval judge model (.github/scripts/run-native-fullsend-evals.sh) and in its tests. This is outside the agent-pin scope (TC-7279; see the forced-tool_choice note in fullsend.md).

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

@mrizzi

mrizzi commented Nov 2, 2026

Copy link
Copy Markdown
Collaborator Author

Pre-merge live proof — verify-pr (TC-7278)

Run: https://github.com/RHEcosystemAppEng/sdlc-plugins/actions/runs/41419304266 (temporary pull_request workflow copy, commit a1136cea, now dropped; the main copy run 41419300210 was cancelled so it could not win the shared concurrency group).

Check Result
fullsend CLI fullsend version 0.52.0
Sandbox image fullsend-code@sha256:3055d4f5… (TC-7300)
Model / effort Runtime: claude · Model: claude-opus-5-5 · Effort: medium · Cost: $2.31
Agent exited 0 (179.8s)
Schema validation ✓ Validation passed: output/agent-result.json
PR report ✓ Posted report to PR #363
Jira comment ✗ 403 You do not have permission to edit issues in this project when updating the existing sticky comment 19223626, a known SA permission gap tracked in TC-7313, independent of this PR

The agent's verdict on this run (FAIL) only reflects that the live-proof evidence was not yet attached when it ran.

Earlier failed attempts (recorded as failures): run 41029966351. Attempt 1 lost the concurrency race; attempt 2 hit 400 Claude Code 2.1.156 does not support this model on the old v0.37.0-era image, which TC-7300 fixed.

Remaining: triage-security local report-only run, native eval local paid run.

@fullsend-ai-review

fullsend-ai-review Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

🤖 Finished Verify Pr · ❌ Failure (post-script /home/runner/work/sdlc-plugins/sdlc-plugins/.fullsend/.fullsend-cache/resources/sha256/1d2419c69738b091b2383b4ef779dc224f0e605d975959f75e7471b9f1333c85/scripts/post-verify-pr.sh failed: ex…) · Started 9:27 AM UTC · Completed 9:36 AM UTC

Commit: d005d47 · View workflow run →

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

@fullsend-ai-review

fullsend-ai-review Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

Verification Report for TC-7278 (commit d005d47)

Check Result Details
Review Feedback N/A No reviews or inline review comments on the PR
Root-Cause Investigation N/A No sub-tasks created (nothing to investigate)
Scope Containment PASS 13 PR files exactly match the 13 task-spec files; no out-of-scope or missing files
Diff Size PASS 469 lines across 13 files; proportionate to a re-pin/re-lock task
Commit Traceability PASS Both commits reference TC-7278
Sensitive Patterns PASS No secrets in added lines (only lock-file integrity hashes, model IDs, commit SHAs)
CI Status PASS All check-runs success (Sourcery skipped); Eval PR Run status success
Acceptance Criteria WARN 8/8 criteria met in code; live-proof criteria 4-6 rest on human-attached runs, not independently reproducible in-sandbox
Test Quality PASS Repetitive-test detection PASS, test documentation PASS, Eval Quality N/A
Test Change Classification ADDITIVE New test file test_model_pins.py; no modified/deleted tests
Verification Commands PASS git grep leftovers are out-of-scope judge model + deliberate drift fixtures; pytest proven green by CI Script Unit Tests

Overall: WARN

The PR cleanly implements the claude-opus-5-5 / effort medium model switch across all 13 task-spec files, adds a fail-closed model-pin consistency test (test_model_pins.py), and delivers the required documentation. Scope, diff size, commit traceability, security, CI, test quality, and verification commands all pass.

The single WARN is on Acceptance Criteria: all eight criteria are satisfied in code, but the three pre-merge live-proof criteria (verify-pr, triage-security, native eval) rest on human-attached run links/logs that cannot be independently reproduced in the read-only sandbox. The verify-pr proof is evidenced by the PR report comments showing Model: claude-opus-5-5 · Effort: medium; the triage-security and native-eval proofs are documented but their run logs are not present in the verification inputs.

No review feedback, CI failures, or eval failures were found, so no sub-tasks or root-cause tasks were created.

Note: this verification ran in a sandbox whose working tree was checked out at main rather than the PR head; analysis relied on the pre-fetched authoritative PR diff and the real head-SHA CI results. Merging remains a human decision.


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

Previous run

Verification Report for TC-7278 (commit d005d47)

Check Result Details
Review Feedback N/A No reviews or inline review comments on the PR
Root-Cause Investigation N/A No sub-tasks created (nothing to investigate)
Scope Containment PASS 13 PR files exactly match the 13 task-spec files (12 modify + 1 create); no out-of-scope paths
Diff Size PASS +392/-77 across 13 files; bulk is lock.yaml regen, new test, and new docs — proportionate
Commit Traceability PASS Both commits carry an Implements TC-7278 trailer
Sensitive Patterns PASS No secrets/keys/credentials in 405 added lines; lock.yaml sha256s are content pins, not secrets
CI Status PASS All head-SHA checks green (Sourcery skipped, Eval PR Run success); no failures
Acceptance Criteria WARN Static/code criteria met (pins, re-pin+re-lock, fail-closed test, docs); 3 pre-merge live-proof criteria need paid runs — human/process obligation, not a code defect (author posted proofs in PR comments)
Test Quality PASS test_model_pins.py: all 6 tests documented, non-repetitive; Eval Quality N/A
Test Change Classification ADDITIVE Sole test file is new (+182 lines); no tests removed or weakened
Verification Commands PASS Agent-model switch complete; residual claude-opus-4-8 are out-of-scope judge refs (TC-7279); pin test validated via CI + targeted run (local pytest unavailable)

Overall: WARN

The PR cleanly implements the switch of the verify-pr, triage-security, and native eval agents to claude-opus-5-5 at explicit effort medium: the floating opus alias is replaced with a concrete model ID in both agent frontmatters, every harness/eval pin is updated, the .fullsend/ composing children are re-pinned and lock.yaml regenerated in the same PR, a fail-closed test_model_pins.py guards against drift, and fullsend.md / docs/testing/fullsend-gate-evals.md document how the model is managed.

Overall WARN is driven solely by the Acceptance Criteria row: the three "pre-merge live proof" criteria (verify-pr temporary-workflow run, local triage-security run, local paid native-eval run) require paid inference and network and cannot be confirmed by static analysis in the sandbox. They are a human/process obligation rather than a code defect — and the PR comment thread shows the author already posted live-proof evidence of runs on claude-opus-5-5. No code changes were requested; no sub-tasks were created.


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

Previous run (2)

Verification Report for TC-7278 (commit d005d47)

Check Result Details
Review Feedback N/A No reviews or inline review comments on the PR
Root-Cause Investigation N/A No sub-tasks created (nothing to investigate)
Scope Containment PASS 13 PR files exactly match the 13 task-spec files; no out-of-scope or unimplemented paths
Diff Size PASS 469 lines across 13 files, concentrated in regenerated lock.yaml, the new test, and docs — proportionate
Commit Traceability PASS Both commits reference TC-7278
Sensitive Patterns PASS No secrets or credentials in any added line
CI Status PASS All check-runs success/skipped; "Eval PR Run" commit status success
Acceptance Criteria WARN 4/4 statically-verifiable criteria met (1, 2, 3, 8); criteria 4–7 are pre-merge live proofs not verifiable from the diff
Test Quality PASS Repetitive Test Detection PASS, Test Documentation PASS, Eval Quality N/A
Test Change Classification ADDITIVE Only test change is the new test_model_pins.py; no modified/deleted test files
Verification Commands PASS git grep: no live agent model refs to claude-opus-4-8 remain (3 hits are the separate judge model, TC-7279); pytest green in CI

Overall: WARN

The PR cleanly implements the model switch to claude-opus-5-5 at explicit effort medium. Scope, diff size, commit traceability, security, CI, test quality, and verification commands all pass. WARN is driven solely by Acceptance Criteria: the four statically-verifiable criteria (1 model/effort migration, 2 re-pin + re-lock, 3 fail-closed drift test, 8 documentation) are all met, but criteria 4–7 are pre-merge live proofs (verify-pr / triage-security / native-eval runs on the new model, and failure-recording behavior) that cannot be verified from the diff and must be confirmed by a human against the run links/logs attached to the PR. No sub-tasks were created. This report is informational — a human decides whether to merge.


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

@mrizzi

mrizzi commented Nov 2, 2026

Copy link
Copy Markdown
Collaborator Author

Note on the red verify-pr / Harness run check: this failure is not caused by this PR. It is the known Jira service-account permission gap tracked in TC-7313.

The run itself succeeds: the agent exits 0, the output passes schema validation, and the report is posted on this PR. Only the final Jira step fails, when it tries to update the existing verify-pr sticky comment on TC-7278:

fullsend post-comment failed for TC-7278: ... set comment property fullsend.sticky-marker on comment 19223626 of TC-7278: jira api: 403 You do not have permission to edit issues in this project.

The service account can create comments but not edit its own, so every re-run on a task that already has a sticky comment fails this way. PR #364 (TC-7300) showed the same failure. The fix is the permission grant tracked in TC-7313.

@fullsend-ai-review

fullsend-ai-review Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

🤖 Finished Verify Pr · ❌ Failure (post-script /home/runner/work/sdlc-plugins/sdlc-plugins/.fullsend/.fullsend-cache/resources/sha256/1d2419c69738b091b2383b4ef779dc224f0e605d975959f75e7471b9f1333c85/scripts/post-verify-pr.sh failed: ex…) · Started 1:27 PM UTC · Completed 1:36 PM UTC

Commit: d005d47 · View workflow run →

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

@fullsend-ai-review

fullsend-ai-review Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

🤖 Finished Verify Pr · ✅ Success · Started 2:45 PM UTC · Completed 2:55 PM UTC

Commit: d005d47 · View workflow run →

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

Fullsend's Claude runtime exports FULLSEND_OUTPUT_DIR without creating
it. claude-opus-4-8 created it implicitly; claude-opus-5-5 follows the
skill's single-write rule and stops, so 036-valid/037-release produced no
agent-result.json (native proof 0/14). The Step 0.6 sandbox branch now
runs mkdir -p; interactive mode is unchanged. Update GATE_COMMANDS_SHA256
and cover the directory creation.

Implements TC-7278

Assisted-by: Claude Code
Co-Authored-By: Claude Opus 5.5 <[email protected]>
…c6c74a

Move both composing children's base: to the triage-security output-dir
fix and regenerate lock.yaml with the fullsend v0.52.0 CLI (second lock
run unchanged).

Implements TC-7278

Assisted-by: Claude Code
Co-Authored-By: Claude Opus 5.5 <[email protected]>

@github-actions github-actions 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.

Native Fullsend Eval Results

Head: 1894232
Merge: 722a8f1
Trusted workflow: 50974cb
Reviewed eval source: 50974cb

No safe native result was produced; native execution/approval failed.

@github-actions github-actions 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.

Native Fullsend Eval Results

Head: dc6c74a
Merge: 4ae1116
Trusted workflow: 50974cb
Reviewed eval source: 50974cb

No safe native result was produced; native execution/approval failed.

@mrizzi

mrizzi commented Nov 2, 2026

Copy link
Copy Markdown
Collaborator Author

Pre-merge live proof: native eval agent + triage-security model path (TC-7278)

Ran in CI against CI's Vertex project, using a temporary pull_request workflow (now dropped) that copies eval-pr-run.yml's native job but takes run.py from this branch. The regular Eval PR Run uses main's run.py, so it cannot prove this.

Final run, PASS: https://github.com/RHEcosystemAppEng/sdlc-plugins/actions/runs/41474951603 (head 18942324)

  • run.py under test: --model claude-opus-5-5, --effort medium
  • One-token probe: HTTP 200; model=claude-opus-5-5
  • Every case: requested_model=claude-opus-5-5 model=claude-opus-5-5 override_source=--model flag
  • execution_valid: true, 24/24 assertions (034-empty 5/5, 035-malformed 5/5, 036-valid 7/7, 037-release 7/7)

This run exercises the same triage-security agent path as the production harness: same skill, policy, provider, image (3055d4f5…) and model/effort, which test_model_pins.py keeps in sync. It uses synthetic input instead of the Jira prefetch, which is runner-side Python and does not involve the model.

Bug found and fixed in this PR (dc6c74ae). The first run (https://github.com/RHEcosystemAppEng/sdlc-plugins/actions/runs/41467601165) scored only 9/24: 036-valid and 037-release were 0/14 and wrote no agent-result.json (the diagnostic run https://github.com/RHEcosystemAppEng/sdlc-plugins/actions/runs/41469976987 confirmed this).

  • Cause: fullsend's Claude runtime exports FULLSEND_OUTPUT_DIR but never creates it. Only its OpenCode runtime does. claude-opus-4-8 created the directory on its own; claude-opus-5-5 follows the skill's "only allowed write" rule and stopped.
  • Fix: Step 0.6's sandbox-mode branch runs mkdir -p "$FULLSEND_OUTPUT_DIR". This runs only when FULLSEND_OUTPUT_DIR is set; interactive mode is unchanged. A new test covers it, and GATE_COMMANDS_SHA256 is updated.
  • Re-pinned and re-locked to dc6c74ae (10c001c1).
  • The runtime inconsistency will be reported to fullsend upstream.

@github-actions

github-actions Bot commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

Eval Results

Source head: 10c001c
Merge: d8fd51b

Eval Results: triage-security

Eval Passed Failed Pass Rate
eval-1 13/13 0 100%
eval-10 5/5 0 100%
eval-11 5/5 0 100%
eval-12 5/5 0 100%
eval-13 5/5 0 100%
eval-14 5/5 0 100%
eval-15 5/5 0 100%
eval-16 7/7 0 100%
eval-17 5/5 0 100%
eval-18 5/5 0 100%
eval-19 5/5 0 100%
eval-2 5/5 0 100%
eval-20 4/4 0 100%
eval-21 4/4 0 100%
eval-22 4/4 0 100%
eval-23 4/4 0 100%
eval-24 4/4 0 100%
eval-25 4/4 0 100%
eval-26 5/5 0 100%
eval-27 5/5 0 100%
eval-28 5/5 0 100%
eval-29 5/5 0 100%
eval-3 5/5 0 100%
eval-30 4/4 0 100%
eval-31 4/4 0 100%
eval-32 4/4 0 100%
eval-33 8/8 0 100%
eval-34 7/7 0 100%
eval-4 5/5 0 100%
eval-5 6/6 0 100%
eval-6 6/6 0 100%
eval-7 5/5 0 100%
eval-8 8/8 0 100%
eval-9 5/5 0 100%

Pass rate: 100% · Tokens: 128,619 · Duration: 51s

Baseline (2bbadc8e): 97% · 60,621 tokens · 137s


Generated by sdlc-workflow/run-evals v0.13.10

@github-actions github-actions 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.

Native Fullsend Eval Results

Head: 10c001c
Merge: d8fd51b
Trusted workflow: 50974cb
Reviewed eval source: 50974cb

Native job: success; complete: true.
Execution evidence: valid; quality score (advisory): 24/24 passed.

Case Execution evidence Quality score (advisory)
034-empty valid 5/5
035-malformed valid 5/5
036-valid valid 7/7
037-release valid 7/7

@fullsend-ai-review

fullsend-ai-review Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

🤖 Finished Verify Pr · ✅ Success · Started 4:39 PM UTC · Completed 4:48 PM UTC

Commit: 10c001c · View workflow run →

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

@fullsend-ai-review

Copy link
Copy Markdown

Verification Report for TC-7278 (commit 10c001c)

Check Result Details
Review Feedback N/A No inline review comments; the only PR reviews are automated github-actions[bot] "Native Fullsend Eval Results" status posts (non-substantive).
Root-Cause Investigation N/A No sub-tasks created, so nothing to investigate.
Scope Containment WARN All 13 task files present (no unimplemented files); 3 justified out-of-scope files from the claude-opus-5-5 runtime fix: triage-security SKILL.md (mkdir FULLSEND_OUTPUT_DIR), its test, and the gate-hash test (commit dc6c74a).
Diff Size PASS 544 lines across 16 files is proportionate: regenerated lock.yaml (164), required new test_model_pins.py (182), and fullsend.md docs (105).
Commit Traceability PASS All 4 commits carry an "Implements TC-7278" trailer.
Sensitive Patterns PASS No secrets, credentials, keys, or sensitive data in added lines; sha256 values are content-integrity hashes, not secrets.
CI Status PASS All head-SHA check-runs success/skipped (Plugin Validation, Script Unit Tests 3.11-3.14, Skill Lint, Trigger Eval Dispatch); Eval PR Run commit status success.
Acceptance Criteria PASS 8 of 8 met. AC1-3 and AC8 verified from the diff (all agent/eval pins = claude-opus-5-5/medium, .fullsend re-pinned+re-locked, fail-closed test_model_pins.py, docs delivered); AC4-7 confirmed via attached pre-merge live-proof comments + successful verify-pr/Eval PR runs (indirect, not re-executable in sandbox).
Test Quality PASS No repetitive/parameterizable tests; all added/modified test functions carry docstrings. Eval Quality: N/A (no eval result reviews on the PR).
Test Change Classification ADDITIVE New test_model_pins.py plus an added sandbox-mode test function and tightened assertions; no reductive signals.
Verification Commands PASS All agent/skill/eval model pins migrated to claude-opus-5-5 at effort medium; fail-closed drift/alias cases trip as designed. The only remaining claude-opus-4-8 strings are the separately-managed --judge-model (TC-7279, out of scope) and deliberate drift-test fixtures. Full pytest suite proven green by CI (Script Unit Tests 3.11-3.14).

Overall: WARN

Overall WARN — the single non-PASS check is Scope Containment (WARN), which is informational here: the 3 out-of-scope files are the direct, justified consequence of the model switch (claude-opus-5-5 follows the skill's single-write rule and no longer implicitly creates FULLSEND_OUTPUT_DIR, so commit dc6c74a adds a mkdir -p to triage-security SKILL.md plus its test coverage and the GATE_COMMANDS_SHA256 tripwire update). All substantive quality gates pass: no secrets, CI green, all 8 acceptance criteria satisfied, the required fail-closed model-pin test is present, and tests are additive and documented. No code-change requests, CI failures, or eval regressions were found, so no sub-tasks were created. This report is informational; a human reviewer decides whether to merge.


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

@mrizzi
mrizzi merged commit 7c25e5c into main Nov 2, 2026
22 of 23 checks passed
@mrizzi
mrizzi deleted the TC-7278 branch November 2, 2026 16:55
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.

1 participant