Skip to content

Add daily AI review workflow for latest ingest artifacts#29

Merged
shaypal5 merged 11 commits intomainfrom
codex/daily-ai-review-workflow
Mar 21, 2026
Merged

Add daily AI review workflow for latest ingest artifacts#29
shaypal5 merged 11 commits intomainfrom
codex/daily-ai-review-workflow

Conversation

@shaypal5
Copy link
Member

Summary

  • add a daily AI-powered review workflow that runs after daily-state-run completes successfully
  • review the latest news_items / ingest artifacts from the state repo and ask Anthropic whether engineering issues should be opened
  • create only new issues by embedding hidden fingerprint markers in the issue body

Details

This PR adds a small review module at src/denbust/news_items/daily_review.py plus a new workflow, news-items-daily-review.yml.

The workflow:

  • runs on workflow_run after daily-state-run completes successfully
  • also supports workflow_dispatch
  • uses the existing news-items-ingest environment
  • checks out the state repo and reads the latest matching files from:
    • news_items/ingest/runs/
    • news_items/ingest/logs/
  • sends the latest run snapshot, debug summary, and full debug log to Anthropic with a strict JSON issue-generation prompt
  • opens only new GitHub issues, skipping fingerprints that are already open

This keeps the implementation narrow:

  • no new dataset/job type was added to the platform spine yet
  • the workflow is a consumer of the existing ingest artifacts, not a second ingest path
  • issue deduplication is handled with hidden body markers like <!-- denbust-review:<fingerprint> -->

Secrets and environment

Required:

  • STATE_REPO_PAT
  • ANTHROPIC_API_KEY

Optional:

  • DENBUST_REVIEW_MODEL
  • DENBUST_REVIEW_ISSUE_LABELS

The workflow uses the built-in GITHUB_TOKEN with issues: write permissions to create issues in this repository.

Validation

  • PYTHONPATH=src uv run pytest -q tests/unit/test_daily_review.py
  • uv run ruff check src/denbust/news_items/daily_review.py tests/unit/test_daily_review.py
  • uv run mypy src/denbust/news_items/daily_review.py

@shaypal5 shaypal5 self-assigned this Mar 21, 2026
@shaypal5 shaypal5 added enhancement New feature or request AI & Agents ci labels Mar 21, 2026
@github-actions
Copy link

pr-agent-context report:

This run includes failing checks on PR #29.

Diagnose and fix the failing checks below, then push all of these changes in a single commit.

# Failing Checks

## FAIL-1
Type: GitHub Actions job
Workflow: ci-test
Job: lint
Run attempt: 1
Conclusion: failure
Current run: yes
URL: https://github.com/DataHackIL/tfht_enforce_idx/actions/runs/23380967323/job/68020238844
Failed steps: Run Ruff format check

Summary:
    lint

## FAIL-2
Type: Commit status
Context: pre-commit.ci - pr
Status: failure
URL: https://results.pre-commit.ci/run/github/1159993403/1774100596.ZlmLEPV8S-qgBM9Pqux0RA

Summary:
    checks completed with failures

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: pull request opened
Workflow run: 23380967323 attempt 1
Comment timestamp: 2026-03-21T13:44:55.288455+00:00
PR head commit: d906b4ceaf824db8e008a9eb2f3de56641855662

@github-actions
Copy link

pr-agent-context report:

This run includes a patch coverage gap on PR #29.

Address the patch coverage gaps below, then push all of these changes in a single commit.

# Patch coverage

Patch test coverage is 78.85%; please raise it to 100%. These are the uncovered code lines:
- src/denbust/news_items/daily_review.py: 84, 108, 111, 136, 149, 188, 193, 197, 249, 265, 269, 270, 272, 276, 297, 298, 318, 319, 320, 321, 322, 323, 324, 325, 327, 328, 329, 330, 331, 332, 334, 343, 347

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: commit pushed
Workflow run: 23380987461 attempt 1
Comment timestamp: 2026-03-21T13:48:10.791987+00:00
PR head commit: 26514edba9c9de42abf21a8a98e6680bb9c406fc

@github-actions
Copy link

pr-agent-context report:

This run includes a failing check on PR #29.

Diagnose and fix the failing checks below, then push all of these changes in a single commit.

# Failing Checks

## FAIL-1
Type: Commit status
Context: pre-commit.ci - pr
Status: failure
URL: https://results.pre-commit.ci/run/github/1159993403/1774101618.Chs7FRgJT-WEqEWJ_VSixQ

Summary:
    checks completed with failures

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: commit pushed
Workflow run: 23381250342 attempt 1
Comment timestamp: 2026-03-21T14:00:45.017339+00:00
PR head commit: d081bf7aa2969ee504d878fa45edf0fd22857971

@github-actions
Copy link

pr-agent-context report:

This run includes a patch coverage gap on PR #29.

Address the patch coverage gaps below, then push all of these changes in a single commit.

# Patch coverage

Patch test coverage is 99.36%; please raise it to 100%. These are the uncovered code lines:
- src/denbust/news_items/daily_review.py: 347

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: commit pushed
Workflow run: 23381252300 attempt 1
Comment timestamp: 2026-03-21T14:03:54.230787+00:00
PR head commit: 4404d2f87605e55b5ab8613e3dfd31bc1e56bb60

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds an AI-assisted “daily review” layer on top of existing news_items/ingest artifacts, intended to automatically inspect the latest successful daily-state-run outputs and open deduplicated GitHub issues when the run looks suspicious.

Changes:

  • Introduces denbust.news_items.daily_review module to locate latest ingest artifacts, call Anthropic for issue candidates, and create GitHub issues with fingerprint-based dedup markers.
  • Adds a new news-items-daily-review GitHub Actions workflow triggered after daily-state-run completes successfully (and via manual dispatch).
  • Adds unit tests and README documentation for the new workflow and artifact expectations.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 6 comments.

File Description
src/denbust/news_items/daily_review.py Core implementation: artifact selection, Anthropic prompt/review parsing, GitHub issue creation + dedup logic, CLI entrypoint.
.github/workflows/news-items-daily-review.yml Workflow wiring to run the module after successful daily ingest and create issues using GITHUB_TOKEN.
tests/unit/test_daily_review.py Unit tests covering artifact resolution, JSON extraction, reviewer parsing behavior, issue client behavior, and CLI env handling.
README.md Documents the daily AI review workflow, artifact locations, and secrets/optional config.

@github-actions
Copy link

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

This run includes unresolved review comments and a patch coverage gap on PR #29.

For each unresolved review comment, recommend one of: resolve as irrelevant, accept and implement
the recommended solution, open a separate issue and resolve as out-of-scope for this PR, accept and
implement a different solution, or resolve as already treated by the code.

After I reply with my decision per item, implement the accepted actions, resolve the corresponding
PR comments, address the patch coverage gaps below, and push all of these changes in a single
commit.

# Other Review Comments

## REVIEW-1
Location: src/denbust/news_items/daily_review.py:323
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969633108
Root author: copilot-pull-request-reviewer

Comment:
    `DENBUST_REVIEW_MODEL` is read with `os.getenv(..., default)`, but if the workflow sets the env var to an empty string (e.g., optional secret not configured), `os.getenv` returns "" and the default model is not used. This would cause the Anthropic call to run with an empty model name and fail. Consider treating empty/whitespace values as missing (e.g., `os.getenv(...) or <default>` / `.strip()` before fallback).
    ~~~suggestion
        raw_model = os.getenv("DENBUST_REVIEW_MODEL", "").strip()
        model = raw_model or "claude-sonnet-4-20250514"
    ~~~

## REVIEW-2
Location: src/denbust/news_items/daily_review.py:108
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969633117
Root author: copilot-pull-request-reviewer

Comment:
    The markdown-fence stripping logic fails for single-line fenced responses like "~~~json { ... }~~~" or "~~~json\n{...}~~~" where the JSON starts on the same line as the opening fence (or there are only 1–2 lines). In those cases `payload` becomes empty/"~~~" and `json.loads` will crash. Consider a more robust fence removal (e.g., regex that removes the opening fence + optional language token and the trailing fence even when inline).
    ~~~suggestion
            # First, try to strip a complete fenced block (handles single-line and multi-line forms).
            # Examples handled:
            #   ~~~json {"a": 1}~~~
            #   ~~~json
            #   {"a": 1}
            #   ~~~
            fenced_match = re.match(r"^~~~(\w+)?\s*\n?(.*)~~~$", payload, re.DOTALL)
            if fenced_match:
                payload = fenced_match.group(2).strip()
            else:
                # Fallback to legacy line-based stripping for incomplete or unusual fences.
                lines = payload.splitlines()
                if len(lines) >= 3 and lines[-1].strip() == "~~~":
                    payload = "\n".join(lines[1:-1]).strip()
                else:
                    payload = "\n".join(lines[1:]).strip()
    ~~~

## REVIEW-3
Location: src/denbust/news_items/daily_review.py:185
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969633120
Root author: copilot-pull-request-reviewer

Comment:
    Only the first content block is inspected, and if it's not a `TextBlock` (or content is empty) `text` remains "" and `extract_json_block` raises `JSONDecodeError`, failing the workflow. Consider concatenating all `TextBlock` parts (or handling other block types) and raising/handling a clearer error (or returning an empty `ReviewResult`) when no text is available.
    ~~~suggestion
            # Concatenate text from all TextBlock content parts.
            text_parts: list[str] = []
            if response.content:
                for block in response.content:
                    if isinstance(block, TextBlock):
                        text_parts.append(block.text)
            text = "\n".join(text_parts).strip()
            if not text:
                # No usable text in the response; treat as no issues rather than failing.
                return ReviewResult()

            try:
                payload = extract_json_block(text)
            except json.JSONDecodeError:
                # Malformed or non-JSON response; treat as no issues rather than failing.
                return ReviewResult()
    ~~~

## REVIEW-4
Location: src/denbust/news_items/daily_review.py:172
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969633127
Root author: copilot-pull-request-reviewer

Comment:
    The prompt includes the full pretty-printed `debug_log` JSON. Depending on run size this can easily exceed the model context limit or slow the workflow (indentation also increases payload size), causing Anthropic API failures. Consider truncating large sections (e.g., limit article lists), using a compact JSON encoding, and/or sending only the debug summary + selected excerpts needed for issue triage.

## REVIEW-5
Location: src/denbust/news_items/daily_review.py:244
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969633129
Root author: copilot-pull-request-reviewer

Comment:
    This only fetches the first page of open issues (`per_page=100`) and ignores pagination. If the repo ever has >100 open issues, fingerprints beyond the first page won't be detected and the workflow may open duplicates. Consider paginating via the `Link` header (or using the search API / label filtering) to ensure full coverage.
    ~~~suggestion
            fingerprints: set[str] = set()
            url = f"https://api.github.com/repos/{self._repository}/issues"
            params: dict[str, Any] | None = {"state": "open", "per_page": 100}

            while url:
                response = self._client.get(url, params=params)
                response.raise_for_status()
                for issue in response.json():
                    if not isinstance(issue, dict) or "pull_request" in issue:
                        continue
                    body = str(issue.get("body") or "")
                    match = re.search(r"<!-- denbust-review:([a-z0-9._-]+) -->", body)
                    if match:
                        fingerprints.add(match.group(1))

                link_header = response.headers.get("Link", "")
                next_url: str | None = None
                if link_header:
                    for part in link_header.split(","):
                        section = part.strip().split(";")
                        if len(section) < 2:
                            continue
                        url_part = section[0].strip()
                        rel_part = section[1].strip()
                        if rel_part == 'rel="next"' and url_part.startswith("<") and url_part.endswith(">"):
                            next_url = url_part[1:-1]
                            break
                url = next_url
                # The "next" URL is already fully qualified and includes query params.
                params = None
    ~~~

## REVIEW-6
Location: .github/workflows/news-items-daily-review.yml:66
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969633132
Root author: copilot-pull-request-reviewer

Comment:
    Optional secrets are mapped into env vars unconditionally. In GitHub Actions, an unset secret expands to an empty string, which will override the Python default model selection (`os.getenv('DENBUST_REVIEW_MODEL', ...)` will see ""). Consider omitting these env vars when unset, or update the Python code to treat empty strings as missing so the defaults apply.
    ~~~suggestion
            run: |
              if [ -n "${{ secrets.DENBUST_REVIEW_MODEL }}" ]; then
                export DENBUST_REVIEW_MODEL="${{ secrets.DENBUST_REVIEW_MODEL }}"
              fi
              if [ -n "${{ secrets.DENBUST_REVIEW_ISSUE_LABELS }}" ]; then
                export DENBUST_REVIEW_ISSUE_LABELS="${{ secrets.DENBUST_REVIEW_ISSUE_LABELS }}"
              fi
              python -m denbust.news_items.daily_review
    ~~~

# Patch coverage

Patch test coverage is 99.36%; please raise it to 100%. These are the uncovered code lines:
- src/denbust/news_items/daily_review.py: 347

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: review comment posted
Workflow run: 23381461638 attempt 1
Comment timestamp: 2026-03-21T14:12:56.452987+00:00
PR head commit: 4404d2f87605e55b5ab8613e3dfd31bc1e56bb60

@github-actions
Copy link

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

This run includes unresolved review comments on PR #29.

For each unresolved review comment, recommend one of: resolve as irrelevant, accept and implement
the recommended solution, open a separate issue and resolve as out-of-scope for this PR, accept and
implement a different solution, or resolve as already treated by the code.

After I reply with my decision per item, implement the accepted actions, resolve the corresponding
PR comments, and push all of these changes in a single commit.

# Other Review Comments

## REVIEW-1
Location: src/denbust/news_items/daily_review.py:199
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969633127
Root author: copilot-pull-request-reviewer

Comment:
    The prompt includes the full pretty-printed `debug_log` JSON. Depending on run size this can easily exceed the model context limit or slow the workflow (indentation also increases payload size), causing Anthropic API failures. Consider truncating large sections (e.g., limit article lists), using a compact JSON encoding, and/or sending only the debug summary + selected excerpts needed for issue triage.

## REVIEW-2
Location: .github/workflows/news-items-daily-review.yml:66
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969633132
Root author: copilot-pull-request-reviewer

Comment:
    Optional secrets are mapped into env vars unconditionally. In GitHub Actions, an unset secret expands to an empty string, which will override the Python default model selection (`os.getenv('DENBUST_REVIEW_MODEL', ...)` will see ""). Consider omitting these env vars when unset, or update the Python code to treat empty strings as missing so the defaults apply.
    ~~~suggestion
            run: |
              if [ -n "${{ secrets.DENBUST_REVIEW_MODEL }}" ]; then
                export DENBUST_REVIEW_MODEL="${{ secrets.DENBUST_REVIEW_MODEL }}"
              fi
              if [ -n "${{ secrets.DENBUST_REVIEW_ISSUE_LABELS }}" ]; then
                export DENBUST_REVIEW_ISSUE_LABELS="${{ secrets.DENBUST_REVIEW_ISSUE_LABELS }}"
              fi
              python -m denbust.news_items.daily_review
    ~~~

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: status updated
Workflow run: 23381684805 attempt 1
Comment timestamp: 2026-03-21T14:26:10.261217+00:00
PR head commit: 31f5f17e4aa7d36d508f2ed3612f19a3d4815bcc

@github-actions
Copy link

pr-agent-context report:

This run includes unresolved review comments and a failing check on PR #29.

For each unresolved review comment, recommend one of: resolve as irrelevant, accept and implement
the recommended solution, open a separate issue and resolve as out-of-scope for this PR, accept and
implement a different solution, or resolve as already treated by the code.

After I reply with my decision per item, implement the accepted actions, resolve the corresponding
PR comments, fix the failing checks below, and push all of these changes in a single commit.

# Other Review Comments

## REVIEW-1
Location: src/denbust/news_items/daily_review.py:199
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969633127
Root author: copilot-pull-request-reviewer

Comment:
    The prompt includes the full pretty-printed `debug_log` JSON. Depending on run size this can easily exceed the model context limit or slow the workflow (indentation also increases payload size), causing Anthropic API failures. Consider truncating large sections (e.g., limit article lists), using a compact JSON encoding, and/or sending only the debug summary + selected excerpts needed for issue triage.

## REVIEW-2
Location: .github/workflows/news-items-daily-review.yml:66
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969633132
Root author: copilot-pull-request-reviewer

Comment:
    Optional secrets are mapped into env vars unconditionally. In GitHub Actions, an unset secret expands to an empty string, which will override the Python default model selection (`os.getenv('DENBUST_REVIEW_MODEL', ...)` will see ""). Consider omitting these env vars when unset, or update the Python code to treat empty strings as missing so the defaults apply.
    ~~~suggestion
            run: |
              if [ -n "${{ secrets.DENBUST_REVIEW_MODEL }}" ]; then
                export DENBUST_REVIEW_MODEL="${{ secrets.DENBUST_REVIEW_MODEL }}"
              fi
              if [ -n "${{ secrets.DENBUST_REVIEW_ISSUE_LABELS }}" ]; then
                export DENBUST_REVIEW_ISSUE_LABELS="${{ secrets.DENBUST_REVIEW_ISSUE_LABELS }}"
              fi
              python -m denbust.news_items.daily_review
    ~~~

# Failing Checks

## FAIL-1
Type: Commit status
Context: pre-commit.ci - pr
Status: failure
URL: https://results.pre-commit.ci/run/github/1159993403/1774103152.dWnJeXqESOiZKd-jYTwRgw

Summary:
    checks completed with failures

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: commit pushed
Workflow run: 23381684272 attempt 1
Comment timestamp: 2026-03-21T14:26:22.115215+00:00
PR head commit: c671f73f1fd8806c4980d1ec649cf7b9befae04a

@github-actions
Copy link

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

This run includes unresolved review comments on PR #29.

For each unresolved review comment, recommend one of: resolve as irrelevant, accept and implement
the recommended solution, open a separate issue and resolve as out-of-scope for this PR, accept and
implement a different solution, or resolve as already treated by the code.

After I reply with my decision per item, implement the accepted actions, resolve the corresponding
PR comments, and push all of these changes in a single commit.

# Other Review Comments

## REVIEW-1
Location: src/denbust/news_items/daily_review.py:199
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969633127
Root author: copilot-pull-request-reviewer

Comment:
    The prompt includes the full pretty-printed `debug_log` JSON. Depending on run size this can easily exceed the model context limit or slow the workflow (indentation also increases payload size), causing Anthropic API failures. Consider truncating large sections (e.g., limit article lists), using a compact JSON encoding, and/or sending only the debug summary + selected excerpts needed for issue triage.

## REVIEW-2
Location: .github/workflows/news-items-daily-review.yml:66
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969633132
Root author: copilot-pull-request-reviewer

Comment:
    Optional secrets are mapped into env vars unconditionally. In GitHub Actions, an unset secret expands to an empty string, which will override the Python default model selection (`os.getenv('DENBUST_REVIEW_MODEL', ...)` will see ""). Consider omitting these env vars when unset, or update the Python code to treat empty strings as missing so the defaults apply.
    ~~~suggestion
            run: |
              if [ -n "${{ secrets.DENBUST_REVIEW_MODEL }}" ]; then
                export DENBUST_REVIEW_MODEL="${{ secrets.DENBUST_REVIEW_MODEL }}"
              fi
              if [ -n "${{ secrets.DENBUST_REVIEW_ISSUE_LABELS }}" ]; then
                export DENBUST_REVIEW_ISSUE_LABELS="${{ secrets.DENBUST_REVIEW_ISSUE_LABELS }}"
              fi
              python -m denbust.news_items.daily_review
    ~~~

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: status updated
Workflow run: 23381686352 attempt 1
Comment timestamp: 2026-03-21T14:26:16.990997+00:00
PR head commit: 31f5f17e4aa7d36d508f2ed3612f19a3d4815bcc

@codecov
Copy link

codecov bot commented Mar 21, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.84%. Comparing base (a26614b) to head (bf91f39).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff            @@
##             main      #29    +/-   ##
========================================
  Coverage   99.83%   99.84%            
========================================
  Files          37       38     +1     
  Lines        3072     3270   +198     
========================================
+ Hits         3067     3265   +198     
  Misses          5        5            
Files with missing lines Coverage Δ
src/denbust/news_items/daily_review.py 100.00% <100.00%> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-actions
Copy link

pr-agent-context report:

This run includes unresolved review comments and a patch coverage gap on PR #29.

For each unresolved review comment, recommend one of: resolve as irrelevant, accept and implement
the recommended solution, open a separate issue and resolve as out-of-scope for this PR, accept and
implement a different solution, or resolve as already treated by the code.

After I reply with my decision per item, implement the accepted actions, resolve the corresponding
PR comments, address the patch coverage gaps below, and push all of these changes in a single
commit.

# Other Review Comments

## REVIEW-1
Location: src/denbust/news_items/daily_review.py:199
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969633127
Root author: copilot-pull-request-reviewer

Comment:
    The prompt includes the full pretty-printed `debug_log` JSON. Depending on run size this can easily exceed the model context limit or slow the workflow (indentation also increases payload size), causing Anthropic API failures. Consider truncating large sections (e.g., limit article lists), using a compact JSON encoding, and/or sending only the debug summary + selected excerpts needed for issue triage.

## REVIEW-2
Location: .github/workflows/news-items-daily-review.yml:66
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969633132
Root author: copilot-pull-request-reviewer

Comment:
    Optional secrets are mapped into env vars unconditionally. In GitHub Actions, an unset secret expands to an empty string, which will override the Python default model selection (`os.getenv('DENBUST_REVIEW_MODEL', ...)` will see ""). Consider omitting these env vars when unset, or update the Python code to treat empty strings as missing so the defaults apply.
    ~~~suggestion
            run: |
              if [ -n "${{ secrets.DENBUST_REVIEW_MODEL }}" ]; then
                export DENBUST_REVIEW_MODEL="${{ secrets.DENBUST_REVIEW_MODEL }}"
              fi
              if [ -n "${{ secrets.DENBUST_REVIEW_ISSUE_LABELS }}" ]; then
                export DENBUST_REVIEW_ISSUE_LABELS="${{ secrets.DENBUST_REVIEW_ISSUE_LABELS }}"
              fi
              python -m denbust.news_items.daily_review
    ~~~

# Patch coverage

Patch test coverage is 99.49%; please raise it to 100%. These are the uncovered code lines:
- src/denbust/news_items/daily_review.py: 285

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: commit pushed
Workflow run: 23381685799 attempt 1
Comment timestamp: 2026-03-21T14:29:33.187827+00:00
PR head commit: 31f5f17e4aa7d36d508f2ed3612f19a3d4815bcc

@github-actions
Copy link

pr-agent-context report:

This run includes a failing check on PR #29.

Diagnose and fix the failing checks below, then push all of these changes in a single commit.

# Failing Checks

## FAIL-1
Type: Commit status
Context: pre-commit.ci - pr
Status: failure
URL: https://results.pre-commit.ci/run/github/1159993403/1774116704.zAGMFp42RwOHidyU3kXldg

Summary:
    checks completed with failures

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: commit pushed
Workflow run: 23385631848 attempt 1
Comment timestamp: 2026-03-21T18:12:10.234084+00:00
PR head commit: b44500598650a6feecbe1c54956757ba4f9039c9

@github-actions
Copy link

pr-agent-context report:

No unresolved review comments, failing checks, or actionable patch coverage gaps were found on PR
#29. Treat this PR as all clear unless new signals appear.

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: commit pushed
Workflow run: 23385633800 attempt 1
Comment timestamp: 2026-03-21T18:15:13.700961+00:00
PR head commit: fb514b6833713a1fcf0834674b67e5da6956e596

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 4 comments.

@github-actions
Copy link

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

This run includes unresolved review comments on PR #29.

For each unresolved review comment, recommend one of: resolve as irrelevant, accept and implement
the recommended solution, open a separate issue and resolve as out-of-scope for this PR, accept and
implement a different solution, or resolve as already treated by the code.

After I reply with my decision per item, implement the accepted actions, resolve the corresponding
PR comments, and push all of these changes in a single commit.

# Other Review Comments

## REVIEW-1
Location: src/denbust/news_items/daily_review.py:199
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969917863
Root author: copilot-pull-request-reviewer

Comment:
    `run_snapshot` and `debug_summary` are dumped into the Anthropic prompt without any compaction, while only `debug_log` is compacted. Since `RunSnapshot` can include a potentially large `items` list, this can bloat the prompt, increase cost, and risk exceeding context limits. Consider applying `_compact_for_prompt` (and token-efficient JSON separators) to `run_snapshot`/`debug_summary` as well, or explicitly selecting only the fields needed for review.

## REVIEW-2
Location: src/denbust/news_items/daily_review.py:220
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969917866
Root author: copilot-pull-request-reviewer

Comment:
    The reviewer currently swallows empty/invalid Anthropic responses and returns `ReviewResult()` without emitting any diagnostics. In the workflow, this makes it hard to distinguish “no issues found” from “review failed / response was malformed”. Consider logging (or printing) a short reason when parsing fails (e.g., empty response, JSON decode failure), ideally without dumping the full prompt.

## REVIEW-3
Location: .github/workflows/news-items-daily-review.yml:37
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969917869
Root author: copilot-pull-request-reviewer

Comment:
    Because this workflow runs on `workflow_run`, `actions/checkout` will fetch the default ref by default, which can differ from the SHA that produced the artifacts being reviewed. To keep the review code in sync with the triggering `daily-state-run`, consider checking out `ref: ${{ github.event.workflow_run.head_sha }}` for the code repo (and possibly setting an explicit `fetch-depth`).
    ~~~suggestion
            uses: actions/checkout@v6
            with:
              # For workflow_run, keep code in sync with the triggering daily-state-run.
              # For workflow_dispatch, fall back to the SHA of the dispatch event.
              ref: ${{ github.event.workflow_run.head_sha || github.sha }}
              fetch-depth: 2
    ~~~

## REVIEW-4
Location: .github/workflows/news-items-daily-review.yml:24
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969917872
Root author: copilot-pull-request-reviewer

Comment:
    `DATASET_NAME` and `JOB_NAME` are defined in the workflow `env:` but aren’t referenced anywhere in this workflow (only `STATE_JOB_DIR` is used). Consider removing them to avoid configuration drift, or wiring them into `STATE_JOB_DIR` so there’s a single source of truth.
    ~~~suggestion
      STATE_JOB_DIR: state_repo/news_items/ingest
    ~~~

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: review comment posted
Workflow run: 23385719758 attempt 1
Comment timestamp: 2026-03-21T18:17:03.597568+00:00
PR head commit: fb514b6833713a1fcf0834674b67e5da6956e596

@github-actions
Copy link

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

This run includes unresolved review comments on PR #29.

For each unresolved review comment, recommend one of: resolve as irrelevant, accept and implement
the recommended solution, open a separate issue and resolve as out-of-scope for this PR, accept and
implement a different solution, or resolve as already treated by the code.

After I reply with my decision per item, implement the accepted actions, resolve the corresponding
PR comments, and push all of these changes in a single commit.

# Other Review Comments

## REVIEW-1
Location: src/denbust/news_items/daily_review.py:199
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969917863
Root author: copilot-pull-request-reviewer

Comment:
    `run_snapshot` and `debug_summary` are dumped into the Anthropic prompt without any compaction, while only `debug_log` is compacted. Since `RunSnapshot` can include a potentially large `items` list, this can bloat the prompt, increase cost, and risk exceeding context limits. Consider applying `_compact_for_prompt` (and token-efficient JSON separators) to `run_snapshot`/`debug_summary` as well, or explicitly selecting only the fields needed for review.

## REVIEW-2
Location: src/denbust/news_items/daily_review.py:220
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969917866
Root author: copilot-pull-request-reviewer

Comment:
    The reviewer currently swallows empty/invalid Anthropic responses and returns `ReviewResult()` without emitting any diagnostics. In the workflow, this makes it hard to distinguish “no issues found” from “review failed / response was malformed”. Consider logging (or printing) a short reason when parsing fails (e.g., empty response, JSON decode failure), ideally without dumping the full prompt.

## REVIEW-3
Location: .github/workflows/news-items-daily-review.yml:37
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969917869
Root author: copilot-pull-request-reviewer

Comment:
    Because this workflow runs on `workflow_run`, `actions/checkout` will fetch the default ref by default, which can differ from the SHA that produced the artifacts being reviewed. To keep the review code in sync with the triggering `daily-state-run`, consider checking out `ref: ${{ github.event.workflow_run.head_sha }}` for the code repo (and possibly setting an explicit `fetch-depth`).
    ~~~suggestion
            uses: actions/checkout@v6
            with:
              # For workflow_run, keep code in sync with the triggering daily-state-run.
              # For workflow_dispatch, fall back to the SHA of the dispatch event.
              ref: ${{ github.event.workflow_run.head_sha || github.sha }}
              fetch-depth: 2
    ~~~

## REVIEW-4
Location: .github/workflows/news-items-daily-review.yml:24
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969917872
Root author: copilot-pull-request-reviewer

Comment:
    `DATASET_NAME` and `JOB_NAME` are defined in the workflow `env:` but aren’t referenced anywhere in this workflow (only `STATE_JOB_DIR` is used). Consider removing them to avoid configuration drift, or wiring them into `STATE_JOB_DIR` so there’s a single source of truth.
    ~~~suggestion
      STATE_JOB_DIR: state_repo/news_items/ingest
    ~~~

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: check completed
Workflow run: 23385753723 attempt 1
Comment timestamp: 2026-03-21T18:18:59.132001+00:00
PR head commit: fb514b6833713a1fcf0834674b67e5da6956e596

@github-actions
Copy link

pr-agent-context report:

This run includes unresolved review comments and a failing check on PR #29.

For each unresolved review comment, recommend one of: resolve as irrelevant, accept and implement
the recommended solution, open a separate issue and resolve as out-of-scope for this PR, accept and
implement a different solution, or resolve as already treated by the code.

After I reply with my decision per item, implement the accepted actions, resolve the corresponding
PR comments, fix the failing checks below, and push all of these changes in a single commit.

# Other Review Comments

## REVIEW-1
Location: src/denbust/news_items/daily_review.py:205
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969917863
Root author: copilot-pull-request-reviewer

Comment:
    `run_snapshot` and `debug_summary` are dumped into the Anthropic prompt without any compaction, while only `debug_log` is compacted. Since `RunSnapshot` can include a potentially large `items` list, this can bloat the prompt, increase cost, and risk exceeding context limits. Consider applying `_compact_for_prompt` (and token-efficient JSON separators) to `run_snapshot`/`debug_summary` as well, or explicitly selecting only the fields needed for review.

## REVIEW-2
Location: src/denbust/news_items/daily_review.py:228
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969917866
Root author: copilot-pull-request-reviewer

Comment:
    The reviewer currently swallows empty/invalid Anthropic responses and returns `ReviewResult()` without emitting any diagnostics. In the workflow, this makes it hard to distinguish “no issues found” from “review failed / response was malformed”. Consider logging (or printing) a short reason when parsing fails (e.g., empty response, JSON decode failure), ideally without dumping the full prompt.

## REVIEW-3
Location: .github/workflows/news-items-daily-review.yml:35
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969917869
Root author: copilot-pull-request-reviewer

Comment:
    Because this workflow runs on `workflow_run`, `actions/checkout` will fetch the default ref by default, which can differ from the SHA that produced the artifacts being reviewed. To keep the review code in sync with the triggering `daily-state-run`, consider checking out `ref: ${{ github.event.workflow_run.head_sha }}` for the code repo (and possibly setting an explicit `fetch-depth`).
    ~~~suggestion
            uses: actions/checkout@v6
            with:
              # For workflow_run, keep code in sync with the triggering daily-state-run.
              # For workflow_dispatch, fall back to the SHA of the dispatch event.
              ref: ${{ github.event.workflow_run.head_sha || github.sha }}
              fetch-depth: 2
    ~~~

# Failing Checks

## FAIL-1
Type: GitHub Actions job
Workflow: ci-test
Job: lint
Run attempt: 1
Conclusion: failure
Current run: yes
URL: https://github.com/DataHackIL/tfht_enforce_idx/actions/runs/23385998782/job/68033044542
Failed steps: Run Ruff format check

Summary:
    lint

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: commit pushed
Workflow run: 23385998782 attempt 1
Comment timestamp: 2026-03-21T18:33:52.584629+00:00
PR head commit: 3accd2993fbd7750504afbaea244355ddb22ce82

@github-actions
Copy link

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

This run includes unresolved review comments on PR #29.

For each unresolved review comment, recommend one of: resolve as irrelevant, accept and implement
the recommended solution, open a separate issue and resolve as out-of-scope for this PR, accept and
implement a different solution, or resolve as already treated by the code.

After I reply with my decision per item, implement the accepted actions, resolve the corresponding
PR comments, and push all of these changes in a single commit.

# Other Review Comments

## REVIEW-1
Location: src/denbust/news_items/daily_review.py:205
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969917863
Root author: copilot-pull-request-reviewer

Comment:
    `run_snapshot` and `debug_summary` are dumped into the Anthropic prompt without any compaction, while only `debug_log` is compacted. Since `RunSnapshot` can include a potentially large `items` list, this can bloat the prompt, increase cost, and risk exceeding context limits. Consider applying `_compact_for_prompt` (and token-efficient JSON separators) to `run_snapshot`/`debug_summary` as well, or explicitly selecting only the fields needed for review.

## REVIEW-2
Location: src/denbust/news_items/daily_review.py:228
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969917866
Root author: copilot-pull-request-reviewer

Comment:
    The reviewer currently swallows empty/invalid Anthropic responses and returns `ReviewResult()` without emitting any diagnostics. In the workflow, this makes it hard to distinguish “no issues found” from “review failed / response was malformed”. Consider logging (or printing) a short reason when parsing fails (e.g., empty response, JSON decode failure), ideally without dumping the full prompt.

## REVIEW-3
Location: .github/workflows/news-items-daily-review.yml:35
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969917869
Root author: copilot-pull-request-reviewer

Comment:
    Because this workflow runs on `workflow_run`, `actions/checkout` will fetch the default ref by default, which can differ from the SHA that produced the artifacts being reviewed. To keep the review code in sync with the triggering `daily-state-run`, consider checking out `ref: ${{ github.event.workflow_run.head_sha }}` for the code repo (and possibly setting an explicit `fetch-depth`).
    ~~~suggestion
            uses: actions/checkout@v6
            with:
              # For workflow_run, keep code in sync with the triggering daily-state-run.
              # For workflow_dispatch, fall back to the SHA of the dispatch event.
              ref: ${{ github.event.workflow_run.head_sha || github.sha }}
              fetch-depth: 2
    ~~~

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: status updated
Workflow run: 23386050389 attempt 1
Comment timestamp: 2026-03-21T18:35:21.531601+00:00
PR head commit: 039f0062c3fadc699214853649159a045647f9bb

@github-actions
Copy link

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

This run includes unresolved review comments on PR #29.

For each unresolved review comment, recommend one of: resolve as irrelevant, accept and implement
the recommended solution, open a separate issue and resolve as out-of-scope for this PR, accept and
implement a different solution, or resolve as already treated by the code.

After I reply with my decision per item, implement the accepted actions, resolve the corresponding
PR comments, and push all of these changes in a single commit.

# Other Review Comments

## REVIEW-1
Location: src/denbust/news_items/daily_review.py:205
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969917863
Root author: copilot-pull-request-reviewer

Comment:
    `run_snapshot` and `debug_summary` are dumped into the Anthropic prompt without any compaction, while only `debug_log` is compacted. Since `RunSnapshot` can include a potentially large `items` list, this can bloat the prompt, increase cost, and risk exceeding context limits. Consider applying `_compact_for_prompt` (and token-efficient JSON separators) to `run_snapshot`/`debug_summary` as well, or explicitly selecting only the fields needed for review.

## REVIEW-2
Location: src/denbust/news_items/daily_review.py:228
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969917866
Root author: copilot-pull-request-reviewer

Comment:
    The reviewer currently swallows empty/invalid Anthropic responses and returns `ReviewResult()` without emitting any diagnostics. In the workflow, this makes it hard to distinguish “no issues found” from “review failed / response was malformed”. Consider logging (or printing) a short reason when parsing fails (e.g., empty response, JSON decode failure), ideally without dumping the full prompt.

## REVIEW-3
Location: .github/workflows/news-items-daily-review.yml:35
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969917869
Root author: copilot-pull-request-reviewer

Comment:
    Because this workflow runs on `workflow_run`, `actions/checkout` will fetch the default ref by default, which can differ from the SHA that produced the artifacts being reviewed. To keep the review code in sync with the triggering `daily-state-run`, consider checking out `ref: ${{ github.event.workflow_run.head_sha }}` for the code repo (and possibly setting an explicit `fetch-depth`).
    ~~~suggestion
            uses: actions/checkout@v6
            with:
              # For workflow_run, keep code in sync with the triggering daily-state-run.
              # For workflow_dispatch, fall back to the SHA of the dispatch event.
              ref: ${{ github.event.workflow_run.head_sha || github.sha }}
              fetch-depth: 2
    ~~~

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: status updated
Workflow run: 23386078414 attempt 1
Comment timestamp: 2026-03-21T18:36:50.812586+00:00
PR head commit: 039f0062c3fadc699214853649159a045647f9bb

@github-actions
Copy link

pr-agent-context report:

This run includes unresolved review comments on PR #29.

For each unresolved review comment, recommend one of: resolve as irrelevant, accept and implement
the recommended solution, open a separate issue and resolve as out-of-scope for this PR, accept and
implement a different solution, or resolve as already treated by the code.

After I reply with my decision per item, implement the accepted actions, resolve the corresponding
PR comments, and push all of these changes in a single commit.

# Other Review Comments

## REVIEW-1
Location: src/denbust/news_items/daily_review.py:205
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969917863
Root author: copilot-pull-request-reviewer

Comment:
    `run_snapshot` and `debug_summary` are dumped into the Anthropic prompt without any compaction, while only `debug_log` is compacted. Since `RunSnapshot` can include a potentially large `items` list, this can bloat the prompt, increase cost, and risk exceeding context limits. Consider applying `_compact_for_prompt` (and token-efficient JSON separators) to `run_snapshot`/`debug_summary` as well, or explicitly selecting only the fields needed for review.

## REVIEW-2
Location: src/denbust/news_items/daily_review.py:228
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969917866
Root author: copilot-pull-request-reviewer

Comment:
    The reviewer currently swallows empty/invalid Anthropic responses and returns `ReviewResult()` without emitting any diagnostics. In the workflow, this makes it hard to distinguish “no issues found” from “review failed / response was malformed”. Consider logging (or printing) a short reason when parsing fails (e.g., empty response, JSON decode failure), ideally without dumping the full prompt.

## REVIEW-3
Location: .github/workflows/news-items-daily-review.yml:35
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/29#discussion_r2969917869
Root author: copilot-pull-request-reviewer

Comment:
    Because this workflow runs on `workflow_run`, `actions/checkout` will fetch the default ref by default, which can differ from the SHA that produced the artifacts being reviewed. To keep the review code in sync with the triggering `daily-state-run`, consider checking out `ref: ${{ github.event.workflow_run.head_sha }}` for the code repo (and possibly setting an explicit `fetch-depth`).
    ~~~suggestion
            uses: actions/checkout@v6
            with:
              # For workflow_run, keep code in sync with the triggering daily-state-run.
              # For workflow_dispatch, fall back to the SHA of the dispatch event.
              ref: ${{ github.event.workflow_run.head_sha || github.sha }}
              fetch-depth: 2
    ~~~

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: commit pushed
Workflow run: 23386053218 attempt 1
Comment timestamp: 2026-03-21T18:37:26.538056+00:00
PR head commit: 039f0062c3fadc699214853649159a045647f9bb

@github-actions
Copy link

pr-agent-context report:

No unresolved review comments, failing checks, or actionable patch coverage gaps were found on PR
#29. Treat this PR as all clear unless new signals appear.

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: commit pushed
Workflow run: 23387178850 attempt 1
Comment timestamp: 2026-03-21T19:40:34.526580+00:00
PR head commit: bf91f3912c7789f85af47d47b29b87d2ec3c8326

@shaypal5 shaypal5 merged commit d35059e into main Mar 21, 2026
9 checks passed
@shaypal5 shaypal5 deleted the codex/daily-ai-review-workflow branch March 21, 2026 19:42
@github-actions
Copy link

pr-agent-context report:

🚨 `pr-agent-context` failed while preparing PR context.

PR: #29
Error: CalledProcessError: Command '['git', '-C', '/home/runner/work/tfht_enforce_idx/tfht_enforce_idx/caller-repo', 'diff', '--unified=0', 'a26614b2b56e4e64c0dd3a499851cc6a36f80a54...bf91f3912c7789f85af47d47b29b87d2ec3c8326']' returned non-zero exit status 128.
Run: https://github.com/DataHackIL/tfht_enforce_idx/actions/runs/23387253870

The workflow continued gracefully so this failure does not block CI.
Check the job logs for the full traceback.

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: status updated
Workflow run: 23387253870 attempt 1
Comment timestamp: 2026-03-21T19:43:15.035510+00:00
PR head commit: bf91f3912c7789f85af47d47b29b87d2ec3c8326

@github-actions
Copy link

pr-agent-context report:

🚨 `pr-agent-context` failed while preparing PR context.

PR: #29
Error: CalledProcessError: Command '['git', '-C', '/home/runner/work/tfht_enforce_idx/tfht_enforce_idx/caller-repo', 'diff', '--unified=0', 'a26614b2b56e4e64c0dd3a499851cc6a36f80a54...bf91f3912c7789f85af47d47b29b87d2ec3c8326']' returned non-zero exit status 128.
Run: https://github.com/DataHackIL/tfht_enforce_idx/actions/runs/23387254533

The workflow continued gracefully so this failure does not block CI.
Check the job logs for the full traceback.

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: status updated
Workflow run: 23387254533 attempt 1
Comment timestamp: 2026-03-21T19:43:17.515670+00:00
PR head commit: bf91f3912c7789f85af47d47b29b87d2ec3c8326

@github-actions
Copy link

pr-agent-context report:

🚨 `pr-agent-context` failed while preparing PR context.

PR: #29
Error: CalledProcessError: Command '['git', '-C', '/home/runner/work/tfht_enforce_idx/tfht_enforce_idx/caller-repo', 'diff', '--unified=0', 'a26614b2b56e4e64c0dd3a499851cc6a36f80a54...bf91f3912c7789f85af47d47b29b87d2ec3c8326']' returned non-zero exit status 128.
Run: https://github.com/DataHackIL/tfht_enforce_idx/actions/runs/23387286782

The workflow continued gracefully so this failure does not block CI.
Check the job logs for the full traceback.

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: status updated
Workflow run: 23387286782 attempt 1
Comment timestamp: 2026-03-21T19:45:12.571190+00:00
PR head commit: bf91f3912c7789f85af47d47b29b87d2ec3c8326

@github-actions
Copy link

pr-agent-context report:

🚨 `pr-agent-context` failed while preparing PR context.

PR: #29
Error: CalledProcessError: Command '['git', '-C', '/home/runner/work/tfht_enforce_idx/tfht_enforce_idx/caller-repo', 'diff', '--unified=0', 'a26614b2b56e4e64c0dd3a499851cc6a36f80a54...bf91f3912c7789f85af47d47b29b87d2ec3c8326']' returned non-zero exit status 128.
Run: https://github.com/DataHackIL/tfht_enforce_idx/actions/runs/23388926636

The workflow continued gracefully so this failure does not block CI.
Check the job logs for the full traceback.

Run metadata:

Tool ref: v4
Tool version: 4.0.11
Trigger: status updated
Workflow run: 23388926636 attempt 1
Comment timestamp: 2026-03-21T21:14:27.552039+00:00
PR head commit: bf91f3912c7789f85af47d47b29b87d2ec3c8326

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AI & Agents ci enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants