Skip to content

chore: deploy Set it Free Loop (review tier, v2.0.0) - #1

Closed
HemSoft wants to merge 3 commits into
mainfrom
sfl/tier-review
Closed

chore: deploy Set it Free Loop (review tier, v2.0.0)#1
HemSoft wants to merge 3 commits into
mainfrom
sfl/tier-review

Conversation

@HemSoft

@HemSoft HemSoft commented Aug 1, 2026

Copy link
Copy Markdown
Owner

Set it Free Loop — Deployment

Version: 2.0.0
Tier: review
Source SHA: 380fe0edc7a87cfc7b31233a955b37df0223a3a8
Engine policy: codex-gpt-55-high

Components deployed

  • labels
  • governance
  • sfl-pr-review

What is the Set it Free Loop?

The Set it Free Loop is a continuous
quality improvement operating model for software repositories. See the
CATALOG
for all available workflows.

Before merging

  • Run .\deployment\governance\setup-labels.ps1 -Owner <org> -Repo <repo> if labels are not yet configured
  • For each .md workflow: verify gh aw compile .github/workflows/<name>.md succeeds
  • Trigger a workflow manually to confirm output
  • Review sfl.json manifest in the repo root

Summary by cubic

Deploys the Set it Free Loop PR review workflow (review tier, v2.0.0) to run automated reviews when the sfl-review label is applied, posting inline findings, a consolidated review, and the SFL Reviewer Approval check.

  • New Features

    • Adds .github/workflows/sfl-pr-review.md (+ generated sfl-pr-review.lock.yml) that triggers on sfl-review, posts inline threads per finding, submits a consolidated review, creates the SFL Reviewer Approval check, and removes the label after completion.
    • Configures the engine to use OpenRouter with moonshotai/kimi-k3 (OPENROUTER_API_KEY) and GitHub App auth for safe outputs.
    • Adds sfl.json (version, tier, components, engine policy) and an SFL badge in README.md; marks workflow lock files as generated via .gitattributes; pins github/gh-aw-actions/setup@v0.84.1 in .github/aw/actions-lock.json.
  • Migration

    • Set OPENROUTER_API_KEY; run .\deployment\governance\setup-labels.ps1 -Owner <org> -Repo <repo> if labels aren’t configured.
    • Verify gh aw compile .github/workflows/sfl-pr-review.md succeeds, then apply sfl-review to a PR to confirm comments, the consolidated review, and the check.
    • Review sfl.json in the repo root.

Written for commit 093781a. Summary will update on new commits.

Review in cubic

Note

Deploy Set it Free Loop PR review workflow at v2.0.0

  • Adds sfl-pr-review.md, an agentic workflow that triggers on the sfl-review pull request label and runs a full-spectrum review (security, correctness, quality) using moonshotai/kimi-k3 via OpenRouter.
  • On completion, the workflow posts up to 20 inline review comments, submits a consolidated APPROVE or REQUEST_CHANGES review, and creates an SFL Reviewer Approval check run.
  • The generated sfl-pr-review.lock.yml pins all actions and containers for reproducible runs; .gitattributes marks lock files as generated and uses the ours merge strategy.
  • Adds sfl.json recording version 2.0.0, deployment timestamp, and engine policy, which also powers the dynamic SFL badge added to the README.

Macroscope summarized 093781a.

Source: HemSoft/set-it-free-loop@380fe0e
Version: 2.0.0
Tier: review
Components: labels, governance, sfl-pr-review
Engine policy: codex-gpt-55-high

See https://github.com/HemSoft/set-it-free-loop for full documentation.
@cursor

cursor Bot commented Aug 1, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Summary by CodeRabbit

  • New Features
    • Added label-triggered, AI-assisted pull request reviews covering security, correctness, reliability, and maintainability.
    • Reviews provide severity-based findings, inline feedback, consolidated results, and approval checks.
    • Added safeguards for authorization, usage limits, safe outputs, and incomplete or failed reviews.
    • Reviews operate in read-only mode and do not modify pull request code or metadata.
  • Documentation
    • Added project branding and license placeholder information to the README.
  • Chores
    • Added deployment metadata and workflow locking configuration.

Walkthrough

Adds a label-triggered SFL pull request review workflow. It configures access gates, credit limits, Codex execution, constrained outputs, result handling, and review publication.

Changes

SFL review automation

Layer / File(s) Summary
Workflow contract and deployment configuration
.gitattributes, .github/aw/actions-lock.json, .github/workflows/sfl-pr-review.md, README.md, sfl.json
Defines SFL metadata, pinned actions, review instructions, generated workflow attributes, repository metadata, model settings, and required secrets.
Activation and access gates
.github/workflows/sfl-pr-review.lock.yml
Triggers on the sfl-review label, validates access and credentials, checks limits, prepares the prompt, and publishes activation artifacts.
Agent review and threat detection
.github/workflows/sfl-pr-review.lock.yml
Prepares the repository and MCP environment, runs Copilot through pinned infrastructure, and captures outputs and usage.
Conclusion and safe-output processing
.github/workflows/sfl-pr-review.lock.yml
Aggregates results, maintains usage records, publishes failures, and processes constrained review, check, and label outputs.

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

Sequence Diagram(s)

sequenceDiagram
  participant PullRequest
  participant ActivationJob
  participant AgentJob
  participant MCPInfrastructure
  participant Copilot
  participant ConclusionJob
  participant SafeOutputJob
  participant GitHub
  PullRequest->>ActivationJob: apply sfl-review label
  ActivationJob->>AgentJob: provide validated review prompt
  AgentJob->>MCPInfrastructure: configure constrained tools
  AgentJob->>Copilot: run review with bounded credits
  Copilot-->>ConclusionJob: return review outputs and usage
  ConclusionJob->>SafeOutputJob: authorize successful output processing
  SafeOutputJob->>GitHub: publish review and check outputs
Loading

Suggested labels: feature

Poem

A rabbit checks the labeled queue,
Codex runs the review anew.
Safe outputs cross the guarded gate,
Checks and findings meet their fate.
“Hop!” says the bunny, “All is through!”

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly identifies the deployment of Set it Free Loop at review tier version 2.0.0.
Description check ✅ Passed The description directly explains the deployed workflow, components, configuration, and required validation steps.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch sfl/tier-review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@macroscopeapp

macroscopeapp Bot commented Aug 1, 2026

Copy link
Copy Markdown

Approvability

Verdict: Needs human review

Unable to check for correctness in 093781a. This PR deploys new CI/CD infrastructure for AI-powered PR reviews with security-sensitive components (secrets, automated PR approvals). Multiple unresolved review comments identify substantive issues: a race condition with stale PR head SHA, model allowlist misconfiguration that could block functionality, and workflow naming issues affecting branch protection. Human review recommended for both the infrastructure scope and outstanding findings.

You can customize Macroscope's approvability policy. Learn more.

@coderabbitai coderabbitai Bot added the feature label Aug 1, 2026

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 258b52173e

ℹ️ About Codex in GitHub

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

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

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

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

Comment on lines +77 to +79
Review only the pull request that triggered this workflow. The reviewed commit
must be `${{ github.event.pull_request.head.sha }}` and the SFL run ID is
`${{ github.run_id }}`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Revalidate the PR head before publishing the review

When a commit is pushed after the labeled event but before this long-running review finishes, this fixed event SHA becomes stale, and no new run is triggered because the workflow listens only for labeling. The workflow can therefore publish a verdict for an obsolete revision while claiming a current-head review; fetch the PR head again immediately before producing safe outputs and abort or retrigger if it differs from the event SHA.

Useful? React with 👍 / 👎.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

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

Inline comments:
In @.gitattributes:
- Line 1: Define the custom Git merge driver used by the
.github/workflows/*.lock.yml attribute in contributor setup or
deploy-workflow.ps1 by configuring merge.ours.driver to true; alternatively
remove merge=ours from .gitattributes if preserving the local file is
unnecessary, leaving linguist-generated=true.

In @.github/workflows/sfl-pr-review.md:
- Around line 51-52: Convert both provenance lines at the top of the workflow
source into HTML comments so Markdown does not interpret them as headings or
derive the workflow name from them. Preserve their content, then run gh aw
compile to regenerate the corresponding lock file and ensure the intended
workflow title remains the generated name.

In `@README.md`:
- Around line 2-5: Remove the stray license placeholder and duplicated H1 from
the README’s badge section, leaving the existing title followed by the badge and
its marker. Update the corresponding layout in deploy-workflow.ps1 so future
badge generation preserves this ordering without reintroducing either line.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 72b4be69-4252-4939-9d03-a79314aae7b3

📥 Commits

Reviewing files that changed from the base of the PR and between d8677d2 and 258b521.

📒 Files selected for processing (6)
  • .gitattributes
  • .github/aw/actions-lock.json
  • .github/workflows/sfl-pr-review.lock.yml
  • .github/workflows/sfl-pr-review.md
  • README.md
  • sfl.json

Comment thread .gitattributes
@@ -0,0 +1 @@
.github/workflows/*.lock.yml linguist-generated=true merge=ours No newline at end of file

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

merge=ours needs a driver definition in every clone.

Git has no built-in merge driver named ours. The attribute only takes effect when the repository configuration defines it:

git config merge.ours.driver true

Git configuration is not distributed with a clone. Without this command, Git reports the driver as missing and falls back to the default text merge, so .github/workflows/*.lock.yml still produces conflicts. Document the command in the contributor setup, or run it from deploy-workflow.ps1. If keeping the local file on merge is not required, drop merge=ours and keep only linguist-generated=true.

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

In @.gitattributes at line 1, Define the custom Git merge driver used by the
.github/workflows/*.lock.yml attribute in contributor setup or
deploy-workflow.ps1 by configuring merge.ours.driver to true; alternatively
remove merge=ours from .gitattributes if preserving the local file is
unnecessary, leaving linguist-generated=true.

Comment thread .github/workflows/sfl-pr-review.md Outdated
Comment thread README.md
Comment on lines +2 to +5
[License information to be added]
[![Set it Free Loop](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2FHemSoft%2Fpe-bot%2Fmain%2Fsfl.json&query=%24.version&prefix=v&label=Set%20it%20Free%20Loop&color=FFD700&style=flat&logo=githubactions&logoColor=white)](https://github.com/HemSoft/set-it-free-loop)
<!-- SFL_BADGE: auto-updated by deploy-workflow.ps1 -->
# PE-Bot (Performance Engineering Bot)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Remove the duplicated title and the stray license placeholder.

The badge insertion misplaced two lines. Line 2 repeats the license placeholder that already exists under ## License on line 30. Line 5 repeats the H1 from line 1, which is what markdownlint MD024 reports. The rendered README shows a license sentence above the badge and two identical titles.

Keep the title once, then the badge and its marker.

📝 Proposed fix
 # PE-Bot (Performance Engineering Bot)
-[License information to be added]
+
 [![Set it Free Loop](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2FHemSoft%2Fpe-bot%2Fmain%2Fsfl.json&query=%24.version&prefix=v&label=Set%20it%20Free%20Loop&color=FFD700&style=flat&logo=githubactions&logoColor=white)](https://github.com/HemSoft/set-it-free-loop)
 <!-- SFL_BADGE: auto-updated by deploy-workflow.ps1 -->
-# PE-Bot (Performance Engineering Bot)

The generator deploy-workflow.ps1 produced this layout, so fix the template as well to prevent the same result on the next deploy.

🧰 Tools
🪛 markdownlint-cli2 (0.23.1)

[warning] 5-5: Multiple headings with the same content

(MD024, no-duplicate-heading)

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

In `@README.md` around lines 2 - 5, Remove the stray license placeholder and
duplicated H1 from the README’s badge section, leaving the existing title
followed by the badge and its marker. Update the corresponding layout in
deploy-workflow.ps1 so future badge generation preserves this ordering without
reintroducing either line.

Source: Linters/SAST tools

Source: HemSoft/set-it-free-loop@235a0df
Version: 2.0.0
Tier: review
Components: labels, governance, sfl-pr-review
Engine policy: codex-gpt-55-high

See https://github.com/HemSoft/set-it-free-loop for full documentation.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

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

Inline comments:
In @.github/workflows/sfl-pr-review.lock.yml:
- Line 897: The apiProxy.models allowlist omits the moonshotai/kimi-k3 model
required by the Codex model settings. Update the model groups used by the agent
and detection jobs in the generated awf-config.json payload to include a
moonshotai/kimi-k3* match, preserving token steering and existing model
policies.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 409e3a15-5a16-48dd-9c36-de0b200b15cc

📥 Commits

Reviewing files that changed from the base of the PR and between 258b521 and f87db2d.

📒 Files selected for processing (3)
  • .github/workflows/sfl-pr-review.lock.yml
  • .github/workflows/sfl-pr-review.md
  • sfl.json

mkdir -p "$CODEX_HOME/logs" && touch /tmp/gh-aw/agent-step-summary.md
(umask 177 && touch /tmp/gh-aw/agent-stdio.log)
GH_AW_MAX_AI_CREDITS="${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }}"
printf '%s\n' "{\"\$schema\":\"https://github.com/github/gh-aw-firewall/releases/download/v0.27.42/awf-config.schema.json\",\"network\":{\"allowDomains\":[\"172.30.0.1\",\"api.github.com\",\"api.openai.com\",\"chatgpt.com\",\"github.com\",\"host.docker.internal\",\"openai.com\",\"openrouter.ai\"],\"isolation\":true,\"topologyAttach\":[\"awmg-mcpg\"]},\"apiProxy\":{\"enabled\":true,\"enableTokenSteering\":true,\"maxRuns\":500,\"maxAiCredits\":${GH_AW_MAX_AI_CREDITS},\"maxCacheMisses\":5,\"targets\":{\"openai\":{\"host\":\"openrouter.ai\"}},\"models\":{\"agent\":[\"sonnet-6x\",\"gpt-5.4\",\"gpt-5.5\",\"gpt-5.6\",\"gpt-5.3\",\"gemini-pro\",\"any\"],\"antigravity\":[\"copilot/antigravity*\",\"google/antigravity*\",\"gemini/antigravity*\"],\"any\":[\"copilot/*\",\"anthropic/*\",\"openai/*\",\"google/*\",\"gemini/*\"],\"claude\":[\"agent\"],\"codex\":[\"agent\"],\"coding\":[\"copilot/gpt-5*codex*\",\"openai/gpt-5*codex*\",\"gpt-5-codex\",\"kimi\"],\"computer-use\":[\"copilot/*computer-use*\",\"google/*computer-use*\",\"gemini/*computer-use*\",\"openai/*computer-use*\"],\"copilot\":[\"agent\"],\"deep-research\":[\"copilot/deep-research*\",\"copilot/o3-deep-research*\",\"copilot/o4-mini-deep-research*\",\"google/deep-research*\",\"gemini/deep-research*\",\"openai/o3-deep-research*\",\"openai/o4-mini-deep-research*\"],\"fable\":[\"copilot/*fable*\",\"anthropic/*fable*\"],\"gemini\":[\"agent\"],\"gemini-3-flash\":[\"copilot/gemini-3*flash*\",\"google/gemini-3*flash*\",\"gemini/gemini-3*flash*\"],\"gemini-3-pro\":[\"copilot/gemini-3*pro*\",\"google/gemini-3*pro*\",\"google/nano-banana*\",\"gemini/gemini-3*pro*\"],\"gemini-3.1-flash\":[\"copilot/gemini-3.1*flash*\",\"google/gemini-3.1*flash*\",\"gemini/gemini-3.1*flash*\"],\"gemini-3.1-pro\":[\"copilot/gemini-3.1*pro*\",\"google/gemini-3.1*pro*\",\"gemini/gemini-3.1*pro*\"],\"gemini-3.5-flash\":[\"copilot/gemini-3.5*flash*\",\"google/gemini-3.5*flash*\",\"gemini/gemini-3.5*flash*\"],\"gemini-3.6-flash\":[\"copilot/gemini-3.6*flash*\",\"google/gemini-3.6*flash*\",\"gemini/gemini-3.6*flash*\"],\"gemini-flash\":[\"copilot/gemini-*flash*\",\"google/gemini-*flash*\",\"gemini/gemini-*flash*\"],\"gemini-flash-lite\":[\"copilot/gemini-*flash*lite*\",\"google/gemini-*flash*lite*\",\"gemini/gemini-*flash*lite*\"],\"gemini-omni\":[\"copilot/gemini-omni*\",\"google/gemini-omni*\",\"gemini/gemini-omni*\"],\"gemini-pro\":[\"copilot/gemini-*pro*\",\"google/gemini-*pro*\",\"gemini/gemini-*pro*\"],\"gemma\":[\"copilot/gemma*\",\"google/gemma*\",\"gemini/gemma*\"],\"gpt-5\":[\"copilot/gpt-5*\",\"openai/gpt-5*\"],\"gpt-5-codex\":[\"copilot/gpt-5*codex*\",\"openai/gpt-5*codex*\"],\"gpt-5-mini\":[\"copilot/gpt-5*mini*\",\"openai/gpt-5*mini*\"],\"gpt-5-nano\":[\"copilot/gpt-5*nano*\",\"openai/gpt-5*nano*\"],\"gpt-5-pro\":[\"copilot/gpt-5*pro*\",\"openai/gpt-5*pro*\"],\"gpt-5.1\":[\"copilot/gpt-5.1*\",\"openai/gpt-5.1*\"],\"gpt-5.2\":[\"copilot/gpt-5.2*\",\"openai/gpt-5.2*\"],\"gpt-5.3\":[\"copilot/gpt-5.3*\",\"openai/gpt-5.3*\"],\"gpt-5.4\":[\"copilot/gpt-5.4*\",\"openai/gpt-5.4*\"],\"gpt-5.5\":[\"copilot/gpt-5.5*\",\"openai/gpt-5.5*\"],\"gpt-5.6\":[\"copilot/gpt-5.6*\",\"openai/gpt-5.6*\"],\"haiku\":[\"copilot/*haiku*\",\"anthropic/*haiku*\"],\"image-generation\":[\"copilot/gpt-image*\",\"openai/gpt-image*\",\"openai/chatgpt-image*\",\"copilot/gemini-*image*\",\"google/gemini-*image*\",\"gemini/gemini-*image*\",\"google/imagen*\"],\"kimi\":[\"copilot/kimi*\",\"openai/kimi*\"],\"kiwi\":[\"copilot/kiwi*\",\"openai/kiwi*\"],\"large\":[\"fable\",\"sonnet\",\"gpt-5-pro\",\"gpt-5\",\"gemini-pro\"],\"lyria\":[\"google/lyria*\",\"gemini/lyria*\",\"copilot/lyria*\"],\"mai-code\":[\"copilot/MAI-Code*\",\"copilot/mai-code*\",\"openai/MAI-Code*\"],\"mai-code-1-flash-picker\":[\"copilot/MAI-Code-1-Flash-picker*\",\"copilot/mai-code-1-flash-picker*\",\"openai/MAI-Code-1-Flash-picker*\"],\"mini\":[\"haiku\",\"gpt-5-mini\",\"gpt-5-nano\",\"gemini-flash-lite\"],\"nano-banana\":[\"copilot/nano-banana*\",\"google/nano-banana*\",\"gemini/nano-banana*\"],\"opus\":[\"copilot/*opus*\",\"anthropic/*opus*\"],\"opusplan\":[\"opus?effort=high\"],\"raptor-mini\":[\"copilot/raptor*\",\"openai/raptor*\"],\"reasoning\":[\"copilot/o1*\",\"copilot/o3*\",\"copilot/o4*\",\"openai/o1*\",\"openai/o3*\",\"openai/o4*\"],\"robotics\":[\"copilot/*robotics*\",\"google/*robotics*\",\"gemini/*robotics*\"],\"small\":[\"mini\"],\"small-agent\":[\"haiku\",\"gpt-5-mini\",\"gemini-flash\"],\"sonnet\":[\"copilot/*sonnet*\",\"anthropic/*sonnet*\"],\"sonnet-6x\":[\"copilot/*sonnet-4.5*\",\"copilot/*sonnet-4.6*\",\"copilot/*sonnet-5*\",\"copilot/*sonnet-4-5-*\",\"anthropic/*sonnet-4-5-*\",\"copilot/*sonnet-4-6*\",\"anthropic/*sonnet-4-6*\",\"anthropic/*sonnet-5*\"],\"summarization\":[\"haiku\",\"gpt-5-mini\",\"gemini-flash-lite\",\"mini\"],\"veo\":[\"google/veo*\",\"gemini/veo*\"],\"vision\":[\"copilot/gemini-*image*\",\"google/gemini-*image*\",\"gemini/gemini-*image*\",\"copilot/gemini-*flash*\",\"google/gemini-*flash*\",\"gemini/gemini-*flash*\"]}},\"container\":{\"imageTag\":\"0.27.42,squid=sha256:42dfeb649c680a8558cd5423dbc530b653a69413e35ffbe5e71da5d48c94bdf0,agent=sha256:26a8af4e5566485b02f52af59ee03803ae798271a9619d4767e94d07806deb9b,agent-act=sha256:a14ad974484aa518aab83d40f3f141175dfd171d3745e01c092375b970f73a20,api-proxy=sha256:944f2686c9ab9bec338fd14b662461662f77cd12cd0ea8a3e7cb8c0987cd1607,cli-proxy=sha256:da006bf96d2d246dd269d57b233c1798d2ad63d6cd64ca02f7bf71045028781f\"},\"logging\":{\"proxyLogsDir\":\"/tmp/gh-aw/sandbox/firewall/logs\",\"auditDir\":\"/tmp/gh-aw/sandbox/firewall/audit\"}}" > "${RUNNER_TEMP}/gh-aw/awf-config.json"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

Does the gh-aw-firewall api-proxy models allowlist block model slugs that match no configured pattern, or does it forward them as unknown models?

💡 Result:

In the gh-aw-firewall api-proxy, if an allowedModels list is configured (i.e., it is non-empty), any model slug that does not match at least one of the patterns in that allowlist is blocked [1][2]. The api-proxy enforces these policies during two primary stages: 1. Alias resolution, where policy-violating candidates are filtered out [3]. 2. The inference guard pipeline (model-policy-guard), which checks the request against the configured policy [3]. When an allowlist is provided, the api-proxy requires an explicit match; it does not forward non-matching models as "unknown" [1][2]. Conversely, if both allowedModels and disallowedModels are empty, the proxy operates under a default "allow all" behavior [1]. Additionally, disallowedModels always take precedence over allowedModels if a model slug matches patterns in both lists [2][3].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Repo files around workflow:"
git ls-files .github/workflows || true

echo
echo "Locate relevant occurrences:"
rg -n 'apiProxy|enableTokenSteering|allowedModels|models:|moonshotai|kimi-k3|unknown_model_ai_credits|GH_AW_UNKNOWN_MODEL_AI_CREDITS' .github/workflows/sfl-pr-review.lock.yml || true

echo
echo "Relevant context for proxy config:"
sed -n '860,945p' .github/workflows/sfl-pr-review.lock.yml

echo
echo "Relevant context for unknown-model outputs/failure handling:"
sed -n '420,460p' .github/workflows/sfl-pr-review.lock.yml
sed -n '1300,1345p' .github/workflows/sfl-pr-review.lock.yml

Repository: HemSoft/pe-bot

Length of output: 31110


Allow moonshotai/kimi-k3 in the api-proxy model policy.

The awf-config.json payload enables token steering, so the apiProxy.models object acts as an allowlist. Neither the agent nor detection jobs include a moonshotai/kimi-k3* match, while both pass GH_AW_MODEL_*_CODEX: moonshotai/kimi-k3?effort=high. Add moonshotai/kimi-k3* to the relevant model groups, or remove token steering if unknown models should be permitted.

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

In @.github/workflows/sfl-pr-review.lock.yml at line 897, The apiProxy.models
allowlist omits the moonshotai/kimi-k3 model required by the Codex model
settings. Update the model groups used by the agent and detection jobs in the
generated awf-config.json payload to include a moonshotai/kimi-k3* match,
preserving token steering and existing model policies.

Source: HemSoft/set-it-free-loop@78483bb
Version: 2.0.0
Tier: review
Components: labels, governance, sfl-pr-review
Engine policy: codex-gpt-55-high

See https://github.com/HemSoft/set-it-free-loop for full documentation.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

Caution

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

⚠️ Outside diff range comments (2)
.github/workflows/sfl-pr-review.md (2)

126-127: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Use the exact safe-output tool name.

The prompt names the tool create-pull-request-review-comment with hyphens. The generated tool list uses underscores: .github/workflows/sfl-pr-review.lock.yml line 314 declares create_pull_request_review_comment(max:20), and the handler config at line 1465 uses the same key. A hyphenated name does not resolve, so the agent can fail to post inline findings.

🐛 Proposed fix
-For each finding, call `create-pull-request-review-comment` on the most precise
+For each finding, call `create_pull_request_review_comment` on the most precise
 changed line. The comment body must begin with one of these exact prefixes:
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/sfl-pr-review.md around lines 126 - 127, Update the tool
reference in the review instructions around “For each finding” to use the exact
registered safe-output tool name, create_pull_request_review_comment, matching
the tool declaration and handler configuration; preserve the surrounding
requirement to comment on the most precise changed line.

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

Align the SFL version to the deployment target.

README.md advertises the SFL version from sfl.json as v2.0.0, but .github/workflows/sfl-pr-review.md declares version: "1.0.0". Update this manifest to the 2.0.0 deployment target unless 1.0.0 is intentional.

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

In @.github/workflows/sfl-pr-review.md at line 66, Update the version field in
the SFL workflow manifest from 1.0.0 to the 2.0.0 deployment target, keeping it
aligned with the version advertised by sfl.json and README.md.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/aw/actions-lock.json:
- Around line 3-6: Update the github/gh-aw-actions/setup@v0.84.1 lock entry and
every matching workflow lock entry to a valid current commit or pinned tag,
replacing the stale 029204130cb73f6ba684e56428c7f3e9319b708c SHA while
preserving the existing repository and version references.

In @.github/workflows/sfl-pr-review.md:
- Line 46: Update the workflow configuration around the threat-detection setting
so threat detection is enabled for the merge-gating SFL Reviewer Approval check;
alternatively, ensure that check is not used as a required branch-protection
status. Prefer enabling threat detection while preserving the existing review
workflow behavior.

In `@sfl.json`:
- Around line 17-21: Align the openrouter-kimi-k3-high profile with its intended
effort setting: if high effort is required, set the profile’s effort and
renderedModel values accordingly and regenerate the associated lock entry,
including the COPILOT_MODEL value; otherwise rename the profile to reflect its
null effort and update the related documentation.

---

Outside diff comments:
In @.github/workflows/sfl-pr-review.md:
- Around line 126-127: Update the tool reference in the review instructions
around “For each finding” to use the exact registered safe-output tool name,
create_pull_request_review_comment, matching the tool declaration and handler
configuration; preserve the surrounding requirement to comment on the most
precise changed line.
- Line 66: Update the version field in the SFL workflow manifest from 1.0.0 to
the 2.0.0 deployment target, keeping it aligned with the version advertised by
sfl.json and README.md.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 04d8e3ac-3706-4f6a-9431-08b6e39dd288

📥 Commits

Reviewing files that changed from the base of the PR and between f87db2d and 093781a.

📒 Files selected for processing (4)
  • .github/aw/actions-lock.json
  • .github/workflows/sfl-pr-review.lock.yml
  • .github/workflows/sfl-pr-review.md
  • sfl.json

Comment on lines +3 to +6
"github/gh-aw-actions/setup@v0.84.1": {
"repo": "github/gh-aw-actions/setup",
"version": "v0.84.1",
"sha": "029204130cb73f6ba684e56428c7f3e9319b708c"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Resolve the pinned tag to a commit SHA in github/gh-aw.
set -euo pipefail

gh api repos/github/gh-aw/git/ref/tags/v0.84.1 --jq '.object' || true
gh api repos/github/gh-aw/commits/029204130cb73f6ba684e56428c7f3e9319b708c --jq '.sha' || true

Repository: HemSoft/pe-bot

Length of output: 577


Update the stale pins for github/gh-aw-actions/setup@v0.84.1.

v0.84.1 points to ccf88b8a317e2409b40d87e0df29e6978de0f9c5, but the lock entries pin 029204130cb73f6ba684e56428c7f3e9319b708c, which no longer resolves. Update .github/aw/actions-lock.json and the matching workflow lock entries to the current commit or a new pinned tag.

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

In @.github/aw/actions-lock.json around lines 3 - 6, Update the
github/gh-aw-actions/setup@v0.84.1 lock entry and every matching workflow lock
entry to a valid current commit or pinned tag, replacing the stale
029204130cb73f6ba684e56428c7f3e9319b708c SHA while preserving the existing
repository and version references.

private-key: ${{ secrets.SFL_APP_PRIVATE_KEY }}

safe-outputs:
threat-detection: false

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Reconsider threat-detection: false for a check that can gate merges.

The agent reads untrusted pull request content, including the diff and existing comments. The workflow then creates the SFL Reviewer Approval check run and submits APPROVE or REQUEST_CHANGES. If a pull request author embeds instructions in the diff, the agent can be steered to report zero findings and set the check conclusion to success. If that check becomes a required status check, the injection bypasses the review gate. Threat detection is disabled, so no separate pass inspects the agent output for this case.

Enable threat-detection, or keep the SFL Reviewer Approval check out of branch protection.

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

In @.github/workflows/sfl-pr-review.md at line 46, Update the workflow
configuration around the threat-detection setting so threat detection is enabled
for the merge-gating SFL Reviewer Approval check; alternatively, ensure that
check is not used as a required branch-protection status. Prefer enabling threat
detection while preserving the existing review workflow behavior.

Comment thread sfl.json
Comment on lines +17 to +21
"profile": "openrouter-kimi-k3-high",
"provider": "copilot",
"model": "moonshotai/kimi-k3",
"effort": null,
"renderedModel": "moonshotai/kimi-k3",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Check every place the model and effort are rendered.
set -euo pipefail

rg -n 'kimi-k3|effort|renderedModel|openrouter-kimi' --glob '!node_modules' .

Repository: HemSoft/pe-bot

Length of output: 426


🏁 Script executed:

#!/bin/bash
# Description: Inspect the relevant configuration snippets and any nearby metadata/comments.
set -euo pipefail

printf '--- sfl.json ---\n'
cat -n sfl.json

printf '\n--- workflow referenced lock excerpt ---\n'
if [ -f .github/workflows/sfl-pr-review.lock.yml ]; then
  sed -n '870,900p' .github/workflows/sfl-pr-review.lock.yml | cat -n
fi

printf '\n--- repository files containing model or profile references ---\n'
rg -n 'moonshotai/kimi|COPILOT_MODEL|profile|renderedModel|effort=' --glob '!node_modules' . || true

Repository: HemSoft/pe-bot

Length of output: 243


🏁 Script executed:

#!/bin/bash
# Description: Inspect the relevant configuration snippets and any nearby metadata/comments.
set -euo pipefail

printf '%s\n' '--- sfl.json ---'
cat -n sfl.json

printf '%s\n' ''
printf '%s\n' '--- workflow referenced lock excerpt ---'
if [ -f .github/workflows/sfl-pr-review.lock.yml ]; then
  sed -n '870,900p' .github/workflows/sfl-pr-review.lock.yml | cat -n
fi

printf '%s\n' ''
printf '%s\n' '--- repository files containing model or profile references ---'
rg -n 'moonshotai/kimi|COPILOT_MODEL|profile|renderedModel|effort=' --glob '!node_modules' . || true

Repository: HemSoft/pe-bot

Length of output: 5295


Ensure the Kimi model matches the intended effort setting.

openrouter-kimi-k3-high has effort: null, renderedModel: moonshotai/kimi-k3, and COPILOT_MODEL: moonshotai/kimi-k3. If effort=high is required, add it to effort/renderedModel and the generated lock; otherwise update the profile name and documentation.

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

In `@sfl.json` around lines 17 - 21, Align the openrouter-kimi-k3-high profile
with its intended effort setting: if high effort is required, set the profile’s
effort and renderedModel values accordingly and regenerate the associated lock
entry, including the COPILOT_MODEL value; otherwise rename the profile to
reflect its null effort and update the related documentation.

@HemSoft

HemSoft commented Aug 16, 2026

Copy link
Copy Markdown
Owner Author

Closing this v2.0.0 SFL rollout as superseded. HemSoft now uses v2.1.0-rc.9, and hs-buddy is the only approved HemSoft SFL validation repository. This old deployment should not be merged or refreshed.

@HemSoft HemSoft closed this Aug 16, 2026
@HemSoft
HemSoft deleted the sfl/tier-review branch August 16, 2026 18:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant