Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
5 changes: 1 addition & 4 deletions scripts/skill-env-reachability-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ SANDBOX_RUNTIME_VARS=(
FULLSEND_OUTPUT_DIR
FULLSEND_OUTPUT_SCHEMA
FULLSEND_ROLE
FULLSEND_SKILLS_DIR

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Action required

1. Protected files require human approval 📜 Skill insight § Compliance

The PR modifies files under scripts/ and skills/, both listed in the repository's active
REVIEW_PROTECTED_PATHS value. Any changed file under those prefixes requires a protected-path
review finding, so this PR cannot be auto-approved.

Dismiss ↗ | View ↗

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] test-weakened

Adding FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS does not check that any runtime actually delivers the variable. is_sandbox_runtime_var (lines 160-165) only compares the name against this hardcoded list, and the main loop skips every match with continue (lines 377-378). The skill's reference to FULLSEND_SKILLS_DIR is therefore treated as reachable without any check, and the warning that used to track the skill-path gap disappears.

Suggested fix: Do not list FULLSEND_SKILLS_DIR as universally injected until runtime support is confirmed. Until then, track the skill-path gap in KNOWN_GAPS, keyed on the variable the skill now references.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] design-coherence

The PR body says 'Closes #1672', but the issue's core condition is not met: a runtime-neutral FULLSEND_SKILLS_DIR injected by all runtimes, which is upstream work. Merging would auto-close an issue whose upstream prerequisite is still open.

Suggested fix: Change 'Closes #1672' to 'Refs #1672', or mark the PR blocked until the upstream change merges.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] test-weakened

The PR adds FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS, which exempts it from reachability validation, and deletes the tracked KNOWN_GAPS entry for #1672. The test only checks this static list, which the PR edits itself, so it now passes without showing that any runtime injects the variable. The list's header comment says it holds variables injected on every runtime, and FULLSEND_SKILLS_DIR is absent from the live pi sandbox. The test change hides the missing producer. The PR body calls the change a trivial refactor that resolves the known gap, which does not match this behavioral change.

Suggested fix: Keep the pr-risk-assessment:CLAUDE_CONFIG_DIR KNOWN_GAPS entry, and leave FULLSEND_SKILLS_DIR out of SANDBOX_RUNTIME_VARS, until the runtimes verifiably export it. Correct the PR description to say the gap is not yet resolved.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] test-weakened

Adding FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS exempts it from reachability validation and removing the KNOWN_GAPS entry hides the unresolved runtime dependency; nothing shows the runtime injects the var.

Suggested fix: Keep a KNOWN_GAPS entry for pr-risk-assessment:FULLSEND_SKILLS_DIR (#1672) until runtime injection is implemented and verified, then add it to SANDBOX_RUNTIME_VARS.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] test-weakened

Adding FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS unconditionally exempts its references from reachability validation, yet the variable has no producer in this repository and was observed absent from the review sandbox. Removing the KNOWN_GAPS entry pr-risk-assessment:CLAUDE_CONFIG_DIR (#1672) at the same time hides the unresolved path-delivery problem instead of testing that it was fixed. The file's own header comment says SANDBOX_RUNTIME_VARS is reserved for vars injected on every runtime and that per-skill gaps belong in KNOWN_GAPS.

Suggested fix: Remove this exemption until universal runtime injection is implemented and verified. Until then, track the unresolved variable under pr-risk-assessment in KNOWN_GAPS so the test keeps reporting the gap.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] test-weakened

The PR adds FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS and removes the pr-risk-assessment:CLAUDE_CONFIG_DIR KNOWN_GAPS entry for #1672. Together these unconditionally exempt the variable from reachability checking. The file's header defines SANDBOX_RUNTIME_VARS as vars injected on every runtime, but nothing shows FULLSEND_SKILLS_DIR is injected (it is absent from the pi review sandbox). The test therefore passes while the runtime dependency is unresolved, instead of flagging it as a tracked gap.

Suggested fix: Keep the dependency tracked in KNOWN_GAPS (e.g. pr-risk-assessment:FULLSEND_SKILLS_DIR referencing #1672 and the upstream issue) and add the variable to SANDBOX_RUNTIME_VARS only after every runtime is confirmed to inject it.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] test-weakened

SANDBOX_RUNTIME_VARS is an unconditional exemption: any skill reference to a listed variable skips the harness reachability check; it does not verify that the runtime injects the variable. This PR adds FULLSEND_SKILLS_DIR to the list and removes the KNOWN_GAPS entry pr-risk-assessment:CLAUDE_CONFIG_DIR (#1672), so the result changes from a tracked gap to PASS without evidence that the variable is provided. If it is not injected, CI stays green while the risk step fails at runtime.

Suggested fix: Keep the dependency tracked in KNOWN_GAPS (re-keyed to FULLSEND_SKILLS_DIR) until a fullsend release that exports it is confirmed, then move it to SANDBOX_RUNTIME_VARS.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] test-weakened

Adding FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS exempts every reference to it from reachability validation without establishing that any runtime supplies it. Together with removing the pr-risk-assessment:CLAUDE_CONFIG_DIR KNOWN_GAPS entry, the test now silently accepts the replacement dependency even though the command can resolve to /pr-risk-assessment/scripts/risk-tier1.sh. The file's header says runtime-specific variables must not be listed there and should be tracked in KNOWN_GAPS instead.

Suggested fix: Keep FULLSEND_SKILLS_DIR out of SANDBOX_RUNTIME_VARS until runtime injection is implemented and verified, and track pr-risk-assessment:FULLSEND_SKILLS_DIR in KNOWN_GAPS (referencing #1672) in the meantime.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] test-weakened

Adding FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS exempts every reference to it from reachability validation, although the variable is not injected by any runtime verified here. Together with removing the pr-risk-assessment:CLAUDE_CONFIG_DIR KNOWN_GAPS entry, this turns an acknowledged unresolved dependency into a passing check without making the variable reachable. The comment above the list says it holds only vars injected on every runtime.

Suggested fix: Keep the unresolved dependency tracked in KNOWN_GAPS (retargeted to FULLSEND_SKILLS_DIR) and do not list FULLSEND_SKILLS_DIR in SANDBOX_RUNTIME_VARS until runtime injection is implemented and verified.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] test-weakened

Adding FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS exempts it from reachability validation, and removing the pr-risk-assessment:CLAUDE_CONFIG_DIR KNOWN_GAPS entry hides the gap, although nothing in this repo supplies the variable and the allowlist comment limits it to universally injected vars.

Suggested fix: Keep FULLSEND_SKILLS_DIR out of SANDBOX_RUNTIME_VARS and keep a KNOWN_GAPS entry tracking #1672 until runtime injection is confirmed across supported runtimes.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] test-weakened

Adding FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS (documented as vars injected on every runtime) exempts it from the reachability check instead of validating delivery, and the KNOWN_GAPS entry that tracked the dependency is removed with no evidence any runtime injects the variable.

Suggested fix: Do not add FULLSEND_SKILLS_DIR as a universal exemption until all runtimes are shown to inject it; until then keep an explicit tracked reachability gap.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] unauthorized-change

Issue #1672 authorizes removing the KNOWN_GAPS entry only once resolved; the upstream prerequisite is unconfirmed. The PR edits the allowlist and deletes the gap anyway, so the test passes without verifying any runtime exports the variable, and the PR body claim that the gap is resolved is unsupported.

Suggested fix: Keep the KNOWN_GAPS entry, pointed at the upstream prerequisite, until fullsend exports FULLSEND_SKILLS_DIR on all runtimes, or land this PR only after the upstream change ships.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] test-weakened

The diff adds FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS and removes the pr-risk-assessment:CLAUDE_CONFIG_DIR KNOWN_GAPS entry for #1672. Together these turn a tracked gap into an unconditional pass. The comment above the array defines SANDBOX_RUNTIME_VARS as vars injected into the sandbox on every runtime, but nothing in this repo shows FULLSEND_SKILLS_DIR is injected and it is unset in the pi sandbox, so the exemption asserts a guarantee that does not exist.

Suggested fix: Add FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS only after the runtimes export it. Until then, keep the KNOWN_GAPS entry referencing #1672.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] misleading-label

Adding FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS is not named in #1672, though it is the direct counterpart of the authorized KNOWN_GAPS removal. The remaining concern is that it asserts runtime delivery that is not established, which is covered by the test-weakened finding at this line.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] test-weakened

Adding FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS and removing the pr-risk-assessment:CLAUDE_CONFIG_DIR KNOWN_GAPS entry makes the static reachability check treat the new dependency as reachable without proof; nothing in this repo shows the runtime injects it.

Suggested fix: Before merging, confirm the upstream fullsend injection has shipped. If it has not, keep a KNOWN_GAPS entry until it does.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] test-weakened

FULLSEND_SKILLS_DIR is added to the universal SANDBOX_RUNTIME_VARS allowlist and the tracked KNOWN_GAPS entry is removed, turning an unresolved runtime dependency into an unconditional pass in the reachability test.

Suggested fix: Keep FULLSEND_SKILLS_DIR out of SANDBOX_RUNTIME_VARS and track it in KNOWN_GAPS until runtimes deliver it.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] test-weakened

Adding FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS and removing the KNOWN_GAPS entry makes the reachability check pass on an unverified assumption that every runtime injects the variable.

Suggested fix: Keep the KNOWN_GAPS entry and keep FULLSEND_SKILLS_DIR out of the universal allowlist until a released fullsend version is confirmed to inject it, or add a comment naming the fullsend PR/version that provides it.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] test-weakened

The PR adds FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS, which exempts it from reachability validation. The file header limits that list to vars 'injected into the sandbox on every runtime' and says other vars belong in KNOWN_GAPS. The variable is absent from the current sandbox and this PR introduces nothing that sets it. Deleting the pr-risk-assessment:CLAUDE_CONFIG_DIR KNOWN_GAPS entry at the same time turns an unresolved dependency the test explicitly reported into a passing check.

Suggested fix: Keep the dependency tracked in KNOWN_GAPS (as pr-risk-assessment:FULLSEND_SKILLS_DIR, referencing #1672) until universal runtime injection is verified, then move it to SANDBOX_RUNTIME_VARS.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] test-weakened

Adding FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS and removing the pr-risk-assessment:CLAUDE_CONFIG_DIR KNOWN_GAPS entry makes the reachability check pass unconditionally for a variable that is not delivered by any harness or verified in the runtime; the gap is hidden rather than validated.

Suggested fix: Keep FULLSEND_SKILLS_DIR out of SANDBOX_RUNTIME_VARS and track pr-risk-assessment:FULLSEND_SKILLS_DIR in KNOWN_GAPS until runtime injection is verified.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] test-weakened

Adding FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS skips its reachability check for every skill, and removing the pr-risk-assessment:CLAUDE_CONFIG_DIR known-gap entry removes the warning that tracked this gap. Nothing in this repo confirms every runtime delivers the variable.

Suggested fix: Keep the variable tracked as a known reachability gap until runtime injection is confirmed upstream, rather than exempting it globally.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] test-weakened

Adding FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS, and removing the pr-risk-assessment:CLAUDE_CONFIG_DIR KNOWN_GAPS entry, makes the reachability test report a pass for a variable that is absent from the current pi sandbox. The header of this script limits the allowlist to variables injected on every runtime, and that has not been confirmed for this one.

Suggested fix: Keep FULLSEND_SKILLS_DIR out of SANDBOX_RUNTIME_VARS, and keep the #1672 KNOWN_GAPS entry, until universal runtime injection is confirmed.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] test-weakened

Adding FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS and deleting the pr-risk-assessment:CLAUDE_CONFIG_DIR KNOWN_GAPS entry turns an unresolved dependency into a passing check without establishing runtime delivery; the file header says this list is only for vars injected on every runtime.

Suggested fix: Keep the dependency tracked in KNOWN_GAPS until universal runtime injection is verified.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] test-weakened

Adding FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS exempts it from reachability validation even though it is absent from the current sandbox and has no producer in this repository. Together with deleting the known-gap entry, this suppresses the unresolved skill-path dependency instead of verifying that runtime injection exists.

Suggested fix: Keep the unresolved FULLSEND_SKILLS_DIR dependency tracked in KNOWN_GAPS rather than the universal runtime allowlist until injection across supported runtimes is verified.

GOOGLE_APPLICATION_CREDENTIALS
PATH
)
Expand Down Expand Up @@ -131,10 +132,6 @@ declare -A KNOWN_GAPS=(
["github-forge:ISSUE_NUMBER"]="#1664 — forge skill derives ISSUE_NUMBER locally from ISSUE_URL; not in fix/retro/review/prioritize/triage env.sandbox"
["gitlab-forge:ISSUE_NUMBER"]="#1664 — forge skill derives ISSUE_NUMBER locally from ISSUE_URL; not in fix/retro/review/prioritize/triage env.sandbox"
["issue-labels/gitlab:ISSUE_NUMBER"]="#1664 — label skill derives ISSUE_NUMBER locally from ISSUE_URL; review/triage harnesses do not supply it"
# pr-risk-assessment scripts hard-reference the runtime-specific config
# dir (CLAUDE_CONFIG_DIR on claude; CODEX_HOME/PI_CODING_AGENT_DIR on
# codex/pi). No runtime-neutral skill path exists yet.
["pr-risk-assessment:CLAUDE_CONFIG_DIR"]="#1672 — runtime-specific config dir; needs runtime-neutral skill path"
# Skills below reference these vars as ${VAR} expansions without
# assigning them, and no delivering harness declares them in
# env.sandbox.
Expand Down
2 changes: 1 addition & 1 deletion skills/pr-review/sub-agents/risk-assessment.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ review verdicts.

1. Run the Tier 1 metadata script:
```bash
bash "${CLAUDE_CONFIG_DIR}/skills/pr-risk-assessment/scripts/risk-tier1.sh"
bash "${FULLSEND_SKILLS_DIR}/pr-risk-assessment/scripts/risk-tier1.sh"
Comment thread
qodo-code-review[bot] marked this conversation as resolved.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[high] logic-error

The new invocation bash "${FULLSEND_SKILLS_DIR}/pr-risk-assessment/scripts/risk-tier1.sh" needs FULLSEND_SKILLS_DIR to be set. Nothing in this repo sets it: a grep of the base checkout finds no match outside this diff, and the variable is unset in the current pi review sandbox. If it is unset, the command becomes bash "/pr-risk-assessment/scripts/risk-tier1.sh", which fails because the file is not found, so Tier 1 metadata extraction never runs. skills/pr-risk-assessment/SKILL.md:207 has the same problem. The upstream fullsend runtime code is not available here, so universal injection by every runtime cannot be confirmed.

Suggested fix: Hold back these invocation changes until the upstream fullsend runtimes export FULLSEND_SKILLS_DIR and the deployed runtime version includes that change, or use a skill-path resolution mechanism shown to work on all runtimes.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[high] breaking-config

The Tier 1 invocation now depends on FULLSEND_SKILLS_DIR being set in the sandbox (same change in skills/pr-risk-assessment/SKILL.md:207). Nothing in the PR shows that any fullsend runtime (claude, codex, pi) exports this variable: in the PR head it appears only in the lines this PR edits, and it is not set in the pi review sandbox, although other FULLSEND_* vars are. When it is unset the command becomes bash "/pr-risk-assessment/scripts/risk-tier1.sh", which fails, so Tier 1 risk assessment breaks, including on claude where the current CLAUDE_CONFIG_DIR path works today. Issue #1672 and its triage comment make this migration conditional on the upstream runtimes exporting the variable first; the PR does not link or show evidence that prerequisite has landed.

Suggested fix: Do not merge until every supported fullsend runtime (claude, codex, pi) exports FULLSEND_SKILLS_DIR; link the upstream fullsend PR/release and state the required version. Otherwise add a temporary fallback in both invocations (SKILL.md:207 and risk-assessment.md:27), e.g. ${FULLSEND_SKILLS_DIR:-${CLAUDE_CONFIG_DIR}/skills}, and account for it in the reachability test.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[high] breaking-config

Both Tier 1 commands (risk-assessment.md:27 and skills/pr-risk-assessment/SKILL.md:207) now depend on the fullsend runtime exporting FULLSEND_SKILLS_DIR into the sandbox. Nothing in this repo (harness env blocks, skills) or in the review sandbox's pi-config sets the variable, and the PR does not show a producer; issue #1672 describes runtime injection as a proposal that lives in the fullsend repo. If the variable is unset, the path expands to /pr-risk-assessment/scripts/risk-tier1.sh and Tier 1 extraction fails with no fallback. That regresses the claude runtime, where ${CLAUDE_CONFIG_DIR}/skills/... worked; pi/codex were already broken. The PR also says 'Closes #1672' while delivering only the consumer side, so the tracking issue would close before the dependency exists.

Suggested fix: Before merging, link a released fullsend version that exports FULLSEND_SKILLS_DIR for the claude, codex and pi runtimes and document it as the minimum version; otherwise sequence this PR after the fullsend change, or fail fast with a clear error when the variable is unset. Change 'Closes #1672' to a partial reference until runtime injection lands.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[high] breaking-config

The PR replaces ${CLAUDE_CONFIG_DIR}/skills/... with ${FULLSEND_SKILLS_DIR}/... in risk-assessment.md, pr-risk-assessment/SKILL.md and the risk-tier1.sh header, with no fallback. Nothing in this repo sets or documents FULLSEND_SKILLS_DIR, and the PR links no fullsend change that exports it; issue #1672 treats runtime injection as a separate step this PR does not do. The variable is also unset in the pi runtime sandbox this review ran in. On a runtime that does not export it, the command expands to /pr-risk-assessment/scripts/risk-tier1.sh and Tier 1 fails. That includes claude, where the old path worked. The PR also adds the variable to SANDBOX_RUNTIME_VARS and removes the KNOWN_GAPS entry, so the reachability test now treats it as guaranteed. No minimum fullsend version is recorded for @v0 consumers, and Closes #1672 closes the issue although its runtime-injection requirement is not met. The rebase onto main did not change the patch.

Suggested fix: Gate the merge on a released fullsend change that exports FULLSEND_SKILLS_DIR on every runtime, link it, and note the minimum fullsend version. Until then keep a fallback such as ${FULLSEND_SKILLS_DIR:-${CLAUDE_CONFIG_DIR}/skills} and use Refs #1672 instead of Closes #1672.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[high] breaking-config

${CLAUDE_CONFIG_DIR}/skills/... is replaced with ${FULLSEND_SKILLS_DIR}/..., but nothing in this repo defines or exports FULLSEND_SKILLS_DIR. A code search of fullsend-ai/fullsend finds no match, and this review sandbox's environment does not contain it. Issue #1672 lists injecting the variable from every runtime as a proposed first step, not as something that already exists. Where the variable is unset the command expands to bash "/pr-risk-assessment/scripts/risk-tier1.sh" and fails with 'No such file'. Tier 1 risk metadata is then lost, or the risk-assessment sub-agent fails. This also removes the previously working claude-runtime path with no fallback. The identical invocation at skills/pr-risk-assessment/SKILL.md:207 has the same problem.

Suggested fix: Land and release the fullsend runtime change that injects FULLSEND_SKILLS_DIR on claude, codex and pi first, and gate this PR on that version. Until then, add a fallback in both invocations (risk-assessment.md:27 and SKILL.md:207), for example SK="${FULLSEND_SKILLS_DIR:-${CLAUDE_CONFIG_DIR:+$CLAUDE_CONFIG_DIR/skills}}", with an explicit error if it is empty. Keep the KNOWN_GAPS entry until the runtime provides the variable.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[high] breaking-config

Sub-agent and SKILL.md:207 invoke ${FULLSEND_SKILLS_DIR}/pr-risk-assessment/scripts/risk-tier1.sh, but nothing in this repo sets or declares FULLSEND_SKILLS_DIR, no fullsend runtime release exporting it is linked, and it is unset in the live pi sandbox. Unset, the path expands to /pr-risk-assessment/scripts/risk-tier1.sh, Tier 1 extraction fails, and the missing or degraded risk assessment forces a comment verdict.

Suggested fix: Confirm and link fullsend runtime injection of FULLSEND_SKILLS_DIR on all runtimes (claude, codex, pi), or define it in harness env.sandbox, or fall back to CLAUDE_CONFIG_DIR/CODEX_HOME/PI_CODING_AGENT_DIR when unset. Keep the CLAUDE_CONFIG_DIR reference and KNOWN_GAPS entry until the contract ships.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[high] breaking-config

The Tier 1 invocation depends on FULLSEND_SKILLS_DIR, which nothing in this repo defines and which the pi review sandbox does not set; the #1672 triage says the upstream runtime export has not landed. Unset, the command expands to /pr-risk-assessment/scripts/risk-tier1.sh and fails (also breaking claude, which works today via CLAUDE_CONFIG_DIR). Same dependency in SKILL.md:207 and the risk-tier1.sh header. Upstream runtime code could not be inspected.

Suggested fix: Land and release the FULLSEND_SKILLS_DIR export in all fullsend runtimes first and confirm the harness image includes it; until then hold the PR or merge only with a fallback such as SKILLS_DIR="${FULLSEND_SKILLS_DIR:-${CLAUDE_CONFIG_DIR:+$CLAUDE_CONFIG_DIR/skills}}" that fails fast when empty.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[high] breaking-config

The Tier 1 invocation in risk-assessment.md:27 and pr-risk-assessment/SKILL.md:207 is now bash "${FULLSEND_SKILLS_DIR}/pr-risk-assessment/scripts/risk-tier1.sh". Nothing in this repo or diff sets FULLSEND_SKILLS_DIR, and it is unset in the pi review sandbox (skills live at /sandbox/pi-config/skills). When it is unset the path expands to /pr-risk-assessment/scripts/risk-tier1.sh, which does not exist, so Tier 1 metadata fails. On the claude runtime this replaces a ${CLAUDE_CONFIG_DIR}/skills/... path that works today. The triage comment on #1672 says the migration is blocked until the runtimes export the variable. The PR also lists the variable as runtime-provided in the reachability test and removes the KNOWN_GAPS entry tracking #1672, so the gap is no longer visible.

Suggested fix: Do not merge until the claude, codex and pi runtimes all export FULLSEND_SKILLS_DIR. Alternatively, add a fallback that works on every runtime and fails with a clear message when the directory is empty, for example ${FULLSEND_SKILLS_DIR:-${CLAUDE_CONFIG_DIR}/skills} plus an explicit check, and apply it in both risk-assessment.md and SKILL.md:207.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] protected-path

The PR modifies protected paths: scripts/skill-env-reachability-test.sh, skills/pr-review/sub-agents/risk-assessment.md, skills/pr-risk-assessment/SKILL.md, skills/pr-risk-assessment/scripts/risk-tier1.sh. The PR links #1672 and explains its rationale, but human approval is always required for protected-path changes regardless of context.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] api-contract

The consumers are migrated to FULLSEND_SKILLS_DIR before anything supplies it. In the running pi review sandbox env has PI_CODING_AGENT_DIR=/sandbox/pi-config but no FULLSEND_SKILLS_DIR, and no injection was found in harnesses, scripts or sandbox config. The command resolves to /pr-risk-assessment/scripts/risk-tier1.sh and fails with exit 127 (also SKILL.md:207). Whitelisting the var in SANDBOX_RUNTIME_VARS and removing the KNOWN_GAPS entry only stops the reachability test from catching this. The external fullsend runtime was not available for verification.

Suggested fix: Land and release the fullsend runtime change that exports FULLSEND_SKILLS_DIR=/skills on every supported runtime before merging, or keep a working path-resolution mechanism until then; link that change in the PR and verify in a real sandbox.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] api-contract

The Tier 1 invocation here and in skills/pr-risk-assessment/SKILL.md:207 now depends on FULLSEND_SKILLS_DIR. Nothing in this repo sets that variable and it is not set in the current pi review sandbox. If the fullsend runtime in use does not export it yet, the path becomes /pr-risk-assessment/scripts/risk-tier1.sh and Tier 1 metadata collection fails; on the claude runtime this regresses the previous CLAUDE_CONFIG_DIR path. Whether the upstream injection has shipped cannot be checked from this repo.

Suggested fix: Confirm the fullsend release these harnesses target exports FULLSEND_SKILLS_DIR on the claude, codex and pi runtimes, and link the upstream change in the PR description. Otherwise hold the merge until that injection ships.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[high] breaking-config

Migration to ${FULLSEND_SKILLS_DIR} depends on a variable no released fullsend runner exports (fullsend-ai/fullsend#8465; absent from the review sandbox env; not set by harness/review.yaml). When unset, the Tier 1 command expands to /pr-risk-assessment/scripts/risk-tier1.sh and fails, losing risk signals on the claude runtime where the old path works. Issue #1672 gates removal of the KNOWN_GAPS entry on resolution, and triage marks it blocked upstream. The reachability test stays green because the PR adds the variable to SANDBOX_RUNTIME_VARS.

Suggested fix: Hold the merge until a released fullsend runner exports FULLSEND_SKILLS_DIR on claude, codex and pi, and state the minimum fullsend version in the PR; until then keep a fallback such as ${FULLSEND_SKILLS_DIR:-${CLAUDE_CONFIG_DIR}/skills}.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[high] breaking-config

The Tier 1 invocation here and in skills/pr-risk-assessment/SKILL.md:207 depends on FULLSEND_SKILLS_DIR with no fallback. Nothing in this repo defines or exports it, and it is not set in the pi review sandbox. On a runtime that does not inject it the command expands to /pr-risk-assessment/scripts/risk-tier1.sh and fails, losing Tier 1 signals; the old CLAUDE_CONFIG_DIR path worked on claude.

Suggested fix: Confirm the fullsend runtime change that injects FULLSEND_SKILLS_DIR on every runtime is merged and released in the lockstep version before merging, or keep a fallback such as ${FULLSEND_SKILLS_DIR:-${CLAUDE_CONFIG_DIR}/skills}, or add a fail-fast check, in both SKILL.md and risk-assessment.md.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[high] breaking-config

The PR replaces ${CLAUDE_CONFIG_DIR}/skills/... with ${FULLSEND_SKILLS_DIR}/... at risk-assessment.md:27 and skills/pr-risk-assessment/SKILL.md:207, with no fallback. Nothing in this repo sets FULLSEND_SKILLS_DIR: a grep over the base checkout finds nothing, and in the PR head the only hits are these consumers and the test exemption. The variable is also empty in the pi review sandbox. Where it is unset, the command becomes bash "/pr-risk-assessment/scripts/risk-tier1.sh", which fails with 'No such file' (exit 127), and the Tier 1 signals are lost. Claude-runtime deployments worked before because CLAUDE_CONFIG_DIR was set there, so this regresses them unless the fullsend runtime injection described in #1672 has shipped. This PR neither verifies nor gates on that dependency. (Codex and pi were already broken on the old path, so the regression is specific to Claude.)

Suggested fix: Do not merge until the fullsend runtime injection of FULLSEND_SKILLS_DIR is released on every runtime (claude, codex and pi), and record the minimum fullsend version needed. Alternatively, keep a working fallback such as ${FULLSEND_SKILLS_DIR:-${CLAUDE_CONFIG_DIR:+$CLAUDE_CONFIG_DIR/skills}}, or fail fast with a clear error when no skills dir resolves.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[high] breaking-config

The Tier 1 invocation now depends on FULLSEND_SKILLS_DIR, but nothing in this repo or PR defines or injects it: no harness env.sandbox block sets it, and it is unset in the live pi review sandbox. The command expands to bash "/pr-risk-assessment/scripts/risk-tier1.sh" and Tier 1 collection fails; this does not fix pi/codex and regresses claude. The same invocation is at skills/pr-risk-assessment/SKILL.md:207.

Suggested fix: Land the fullsend runtime change that exports FULLSEND_SKILLS_DIR=/skills on every runtime before switching these invocations; or define the var in the harness env.sandbox blocks delivering the skill; or keep a fallback in both invocations, e.g. ${FULLSEND_SKILLS_DIR:-${CLAUDE_CONFIG_DIR}/skills}. Keep the KNOWN_GAPS entry until the variable is verifiably set.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[high] breaking-config

The sub-agent now runs bash "${FULLSEND_SKILLS_DIR}/pr-risk-assessment/scripts/risk-tier1.sh". Nothing in this repo defines or exports FULLSEND_SKILLS_DIR, the PR changes no harness, and issue #1672 says upstream runtimes must export it first. In the pi review sandbox the variable is unset, so the path expands to /pr-risk-assessment/scripts/risk-tier1.sh. The claude runtime would break the same way. Same path at skills/pr-risk-assessment/SKILL.md:207 and scripts/risk-tier1.sh:5.

Suggested fix: Do not merge until the upstream fullsend runtimes (claude, codex, pi) export FULLSEND_SKILLS_DIR, and link the upstream release or PR. Alternatively keep a temporary fallback such as ${FULLSEND_SKILLS_DIR:-${CLAUDE_CONFIG_DIR}/skills}.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[high] breaking-config

The Tier 1 command now depends on ${FULLSEND_SKILLS_DIR}, and nothing in this repo defines or exports that variable. The review sandbox for this run (pi runtime) has it unset, with PI_CODING_AGENT_DIR=/sandbox/pi-config. When it is unset the path expands to /pr-risk-assessment/scripts/risk-tier1.sh, the script is not found (exit 127), and no Tier 1 signals are produced. The same dependency is in skills/pr-risk-assessment/SKILL.md line 207. Issue #1672's triage comment says the upstream fullsend runtime export is a prerequisite, and nothing shows it has landed. Migrating now also regresses the claude runtime, which works today through CLAUDE_CONFIG_DIR.

Suggested fix: Merge only after the upstream fullsend runtime exports FULLSEND_SKILLS_DIR (pointing at the skills directory) on claude, codex and pi. Until then, add a fallback in both invocations, such as ${FULLSEND_SKILLS_DIR:-${CLAUDE_CONFIG_DIR}/skills}, or fail fast with a clear message when the variable is unset.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[high] breaking-config

The skill invocation now depends on FULLSEND_SKILLS_DIR, but nothing in this repo sets it, and the variable is unset in the current pi review sandbox (PI_CODING_AGENT_DIR=/sandbox/pi-config, skills at /sandbox/pi-config/skills). With it unset the path expands to /pr-risk-assessment/scripts/risk-tier1.sh, so the Tier 1 script fails. The change also removes the CLAUDE_CONFIG_DIR path that worked on claude, with no fallback. The same dependency appears at skills/pr-risk-assessment/SKILL.md:207. Adding the variable to SANDBOX_RUNTIME_VARS only makes the reachability test tolerate it; it does not make any runtime provide it. The fullsend runtime repo was not available to check whether injection has landed.

Suggested fix: Land and release runtime injection of FULLSEND_SKILLS_DIR in fullsend-ai/fullsend for every runtime first, then merge this migration. Alternatively keep a fallback in the invocations until then, e.g. ${FULLSEND_SKILLS_DIR:-${CLAUDE_CONFIG_DIR:-${PI_CODING_AGENT_DIR:-$CODEX_HOME}}/skills}, applied in both risk-assessment.md and SKILL.md.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[high] breaking-config

The Tier 1 invocation now reads ${FULLSEND_SKILLS_DIR}, but nothing in this repo sets or exports it and the pi review sandbox does not set it either. With it unset the path expands to /pr-risk-assessment/scripts/risk-tier1.sh, which does not exist, so the Tier 1 script fails (exit 127). The identical invocation in skills/pr-risk-assessment/SKILL.md has the same problem. Issue #1672 triage says the migration is blocked until upstream fullsend runtimes export the variable; CLAUDE_CONFIG_DIR works today on the claude runtime. The PR also adds FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS and removes the KNOWN_GAPS entry, so the test treats the variable as runtime-provided instead of verifying it.

Suggested fix: Do not merge until upstream fullsend exports FULLSEND_SKILLS_DIR from all runtimes and that is confirmed, or use a working fallback such as ${FULLSEND_SKILLS_DIR:-${CLAUDE_CONFIG_DIR:-${PI_CODING_AGENT_DIR:-$CODEX_HOME}}/skills}. Keep the KNOWN_GAPS entry until the upstream change lands.

```
Capture the KEY=VALUE output. Each line is one signal.

Expand Down
2 changes: 1 addition & 1 deletion skills/pr-risk-assessment/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ response directly.

1. **Run Tier 1 script:**
```bash
bash "${CLAUDE_CONFIG_DIR}/skills/pr-risk-assessment/scripts/risk-tier1.sh"
bash "${FULLSEND_SKILLS_DIR}/pr-risk-assessment/scripts/risk-tier1.sh"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[high] unauthorized-change

The triage comment on issue #1672 says the agents-side migration is blocked until every runtime exports FULLSEND_SKILLS_DIR upstream, and that migrating earlier would break the claude runtime. Nothing in the diff or repo shows that export has landed, and the variable is unset in the pi review sandbox. Even so, the PR replaces the ${CLAUDE_CONFIG_DIR}/skills/... path (which works on claude) in SKILL.md:207, sub-agents/risk-assessment.md:27 and risk-tier1.sh:5. It also makes the reachability test pass on that unverified assumption: it adds FULLSEND_SKILLS_DIR to the hardcoded SANDBOX_RUNTIME_VARS allowlist (scripts/skill-env-reachability-test.sh:43) and deletes the #1672 KNOWN_GAPS entry. That only edits the allowlist; no runtime exports anything new. The PR description's claim that the test validates the variable and that the gap is resolved overstates what the diff does.

Suggested fix: Hold this PR until the upstream runtimes all export FULLSEND_SKILLS_DIR, and link evidence of that, or agree a transitional fallback (e.g. ${FULLSEND_SKILLS_DIR:-${CLAUDE_CONFIG_DIR}/skills}) on #1672. Until then, do not add FULLSEND_SKILLS_DIR to SANDBOX_RUNTIME_VARS or drop the #1672 gap tracking, and correct the PR description.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[high] missing-authorization

Issue #1672 says to migrate the skill paths and remove the KNOWN_GAPS entry only once a runtime-neutral FULLSEND_SKILLS_DIR is injected by all runtimes. The triage comment on the issue says this is blocked on an upstream fullsend change and warns that migrating early would break the claude runtime, which works today. This PR migrates anyway. Nothing in this repo produces FULLSEND_SKILLS_DIR (a grep of the base checkout finds no matches), and the variable is not set in the pi review sandbox. There, bash "${FULLSEND_SKILLS_DIR}/pr-risk-assessment/scripts/risk-tier1.sh" expands to /pr-risk-assessment/scripts/risk-tier1.sh and fails (exit 127), leaving Tier 1 unavailable. Any runtime that does not export the variable loses the working CLAUDE_CONFIG_DIR path. The same invocation changed in skills/pr-review/sub-agents/risk-assessment.md line 27. Whether the claude runtime exports FULLSEND_SKILLS_DIR could not be verified from this repo.

Suggested fix: Hold this PR until upstream fullsend exports FULLSEND_SKILLS_DIR in every runtime (claude, codex, pi). Or make the change safe now with a fallback such as ${FULLSEND_SKILLS_DIR:-${CLAUDE_CONFIG_DIR}/skills} in the three invocation sites, and keep the #1672 gap tracked until the upstream export lands.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[high] missing-authorization

Issue #1672 requires the fullsend runtimes to inject FULLSEND_SKILLS_DIR before consumers migrate. Nothing in this repo sets it, the PR links no evidence of runtime support, and it is absent from the current pi sandbox. When unset, the invocation expands to /pr-risk-assessment/scripts/risk-tier1.sh and Tier 1 extraction fails (also in skills/pr-review/sub-agents/risk-assessment.md:27).

Suggested fix: Hold the PR until the runtime export ships and link evidence, or keep the KNOWN_GAPS entry and add a fallback such as ${FULLSEND_SKILLS_DIR:-${CLAUDE_CONFIG_DIR}/skills} during the transition.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[high] missing-authorization

Issue #1672 only authorizes this migration once FULLSEND_SKILLS_DIR is injected by all runtimes. The triage comment on the issue says the work is blocked until upstream fullsend runtimes support the variable, and that migrating before then would break the claude runtime, which works today. Nothing in this repo defines or exports FULLSEND_SKILLS_DIR (no harness env.sandbox entry, no script assignment), and it was observed unset in the pi review sandbox. With it unset, the new invocation here (and the identical one in skills/pr-review/sub-agents/risk-assessment.md, step 1) expands to bash /pr-risk-assessment/scripts/risk-tier1.sh, a non-existent path, so Tier 1 risk metadata collection fails on every runtime that lacks the variable, including claude, instead of becoming runtime-neutral. The PR's 'Closes #1672' and 'trivial refactor' framing does not hold because the issue's precondition is unmet. The upstream fullsend implementation could not be verified from this repository. See also: [protected-path] finding.

Suggested fix: Do not merge until fullsend-ai/fullsend runtimes export FULLSEND_SKILLS_DIR and it is confirmed available in every sandbox runtime. Alternatively define it in harness env.sandbox, or keep a working skill-path resolution/fallback until the prerequisite lands. Drop 'Closes #1672' until the precondition is met.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] fail-open

When FULLSEND_SKILLS_DIR is unset or empty, the invocation resolves to the root-relative /pr-risk-assessment/scripts/risk-tier1.sh instead of failing fast with a clear error. The same unguarded invocation is in skills/pr-review/sub-agents/risk-assessment.md. Exploiting it would need write access to the sandbox filesystem root, which is unverified and unlikely, and the removed CLAUDE_CONFIG_DIR form had the same empty-expansion behaviour, so the realistic impact is an unclear failure.

Suggested fix: Use ${FULLSEND_SKILLS_DIR:?FULLSEND_SKILLS_DIR is required} in both invocations.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] fail-open

The Tier 1 invocation depends on an environment variable that may be unset. When it is, the path resolves to a root-level /pr-risk-assessment/scripts/risk-tier1.sh. The expected result is a missing-file failure, so risk scoring degrades. No access gate is involved, and no way for a PR author to plant a script at that path was found.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] fail-open

The invocation has no guard for an unset FULLSEND_SKILLS_DIR; the path silently resolves to the filesystem root and tier-redistribution rules degrade the score instead of stopping.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] misleading-label

Title says refactor and body says Trivial refactor, but the change replaces a variable that works on claude today with one nothing in this repo defines; it is not behavior-preserving.

Suggested fix: Reframe the PR as dependent on upstream fullsend exporting FULLSEND_SKILLS_DIR and link or confirm that change.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] misleading-label

The PR body calls this a trivial refactor and says the previously known gap is resolved and validated by the reachability test. The test passes only because the variable was added to the always-provided list; no runtime is shown to export it.

```
Capture KEY=VALUE output. Parse each line and store signals.

Expand Down
2 changes: 1 addition & 1 deletion skills/pr-risk-assessment/scripts/risk-tier1.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# risk-tier1.sh — Compute deterministic Tier 1 metadata signals for PR risk assessment.
#
# Run by the risk-assessment sub-agent inside the sandbox:
# bash "${CLAUDE_CONFIG_DIR}/skills/pr-risk-assessment/scripts/risk-tier1.sh"
# bash "${FULLSEND_SKILLS_DIR}/pr-risk-assessment/scripts/risk-tier1.sh"
Comment thread
qodo-code-review[bot] marked this conversation as resolved.
#
# Required env vars: PR_NUMBER, REPO_FULL_NAME, GH_TOKEN
# Output: KEY=VALUE pairs on stdout, one per line.
Expand Down
Loading