-
Notifications
You must be signed in to change notification settings - Fork 0
chore: deploy Set it Free Loop (review tier, v2.0.0) #129
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
3a92b89
a4b0988
4997b8e
e1ccba1
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| .github/workflows/*.lock.yml linguist-generated=true merge=ours | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,9 @@ | ||
| { | ||
| "entries": { | ||
| "github/gh-aw-actions/setup@v0.84.1": { | ||
| "repo": "github/gh-aw-actions/setup", | ||
| "version": "v0.84.1", | ||
| "sha": "029204130cb73f6ba684e56428c7f3e9319b708c" | ||
| } | ||
| } | ||
| } |
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,185 @@ | ||
| --- | ||
| description: | | ||
| Standalone full-spectrum pull request review triggered by the sfl-review | ||
| label. Performs security, correctness and reliability, and quality and | ||
| maintainability passes, posts one inline thread per finding, submits a | ||
| consolidated review, and publishes the SFL Reviewer Approval check. | ||
|
|
||
| on: | ||
| label_command: | ||
| name: sfl-review | ||
| events: [pull_request] | ||
| remove_label: true | ||
|
|
||
| permissions: | ||
| contents: read | ||
| pull-requests: read | ||
|
|
||
| models: | ||
| default-ai-credits-pricing: | ||
| input: 3 | ||
| output: 15 | ||
|
|
||
| engine: | ||
| id: copilot | ||
| env: | ||
| COPILOT_PROVIDER_BASE_URL: https://openrouter.ai/api/v1 | ||
| COPILOT_PROVIDER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} | ||
| COPILOT_PROVIDER_TYPE: openai | ||
| COPILOT_PROVIDER_WIRE_API: responses | ||
| COPILOT_MODEL: moonshotai/kimi-k3 | ||
|
|
||
| model: moonshotai/kimi-k3 | ||
|
|
||
| network: | ||
| allowed: | ||
| - openrouter.ai | ||
|
|
||
| tools: | ||
| github: | ||
| toolsets: [pull_requests, repos] | ||
| github-app: | ||
| client-id: ${{ vars.SFL_APP_CLIENT_ID }} | ||
| private-key: ${{ secrets.SFL_APP_PRIVATE_KEY }} | ||
|
|
||
| safe-outputs: | ||
| threat-detection: false | ||
| github-app: | ||
| client-id: ${{ vars.SFL_APP_CLIENT_ID }} | ||
| private-key: ${{ secrets.SFL_APP_PRIVATE_KEY }} | ||
|
Comment on lines
+41
to
+49
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "Files:"
git ls-files | rg '(^|/)\.github/workflows/sfl-pr-review\.md|sfl-pr-review|github-app|auth|gh-aw|safe-outputs' || true
echo
echo "Target file excerpt:"
if [ -f .github/workflows/sfl-pr-review.md ]; then
nl -ba .github/workflows/sfl-pr-review.md | sed -n '1,110p'
fi
echo
echo "Search gh-aw usage and ignore-if-missing:"
rg -n "gh-aw|github-app:|safe-outputs:|ignore-if-missing|activation|fork" .github README.md 2>/dev/null || trueRepository: HemSoft/codexbar-mac Length of output: 304 🌐 Web query:
💡 Result: In the context of GitHub Agentic Workflows (gh-aw), "ignore-if-missing: true" is a configuration setting used in GitHub App authentication to allow a workflow to gracefully handle missing credentials [1][2]. By default, GitHub Agentic Workflows jobs will fail if the required GitHub App credentials (specifically client-id or private-key) are missing or resolve to empty strings [1][3]. This is common, for example, when App secrets are unavailable during fork pull request builds [1][2]. When you set "ignore-if-missing: true", the workflow skips the attempt to mint a token using the GitHub App [1][3]. Instead, it falls back to the standard non-App token chain: secrets.GH_AW_GITHUB_TOKEN or, if that is not set, secrets.GITHUB_TOKEN [1][2]. This setting can be used under the github-app configuration block (e.g., in safe-outputs or tools configuration) and applies consistently across token minting paths, including safe outputs, activation, pre-activation, and repository checkout [1][3][4]. The default behavior—failing if keys are missing—remains in effect if the field is omitted or explicitly set to false [1][2]. Citations:
🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "Target file excerpt:"
awk '{printf "%5d %s\n", NR, $0}' .github/workflows/sfl-pr-review.md | sed -n '1,130p'
echo
echo "Search gh-aw usage and ignore-if-missing:"
rg -n "gh-aw|github-app:|safe-outputs:|ignore-if-missing|activation|fork-head|GH_AW_GITHUB_TOKEN|GITHUB_TOKEN" .github README.md 2>/dev/null || true
echo
echo "Lockfile excerpt:"
awk '{printf "%5d %s\n", NR, $0} ' .github/workflows/sfl-pr-review.lock.yml | sed -n '1,160p'Repository: HemSoft/codexbar-mac Length of output: 50376 Defend fork PRs before App token minting. The generated workflow only skips fork-head PRs in the 🤖 Prompt for AI Agents |
||
| create-pull-request-review-comment: | ||
| side: RIGHT | ||
| max: 20 | ||
|
Comment on lines
+50
to
+52
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "Tracked workflow files:"
git ls-files '.github/workflows/*' | sed -n '1,120p'
echo
echo "Search for sfl-pr-review and gh-aw commands:"
rg -n "sfl-pr-review|gh-aw|create-pull-request-review-comment|max:|side:|findings|findings|report" .github/workflows/sfl-pr-review.md .github/workflows 2>/dev/null | sed -n '1,220p'
echo
if [ -f .github/workflows/sfl-pr-review.md ]; then
wc -l .github/workflows/sfl-pr-review.md
sed -n '1,160p' .github/workflows/sfl-pr-review.md | nl -ba
fiRepository: HemSoft/codexbar-mac Length of output: 42525 🌐 Web query:
💡 Result: In GitHub Agentic Workflows (gh-aw), the Citations:
🌐 Web query:
💡 Result: In GitHub Agentic Workflows (gh-aw), the Citations:
🌐 Web query:
💡 Result: The matching GitHub documentation shows: safe-outputs:
create-pr-review-comment:
max: 20This configures up to 20 pull-request review comments. (github.github.com) Citations: Increase or remove the inline-review-comment cap.
🤖 Prompt for AI Agents |
||
| submit-pull-request-review: | ||
| allowed-events: [APPROVE, REQUEST_CHANGES] | ||
| supersede-older-reviews: true | ||
| footer: always | ||
| create-check-run: | ||
| max: 1 | ||
| name: "SFL Reviewer Approval" | ||
| --- | ||
| # Deployed from: HemSoft/set-it-free-loop/deployment/workflows/sfl-pr-review.md@78483bbf7edf0a4f8d3bf2f68e58678da36044ae | ||
| # To upgrade: re-run deploy-workflow.ps1 at the desired SHA | ||
|
|
||
| <!-- sfl: | ||
| status: active | ||
| version: "1.0.0" | ||
| category: review | ||
| risk-class: trivial | ||
| target-labels: [sfl-review] | ||
| outcome-definition: | | ||
| The triggering pull request receives a current-head structured review, | ||
| one inline thread per finding, and an SFL Reviewer Approval check. | ||
| acceptance-criteria: | ||
| - The sfl-review label triggers exactly one current-head review run | ||
| - The trigger label is consumed during authorized activation | ||
| - Security, correctness/reliability, and quality/maintainability are reviewed | ||
| - Every finding is an inline thread classified Critical, High, Medium, or Low | ||
| - The review body reports the run ID, head SHA, verdict, and severity counts | ||
| - Critical or High findings fail the approval check and request changes | ||
| - Medium or Low findings do not fail the approval check | ||
| - Zero findings produce an approving review and successful approval check | ||
| source-repo: HemSoft/set-it-free-loop | ||
| --> | ||
|
|
||
| # SFL Review - Full-Spectrum Pull Request Review | ||
|
|
||
| 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 }}`. | ||
|
Comment on lines
+87
to
+89
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
When a commit is pushed after the Useful? React with 👍 / 👎. |
||
|
|
||
| Use the GitHub pull request tools to read the triggering PR, its changed files, | ||
| and the complete diff. Before creating comments, list existing review comments | ||
| and unresolved threads on the current head so you do not repeat a finding. | ||
|
Comment on lines
+91
to
+93
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win MAJOR Finding: Carry unresolved findings into re-review verdicts. The workflow suppresses duplicate comments after reading existing unresolved threads. The approval policy does not define whether those unresolved findings count. On a re-review, a prior Critical or High finding can have no new inline comment and still produce Also applies to: 130-137 🤖 Prompt for AI Agents |
||
|
|
||
| ## Required review passes | ||
|
|
||
| Perform all three evidence-based passes independently before producing output. | ||
|
|
||
| 1. **Security** | ||
| - Injection, unsafe command or path construction, XSS, SSRF, and deserialization | ||
| - Authentication, authorization, privilege boundaries, and secret exposure | ||
| - Dependency, workflow, and supply-chain risks | ||
| 2. **Correctness and Reliability** | ||
| - Logic errors, regressions, incorrect assumptions, null and boundary cases | ||
| - Error handling, races, resource leaks, data loss, and compatibility | ||
| - Whether tests cover every meaningful new or changed behavior | ||
| 3. **Quality and Maintainability** | ||
| - Excessive complexity, duplication, coupling, unclear ownership, and dead code | ||
| - Type safety, performance regressions, operational risk, and repository conventions | ||
| - Whether the implementation is the smallest complete and defensible change | ||
|
|
||
| ## Finding policy | ||
|
|
||
| Classify every finding into exactly one severity: | ||
|
|
||
| - **CRITICAL** - exploitable security issue, data loss, production crash, | ||
| public API break, race, or deadlock | ||
| - **HIGH** - serious correctness, authorization, reliability, or operational defect | ||
| - **MEDIUM** - material bug avenue, missing logic-branch tests, performance | ||
| regression, or maintainability problem | ||
| - **LOW** - actionable improvement with concrete value and low implementation risk | ||
|
|
||
| Do not report style preferences, speculative concerns, or findings without | ||
| specific evidence from the changed code. | ||
|
|
||
| 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: | ||
|
|
||
| - `**CRITICAL Finding**` | ||
| - `**HIGH Finding**` | ||
| - `**MEDIUM Finding**` | ||
| - `**LOW Finding**` | ||
|
|
||
| After the prefix, state the defect, impact, evidence, and a concrete fix. | ||
| Create exactly one inline thread per finding. If there are no findings, create | ||
| no inline comments. | ||
|
|
||
| ## Approval policy | ||
|
|
||
| Count all inline findings by severity. | ||
|
|
||
| - If any Critical or High finding exists, submit `REQUEST_CHANGES` and create | ||
| the `SFL Reviewer Approval` check with conclusion `failure`. | ||
| - If only Medium or Low findings exist, submit `APPROVE` and create the check | ||
| with conclusion `success`. | ||
| - If no findings exist, submit `APPROVE` and create the check with conclusion | ||
| `success`. | ||
|
|
||
| Submit exactly one consolidated review with this body: | ||
|
|
||
| ```markdown | ||
| ## SFL Full-Spectrum Review | ||
|
|
||
| SFL run ID: ${{ github.run_id }} | ||
| Head SHA: ${{ github.event.pull_request.head.sha }} | ||
| Verdict: APPROVE | ||
|
|
||
| | Severity | Count | | ||
| | --- | ---: | | ||
| | Critical | 0 | | ||
| | High | 0 | | ||
| | Medium | 0 | | ||
| | Low | 0 | | ||
|
|
||
| ### Review passes | ||
|
|
||
| - Security: complete | ||
| - Correctness and Reliability: complete | ||
| - Quality and Maintainability: complete | ||
|
|
||
| ### Summary | ||
|
|
||
| Concise evidence-based summary of the review result. | ||
| ``` | ||
|
|
||
| Replace the verdict and counts with the actual result. Use | ||
| `Verdict: CHANGES_REQUESTED` when Critical or High findings exist. | ||
|
|
||
| Create exactly one check run named `SFL Reviewer Approval` with: | ||
|
|
||
| - `title`: `SFL full-spectrum review complete` | ||
| - `summary`: the verdict, head SHA, run ID, and severity counts | ||
| - `conclusion`: the approval-policy result above | ||
|
|
||
| Do not modify code, branches, pull request labels, or pull request metadata. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,9 @@ | ||
| # CodexBar 🎚️ for Mac | ||
|
|
||
| [](https://github.com/HemSoft/set-it-free-loop) | ||
| <!-- SFL_BADGE: auto-updated by deploy-workflow.ps1 --> | ||
|
Comment on lines
+3
to
+4
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
This public badge and the associated review automation are introduced without updating the AGENTS.md reference: AGENTS.md:L30-L33 Useful? React with 👍 / 👎. |
||
| # CodexBar 🎚️ for Mac | ||
|
Comment on lines
+3
to
+5
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win LOW Finding: Remove the duplicate The opening contains the title at Line 1 and repeats it at Line 5. 🧰 Tools🪛 markdownlint-cli2 (0.23.1)[warning] 5-5: Multiple headings with the same content (MD024, no-duplicate-heading) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||
|
|
||
| A native macOS menu bar app that keeps your AI provider usage limits visible. The Mac member of the CodexBar family: | ||
|
|
||
| - [codexbar](https://github.com/HemSoft/codexbar) — Windows (C# / WPF / .NET 9) | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| { | ||
| "version": "2.0.0", | ||
| "deployedAt": "2026-08-02T03:32:25Z", | ||
| "tier": "review", | ||
| "source": "HemSoft/set-it-free-loop", | ||
| "sourceSha": "78483bbf7edf0a4f8d3bf2f68e58678da36044ae", | ||
| "components": [ | ||
| "governance", | ||
| "labels", | ||
| "sfl-pr-review" | ||
| ], | ||
| "enginePolicy": { | ||
| "defaultProfile": "codex-gpt-55-high", | ||
| "workflows": [ | ||
| { | ||
| "name": "sfl-pr-review", | ||
| "profile": "openrouter-kimi-k3-high", | ||
| "provider": "copilot", | ||
| "model": "moonshotai/kimi-k3", | ||
| "effort": null, | ||
| "renderedModel": "moonshotai/kimi-k3", | ||
| "requiredSecretsAnyOf": [ | ||
| "OPENROUTER_API_KEY" | ||
| ], | ||
| "arguments": [], | ||
| "environment": { | ||
| "COPILOT_PROVIDER_BASE_URL": "https://openrouter.ai/api/v1", | ||
| "COPILOT_PROVIDER_API_KEY": "${{ secrets.OPENROUTER_API_KEY }}", | ||
| "COPILOT_PROVIDER_TYPE": "openai", | ||
| "COPILOT_PROVIDER_WIRE_API": "responses", | ||
| "COPILOT_MODEL": "moonshotai/kimi-k3" | ||
| } | ||
| } | ||
| ] | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
Repository: HemSoft/codexbar-mac
Length of output: 212
🏁 Script executed:
Repository: HemSoft/codexbar-mac
Length of output: 472
🌐 Web query:
gitattributes merge driver built-in merge theirs rename binary conflict documentation merge=ours merge builtin ours💡 Result:
In Git, the merge attribute in.gitattributes allows you to specify how file-level merge conflicts are handled [1][2]. This is distinct from global merge strategies (like -s ours) and functions as a low-level merge driver invoked only when a file has conflicting changes on both sides of a merge [3][4]. Built-in Merge Drivers: Git provides several built-in merge drivers that can be referenced in.gitattributes: text: The standard 3-way merge driver used for ordinary text files, which marks conflicts with <<<<<<<, =======, and >>>>>>> [1]. binary: Takes the version from the current branch (ours) and marks the file as having conflicts. This is intended for files without defined merge semantics [1]. union: Attempts to keep lines from both versions. Custom Merge Drivers: To define custom behavior, you must first register a driver in your Git configuration (.git/config or.gitconfig) and then assign it to files in.gitattributes [2][5]. Example: "Ours" Strategy for Specific Files To automatically resolve conflicts by always preferring your local version (an "ours" approach for specific files), you can define a custom driver named ours: 1. Configure the driver: git config --global merge.ours.driver true 2. Assign it in.gitattributes: filename.ext merge=ours Setting the driver to true tells Git that the merge is always successful and to retain the current version [5]. Note that this custom driver is only invoked if both branches have modified the file [3][4]. If only one side changed the file, Git will automatically take that side's version regardless of the merge driver setting [3]. Important Distinctions: Merge Driver vs. Merge Strategy: The merge= attribute in.gitattributes defines a per-file driver [2]. This is separate from the -s ours or -X ours options used during a git merge command, which affect the entire merge operation [6][7][8]. Binary Files: Marking a file as binary in.gitattributes (via the binary macro, which sets -text -diff) prevents line-ending conversion and textual diffs, but it does not automatically define a custom merge driver unless specified [1][5]. Configuration Limitations: Merge driver definitions (the [merge "drivername"] sections in.git/config) are not tracked in the repository and must be configured on every machine that clones the repository [3][9]. To ensure consistency, teams often document these requirements or use automation [9][5].
Citations:
Do not rely on an undeclared
merge=oursdriver..gitattributesonly names a low-level merge driver; it does not configuremerge.ours.driver. Use a built-in driver such asbinary/merge=binaryfor the generated lock file, or add and test themerge.oursdriver in each merge environment.🤖 Prompt for AI Agents