Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
190 commits
Select commit Hold shift + click to select a range
682d53a
docs(verify-pr): record TC-5805 environment + resolution findings
mrizzi Aug 27, 2026
7f2bc8c
feat(verify-pr): add standalone root-level fullsend harness
mrizzi Aug 31, 2026
118ca19
feat(verify-pr): add Vertex AI provider and profile for fullsend harness
mrizzi Aug 31, 2026
2cb0b75
feat(verify-pr): add read-only sandbox policy with no tier-1 egress
mrizzi Aug 31, 2026
8282947
fix(verify-pr): add **/pi to sandbox policy binary allowlist
mrizzi Aug 31, 2026
4cfc42d
feat(verify-pr): split-trust I/O — schemas, prefetch, native validati…
mrizzi Aug 31, 2026
859cbaa
fix(verify-pr): derive PR diffstat with git apply --stat
mrizzi Sep 1, 2026
fd05082
fix(verify-pr): paginate gh api review/comment fetches in prefetch
mrizzi Sep 1, 2026
d668e20
fix(verify-pr): coerce null Jira description to {} in prefetch transform
mrizzi Sep 1, 2026
8838ba0
fix(verify-pr): end-anchor pre-verify-pr.sh PR-URL regex
mrizzi Sep 1, 2026
f002c1a
fix(verify-pr): derive COMMIT_SHA from headRefOid in pre-verify-pr.sh
mrizzi Sep 1, 2026
f3bb34b
docs(verify-pr): sync github-bundle schema descriptions to shipped de…
mrizzi Sep 1, 2026
752c43b
feat(verify-pr): add host-side write path with native Jira comments
mrizzi Sep 1, 2026
1695632
fix(verify-pr): render post_comment body_adf to markdown for native J…
mrizzi Sep 1, 2026
3ca8ba9
fix(verify-pr): accept result.json fallback in post-verify-pr.sh
mrizzi Sep 1, 2026
32e8577
fix(verify-pr): select highest-numbered iteration output numerically
mrizzi Sep 1, 2026
99da584
fix(verify-pr): render ADF taskList/taskItem in adf_to_markdown
mrizzi Sep 1, 2026
a75e12a
fix(verify-pr): make execute_post_report GitHub comment idempotent on…
mrizzi Sep 1, 2026
239c0df
fix(verify-pr): parse paginated gh api output in _find_report_comment_id
mrizzi Sep 1, 2026
1213fb1
fix(verify-pr): escape markdown-active chars in _render_adf_inline li…
mrizzi Sep 1, 2026
7b01dc5
fix(verify-pr): render non-text inline ADF nodes in _render_adf_inline
mrizzi Sep 1, 2026
fcacee5
fix(verify-pr): constrain post_comment "issue" to Jira-key format in …
mrizzi Sep 1, 2026
dac5676
docs(verify-pr): document same-commit report retry-update in Step 9
mrizzi Sep 1, 2026
1bd5f4a
fix(verify-pr): accept {{ref.key}} placeholder in post_comment.issue …
mrizzi Sep 2, 2026
c8c59a3
fix(verify-pr): guard _render_adf_date against out-of-range timestamps
mrizzi Sep 2, 2026
2302f64
fix(verify-pr): fail fast on empty issue_type in create_issue
mrizzi Sep 2, 2026
b7c3470
fix(verify-pr): scope Jira sticky comment marker per purpose
mrizzi Sep 2, 2026
9f5b335
fix(verify-pr): normalize commit_sha in GitHub report dedup marker
mrizzi Sep 2, 2026
1a25fe3
fix(verify-pr): resolve report_md refs independent of action order
mrizzi Sep 2, 2026
931466a
fix(verify-pr): render ADF table/panel/blockquote/media blocks
mrizzi Sep 2, 2026
b399dd9
fix(verify-pr): escape line-leading markdown block markers in ADF text
mrizzi Sep 2, 2026
7ce05af
fix(verify-pr): canonicalize commit SHA up to full form for dedup marker
mrizzi Sep 2, 2026
2197cc7
docs(conventions): document Python test suite and enforce pytest exec…
mrizzi Sep 2, 2026
6fc19c1
ci(scripts): run pytest suite on push and PR to main
mrizzi Sep 2, 2026
1aeb30d
ci(scripts): temporarily run pytest on the feature branch
mrizzi Sep 2, 2026
3283e42
ci(scripts): run pytest on a Python 3.11-3.14 matrix
mrizzi Sep 2, 2026
b8592cf
docs(conventions): correct script test-coverage and dependency claims
mrizzi Sep 2, 2026
2c8defa
feat(verify-pr): re-sync FULLSEND_OUTPUT_DIR sandbox dual-mode onto S…
mrizzi Sep 2, 2026
8df7aa2
fix(verify-pr): validate prefetched sandbox input against schema
mrizzi Sep 2, 2026
683b957
fix(verify-pr): fail fast on bad sandbox prefetch instead of credenti…
mrizzi Sep 2, 2026
d0ce26e
feat(verify-pr): prefetch related-issue metadata for sandbox idempotency
mrizzi Sep 2, 2026
bb028cb
fix(verify-pr): post Jira report from report_adf, not report_md
mrizzi Sep 2, 2026
e526abd
fix(verify-pr): require idempotency bundle in sandbox prefetch schema
mrizzi Sep 3, 2026
e827402
fix(verify-pr): require per-item fields in idempotency.related_issues
mrizzi Sep 3, 2026
e696d00
fix(verify-pr): fail fast on exported-but-empty FULLSEND_OUTPUT_DIR
mrizzi Sep 3, 2026
34e6362
feat(verify-pr): make URL-pinnable base harness + root plugin.json ma…
mrizzi Sep 4, 2026
888a178
feat(verify-pr): post GitHub report + Jira comments via native fullse…
mrizzi Sep 7, 2026
8fdaa49
chore(verify-pr): pin fullsend base to 888a1781 + re-lock; add .fullsend
mrizzi Sep 7, 2026
198fbb7
fix(verify-pr): compute Commit Traceability deterministically on runner
mrizzi Sep 7, 2026
3ff588f
chore(verify-pr): re-pin .fullsend base to 198fbb7c + re-lock
mrizzi Sep 7, 2026
e5c8253
fix(verify-pr): anchor own bundled files to ${CLAUDE_PLUGIN_ROOT}
mrizzi Sep 7, 2026
56a1c9e
chore(verify-pr): re-pin .fullsend base URL to e5c82535, re-lock
mrizzi Sep 7, 2026
b75e964
fix(verify-pr): use ${CLAUDE_PLUGIN_ROOT} as a body token, not an env…
mrizzi Sep 7, 2026
efa39e0
chore(verify-pr): re-pin .fullsend base URL to b75e9648, re-lock
mrizzi Sep 7, 2026
1d59ab5
fix(verify-pr): make PR-URL extraction format-agnostic
mrizzi Sep 8, 2026
ff5fb29
chore(verify-pr): re-pin .fullsend base URL to 1d59ab57, re-lock
mrizzi Sep 8, 2026
87f7e9b
fix(verify-pr): hyphenate Jira post_comment sticky marker
mrizzi Sep 8, 2026
f6eb102
chore(verify-pr): re-pin .fullsend base URL to 87f7e9b5, re-lock
mrizzi Sep 8, 2026
430a29c
docs(verify-pr): migrate Step 9 report-posting to native fullsend CLI
mrizzi Sep 8, 2026
7e6d461
chore(verify-pr): re-pin .fullsend base URL to 430a29c8, re-lock
mrizzi Sep 8, 2026
9c899c8
Merge pull request #291 from RHEcosystemAppEng/TC-5813
mrizzi Sep 8, 2026
1712e2d
docs(verify-pr): rewrite fullsend.md for native v0.37.0 path
mrizzi Sep 8, 2026
4ed6d79
docs(verify-pr): correct pre_script PR-head checkout claim in fullsen…
mrizzi Sep 8, 2026
fa427da
Merge pull request #292 from mrizzi/TC-5814
mrizzi Sep 9, 2026
c67f691
fix(verify-pr): stop post_script writing __pycache__ into fullsend ca…
mrizzi Sep 9, 2026
dca34de
chore(verify-pr): re-pin .fullsend base URL to c67f6911, re-lock
mrizzi Sep 9, 2026
6371a92
Merge pull request #293 from RHEcosystemAppEng/TC-6112
mrizzi Sep 9, 2026
6572360
fix(verify-pr): condense SKILL.md under Skillsaw 16k context budget
mrizzi Sep 9, 2026
c0bbad9
chore(verify-pr): re-pin .fullsend base URL to 6572360e, re-lock
mrizzi Sep 9, 2026
ffdca91
Merge pull request #294 from RHEcosystemAppEng/TC-6137
mrizzi Sep 9, 2026
438cde0
docs(verify-pr): record TC-5815 end-to-end acceptance run
mrizzi Sep 9, 2026
a3cfdcb
chore(fullsend): reconcile per-repo setup scaffold for verify-pr
mrizzi Sep 11, 2026
296b671
feat(verify-pr): CI-gated dispatch workflow + review-role harness tri…
mrizzi Sep 14, 2026
36ea4cb
chore(verify-pr): re-pin .fullsend base to 296b6711, add child trigge…
mrizzi Sep 14, 2026
5c64fd0
fix(verify-pr): grant contents:write so reusable-dispatch passes startup
mrizzi Sep 14, 2026
a66fdab
Merge pull request #297 from RHEcosystemAppEng/TC-6188-6189
mrizzi Sep 14, 2026
e6e35c1
feat(verify-pr): derive + gate Jira key from PR URL via JQL in pre_sc…
mrizzi Sep 14, 2026
c8ca570
chore(verify-pr): re-pin .fullsend base to e6e35c10, re-lock
mrizzi Sep 14, 2026
7b85069
fix(verify-pr): wire Jira secrets by canonical name, pin fullsend v0.…
mrizzi Sep 14, 2026
dedb0e2
fix(jira): migrate search to /rest/api/3/search/jql (410 Gone on legacy)
mrizzi Sep 14, 2026
9da74ef
chore(verify-pr): re-pin .fullsend base to dedb0e2d, re-lock
mrizzi Sep 14, 2026
69f59da
fix(jira): POST search/jql with fields array so custom fields return
mrizzi Sep 14, 2026
c813d5e
chore(verify-pr): re-pin .fullsend base to 69f59da9, re-lock
mrizzi Sep 14, 2026
069f255
diag(verify-pr): log JQL search result on gate failure
mrizzi Sep 14, 2026
f64a48e
chore(verify-pr): re-pin .fullsend base to 069f255f, re-lock
mrizzi Sep 14, 2026
b747a44
ci(verify-pr): bump fullsend CLI pin v0.37.0 -> v0.43.0 for sandbox r…
mrizzi Sep 15, 2026
27856e5
fix(verify-pr): pin harness model to claude-opus-4-8 (not floating op…
mrizzi Sep 15, 2026
bcff605
chore(verify-pr): re-pin .fullsend base to 27856e55, re-lock
mrizzi Sep 15, 2026
fcddf54
fix(verify-pr): agent reads task_id from verify-pr-input.json
mrizzi Sep 15, 2026
9a2be0e
fix(verify-pr): paginate gating JQL search so a match beyond page 1 i…
mrizzi Sep 15, 2026
5aaf02c
fix(verify-pr): re-validate status/label gate on full issue before wr…
mrizzi Sep 15, 2026
f958516
chore(verify-pr): re-pin .fullsend base to 5aaf02c2, re-lock
mrizzi Sep 15, 2026
a9099de
fix(verify-pr): request least-privilege GitHub token levels per run-s…
mrizzi Sep 15, 2026
45104b9
chore(verify-pr): re-pin .fullsend base to a9099de0, re-lock
mrizzi Sep 15, 2026
e90c0ef
ci(python-tests): run pytest on PRs targeting verify-pr-fullsend
mrizzi Sep 15, 2026
198f0b2
ci(validate-plugins,skillsaw): gate PRs into verify-pr-fullsend
mrizzi Sep 15, 2026
6229a91
Merge pull request #298 from RHEcosystemAppEng/TC-6190
mrizzi Sep 15, 2026
b752bee
docs(fullsend): record TC-6192 E2E CI-dispatch acceptance evidence
mrizzi Sep 15, 2026
b309bae
docs(fullsend): fix TC-6192 AC count (four → five)
mrizzi Sep 15, 2026
60dffa2
docs(fullsend): note vendor Jira-table limitation (fullsend#7345)
mrizzi Sep 16, 2026
14b8be6
feat(verify-pr): prefetch CI check-run outcomes into sandbox input
mrizzi Sep 16, 2026
fa3f4b7
feat(verify-pr): prefetch failed-CI logs into sandbox input for Check 1b
mrizzi Sep 16, 2026
1185ae2
build(verify-pr): re-pin harness base to activate CI check-run prefetch
mrizzi Sep 16, 2026
12c2bde
docs(fullsend): record TC-6257 CI check-run prefetch E2E acceptance
mrizzi Sep 16, 2026
59ed61d
Merge pull request #302 from mrizzi/TC-6257
mrizzi Sep 16, 2026
2b0785a
docs(fullsend): document CI install, dispatch design, and upgrade pro…
mrizzi Sep 17, 2026
3f3b621
ci(verify-pr): enable fork-PR dispatch via pull_request_target + ok-t…
mrizzi Sep 17, 2026
654cf01
fix(verify-pr): self-exclude own workflow check-runs from CI Status
mrizzi Sep 17, 2026
da053ba
docs(verify-pr): document best-effort CI-Status self-exclusion fallback
mrizzi Sep 17, 2026
02f271b
ci(verify-pr): re-pin harness to da053ba1 so the fixed pre-script runs
mrizzi Sep 17, 2026
162be4a
Merge pull request #307 from RHEcosystemAppEng/TC-6343
mrizzi Sep 17, 2026
e6a07ed
chore(verify-pr): resolve conflicts with main
mrizzi Sep 18, 2026
a084081
fix(ci): run verify-pr on main and publish eval reports
mrizzi Sep 18, 2026
4575d5e
feat(triage-security): define Fullsend contract
mrizzi Sep 21, 2026
0daf37b
fix(triage-security): clarify Vertex credential isolation
mrizzi Sep 21, 2026
9bf678b
fix(triage-security): require raw output validation
mrizzi Sep 21, 2026
38d3037
fix(triage-security): require Landlock enforcement
mrizzi Sep 21, 2026
4d58ae8
feat(triage-security): prefetch trusted sandbox inputs
mrizzi Sep 21, 2026
52edbd5
fix(triage-security): enforce bundle formats
mrizzi Sep 21, 2026
7fcb8d2
fix(triage-security): isolate prefetch bundles
mrizzi Sep 21, 2026
afae141
fix(triage-security): escape configured JQL values
mrizzi Sep 22, 2026
903a62a
fix(triage-security): harden prefetch collection against routine inputs
mrizzi Sep 22, 2026
48af38e
fix(triage-security): fail closed when jsonschema[format] is missing
mrizzi Sep 22, 2026
eec8c05
chore(triage-security): suppress subprocess opengrep false positive
mrizzi Sep 22, 2026
638468a
fix(triage-security): place nosemgrep on subprocess.run match line
mrizzi Sep 22, 2026
7ef5f2f
feat(triage-security): execute trusted action plans
mrizzi Sep 22, 2026
789f420
fix(triage-security): select transition target status
mrizzi Sep 22, 2026
5815419
fix(triage-security): anchor post result selection
mrizzi Sep 22, 2026
3326ebd
fix(triage-security): match single-ended links
mrizzi Sep 22, 2026
cc44e0c
fix(triage-security): compare retry field objects
mrizzi Sep 22, 2026
99de686
test(triage-security): derive footer version
mrizzi Sep 22, 2026
9d6e272
fix(triage-security): validate trusted result schema
mrizzi Sep 22, 2026
7a2842c
docs(triage-security): add Fullsend dual-mode design
mrizzi Sep 22, 2026
d17056c
feat(triage-security): define Fullsend sandbox contract
mrizzi Sep 22, 2026
ec6b333
feat(triage-security): serialize Fullsend triage actions
mrizzi Sep 22, 2026
15423a6
test(triage-security): cover Fullsend dual-mode behavior
mrizzi Sep 22, 2026
a7ef245
fix(triage-security): align Fullsend remediation contract
mrizzi Sep 22, 2026
c06a676
fix(triage-security): scope missing-assignee gate
mrizzi Sep 22, 2026
8fc03af
fix(fullsend): register triage-security harness
mrizzi Sep 22, 2026
eaeea6d
fix(triage-security): qualify Fullsend confirmation gate
mrizzi Sep 22, 2026
17bc884
fix(triage-security): accept trusted Fullsend provenance
mrizzi Sep 22, 2026
3f7d6d4
docs(changelog): record Fullsend triage execution
mrizzi Sep 22, 2026
fcf5b62
test(triage-security): add Fullsend contract coverage
mrizzi Sep 23, 2026
860380e
test(triage-security): exercise invalid Fullsend input
mrizzi Sep 23, 2026
1001527
test(triage-security): restore Fullsend gate coverage
mrizzi Sep 23, 2026
a11b353
test(triage-security): guard format validation
mrizzi Sep 23, 2026
8b67684
test(triage-security): align authorized label marker
mrizzi Sep 23, 2026
b2f10dc
test(triage-security): model remediation digest retry
mrizzi Sep 23, 2026
420bce4
test(triage-security): seed retry snapshot state
mrizzi Sep 23, 2026
00a3de8
test(triage-security): exercise retry snapshot checks
mrizzi Sep 23, 2026
52eca8a
docs(triage-security): document Fullsend operation
mrizzi Sep 24, 2026
967ec98
docs(triage-security): correct Fullsend harness path
mrizzi Sep 24, 2026
0ecaee0
docs(triage-security): clarify sandbox inputs
mrizzi Sep 24, 2026
8815882
docs(triage-security): correct matrix constraint source
mrizzi Sep 24, 2026
e687c9c
fix(triage-security): harden evidence collection portability
mrizzi Sep 29, 2026
7a125c5
fix(triage-security): anchor matrix ref extraction
mrizzi Sep 29, 2026
35956d0
fix(triage-security): tolerate empty matrix branches
mrizzi Sep 29, 2026
b2161ff
fix(triage-security): normalize source commit refs
mrizzi Sep 29, 2026
32fef09
fix(triage-security): resolve schema paths from target checkout
mrizzi Sep 29, 2026
566ef71
fix(triage-security): make Landlock paths best-effort
mrizzi Sep 29, 2026
51bff3d
fix(triage-security): bind action plans to trusted issue scope
mrizzi Sep 30, 2026
c70809e
fix(triage-security): require declared authorization targets
mrizzi Sep 30, 2026
59f9ff4
fix(triage-security): tolerate completed related transitions
mrizzi Sep 30, 2026
255d509
chore(triage-security): refresh harness pin and lock
mrizzi Sep 30, 2026
994761d
test(triage-security): exercise conditional Fullsend scenarios
mrizzi Sep 30, 2026
011efcc
fix(triage-security): expose runner evidence to eval graders
mrizzi Oct 1, 2026
b7ae1d0
test(triage-security): restore main runnable eval suite
mrizzi Oct 1, 2026
f6c6902
test(verify-pr): restore main runnable eval assertions
mrizzi Oct 1, 2026
40da356
fix(triage-security): freeze existing staleness eval clocks
mrizzi Oct 1, 2026
f82b412
test(triage-security): guard staleness fixture boundaries
mrizzi Oct 1, 2026
4cfe7d3
test(triage-security): clarify grader clock evidence transport
mrizzi Oct 1, 2026
7ac5cef
fix(triage-security): request case19 extraction evidence
mrizzi Oct 1, 2026
02cd84f
test(triage-security): guard case19 evidence output requests
mrizzi Oct 1, 2026
8aec62a
test(triage-security): exercise literal Fullsend instruction contracts
mrizzi Oct 1, 2026
b14d447
test(triage-security): capture isolated hosted gate execution evidence
mrizzi Oct 1, 2026
6276fb1
test(triage-security): route gate evals through existing trusted agents
mrizzi Oct 2, 2026
6f8fae9
test(triage-security): retire ordinary Fullsend gate execution
mrizzi Oct 2, 2026
d83ee90
fix(verify-pr): request case 3 eval detection evidence
mrizzi Oct 5, 2026
b46b2bf
test(fullsend): integrate reviewed native gate suite on PR299
mrizzi Oct 5, 2026
7b62662
ci(fullsend): activate native evals after integration merge
mrizzi Oct 5, 2026
ed11737
fix(ci): install YAML dependency for native eval tests
mrizzi Oct 5, 2026
fd5c06f
chore(ci): merge main bootstrap fixes into fullsend integration
mrizzi Oct 6, 2026
c7ca849
fix(evals): retain safe native failure diagnostics
mrizzi Oct 6, 2026
e3b2eae
chore: merge main after native diagnostics pin update
mrizzi Oct 6, 2026
6a251f7
chore: merge main with Opus 4.8 native judge setting
mrizzi Oct 6, 2026
91698d4
fix(evals): clarify expected native gate stops
mrizzi Oct 7, 2026
43200c8
chore(integration): sync merged main for native eval validation
mrizzi Oct 7, 2026
865560d
chore(integration): sync merged output-path fixes
mrizzi Oct 7, 2026
89ac2ea
chore(ci): trigger synchronized PR eval validation
mrizzi Oct 7, 2026
e19f2e0
chore(ci): sync ordinary runner wait fix for integration eval
mrizzi Oct 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .fullsend/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# fullsend-managed local resource cache — regenerated from the pinned URLs in
# lock.yaml on every run/lock; never committed.
.fullsend-cache/

# Local-only run scaffolding (env files with live secrets, launchers).
.local-run/
26 changes: 26 additions & 0 deletions .fullsend/config.base.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# fullsend per-repo configuration
# https://github.com/fullsend-ai/fullsend
#
# This file configures fullsend for per-repo installation mode.
# See ADR 0033 for details.
#
# The "runtime" key selects which agent runtime runs the agents, claude
# (default when unset) or pi. For one run, the 'fullsend run --runtime'
# flag wins, then FULLSEND_RUNTIME, then this file. See docs/runtimes.md.
version: "1"
kill_switch: false
# The registered source is the LOCAL composing child harness (base + runner-local
# host_files); its `base:` pins the repo content by raw URL. See
# .fullsend/harness/verify-pr.yaml. The base URL's host prefix must remain listed
# in allowed_remote_resources below (base URLs are not inherited — they are
# validated against this allowlist).
agents:
- name: verify-pr
source: harness/verify-pr.yaml
- name: triage-security
source: harness/triage-security.yaml
allowed_remote_resources:
# Exactly one prefix: this harness's base URL is self-hosted on
# RHEcosystemAppEng and its children resolve relative to that base (no
# fullsend-ai remote overlay in the native v0.37.0 pinned-URL model).
- https://raw.githubusercontent.com/RHEcosystemAppEng/sdlc-plugins/
20 changes: 20 additions & 0 deletions .fullsend/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# fullsend per-repo configuration (overlay)
# https://github.com/fullsend-ai/fullsend
#
# This file is the per-repo overlay for fullsend configuration.
# Base settings are provided by config.base.yaml (vendor preset).
# Values set here override the base layer. Omitted fields inherit
# from config.base.yaml, then from compiled-in code defaults.
#
# See ADR 0069 for the layered configuration model.
#
# The verify-pr agent is registered in config.base.yaml (the base layer), so
# `fullsend dispatch` / `fullsend run` resolve it while the vendor shim — which
# greps only THIS file for agents — does not dispatch it. CI-gated dispatch
# lives in .github/workflows/fullsend-verify-pr.yml.

# Repo-specific inference override (hosted Vertex AI via Workload Identity
# Federation). The base preset supplies everything else.
inference:
project: it-gcp-tpa
wif_provider: projects/442181572212/locations/global/workloadIdentityPools/fullsend-inference/providers/gh-rhecosystemappeng-sdlc-plugin
12 changes: 12 additions & 0 deletions .fullsend/harness/triage-security.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Local composing child for the triage-security harness.
#
# The URL-pinned base supplies the tokenless triage contract. This local child
# supplies the runner-local pre-script output because Fullsend rejects an
# absolute host-file source inherited from a URL-sourced harness. The child
# mapping wins for this destination during composition.
base: https://raw.githubusercontent.com/RHEcosystemAppEng/sdlc-plugins/59f9ff4b4f49646c64ed3412271ce7c017e781d4/harness/triage-security.yaml#sha256=110fb33d880caf1add20e73c8017451378966eeef52ef34aa988e41c35fc1b02

host_files:
- src: ${FULLSEND_RUN_DIR}/pre/triage-security-input.json
dest: /sandbox/workspace/.pre-script/triage-security-input.json
optional: true
68 changes: 68 additions & 0 deletions .fullsend/harness/verify-pr.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Local composing child for the verify-pr harness.
#
# fullsend v0.37.0 rejects an absolute host_files.src that is inherited from a
# URL-sourced harness, so the runner-local credential and pre_script-output
# mounts cannot live in the URL-pinned base (harness/verify-pr.yaml). This local
# child pins that base by raw URL (so the pinned bytes are byte-identical across
# local and CI) and adds those absolute mounts directly. host_files are
# concatenated base+child, deduplicated by dest with the child winning (ADR-0045;
# harness-fields.md). Absolute host_files declared directly in this local child
# are NOT URL-sourced, so they are accepted.
#
# ONE child serves BOTH environments — the mounts are env-expanded and the OIDC
# token is optional:
# GOOGLE_APPLICATION_CREDENTIALS local: service-account key JSON
# CI: WIF external_account config
# GCP_OIDC_TOKEN_FILE local: unset → optional mount skipped
# CI: runner-refreshed OIDC token file
# Only the runtime environment differs — fullsend's sanctioned "same harness,
# different runtime env" model (ADR-0055; running-agents-locally.md).
#
# PIN: the base cannot be a cross-boundary local path — fullsend rejects a
# `base:` that escapes the .fullsend workspace root, and a URL base is required
# anyway so the base's relative children resolve as pinned raw URLs. The base is
# pinned to a commit SHA (not a branch) plus the base file's sha256; both local
# and CI resolve these exact bytes. lock.yaml freezes every child SHA256.
# The base URL host prefix must stay listed in config.yaml allowed_remote_resources
# (base URLs are validated against that allowlist, not inherited).
# Re-pin after any base edit: push harness/verify-pr.yaml, set the SHA to the new
# commit + the sha256 to `shasum -a 256 harness/verify-pr.yaml`, `fullsend lock`.
base: https://raw.githubusercontent.com/RHEcosystemAppEng/sdlc-plugins/da053ba1649ef9368436d69a639e121138b97801/harness/verify-pr.yaml#sha256=3c9dc221e2a37e7aa7ff294381b6b5b1580771ba70432c42924fc3a85f078e63

# CEL trigger (ADR 0061) — MUST be declared here, on the composing child, not
# only on the base. `fullsend dispatch` registers this child (config.base.yaml
# source: harness/verify-pr.yaml resolves under .fullsend/) and composes the
# base, but mergeBaseIntoChild (internal/harness/compose.go) carries `role` and
# other scalars from base->child while intentionally NOT carrying `trigger`. A
# trigger set only on the base is therefore inert; ListTriggeredHarnesses reads
# the composed child's Trigger. Kept byte-identical to the base's trigger (which
# documents intent and covers direct-base consumption). Fires on a PR
# change_proposal that is opened / synchronized / reopened — the dispatch-path
# equivalent of the CI poller's `on: pull_request` types in
# .github/workflows/fullsend-verify-pr.yml.
trigger: |
event.entity.kind == "change_proposal" &&
event.transition.kind in ["synchronized", "opened", "reopened"]

host_files:
- src: ${GOOGLE_APPLICATION_CREDENTIALS}
dest: /tmp/.gcp-credentials.json
- src: ${GCP_OIDC_TOKEN_FILE}
dest: /sandbox/workspace/.gcp-oidc-token
optional: true
# pre_script prefetch output — pre-verify-pr.sh writes /tmp/fullsend-pre-output
# on the runner; mounted read-only into the sandbox (optional — absent until
# the pre_script runs, and skipped on an ADR-0072 skip).
- src: /tmp/fullsend-pre-output/verify-pr-input.json
dest: /sandbox/workspace/.pre-script/verify-pr-input.json
optional: true
# Concatenated failed-check logs — pre-verify-pr.sh always writes this file
# (empty when no check failed) next to verify-pr-input.json. correctness.md
# Check 1b reads it on a FAIL via the bundle's github.check_run_logs_path (dest
# below); the large log text stays off the input bundle and off the agent's
# context until then. host_files mounts single files only, so per-check logs
# are concatenated into this one file. optional: absent until the pre_script
# runs, and skipped on an ADR-0072 skip.
- src: /tmp/fullsend-pre-output/check-run-logs.txt
dest: /sandbox/workspace/.pre-script/check-run-logs.txt
optional: true
Loading
Loading