Skip to content

Fix Mako search scraping - #9

Merged
shaypal5 merged 22 commits into
mainfrom
codex/fix-mako-search
Mar 14, 2026
Merged

shaypal5 merged 22 commits into
mainfrom
codex/fix-mako-search

Conversation

@shaypal5

Copy link
Copy Markdown
Member

Summary

  • switch the Mako scraper to the live /Search endpoint instead of the dead AJAX search endpoint
  • update the Mako parser for the current search-result card structure and 2-digit date format
  • refresh the Mako search fixture and integration test coverage
  • ignore local denbust config, data, env, and tool-version files in .gitignore

Validation

  • uv run pytest -q tests/integration/test_scrapers.py -k Mako

Notes

  • left unrelated local worktree files out of the functional scraper commit and only added the requested .gitignore entries

@shaypal5 shaypal5 self-assigned this Mar 13, 2026
@shaypal5
shaypal5 requested a review from Copilot March 13, 2026 14:14
@shaypal5 shaypal5 added the enhancement New feature or request label Mar 13, 2026
@github-actions

Copy link
Copy Markdown

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

Below are the details of possibly unresolved review comments and/or (possibly) failing checks on PR
#9.

For each unresolved comment (if any), 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 each failing check below (if any), and push all of these changes in a single
commit.

# Codecov/patch

Codecov shows patch test coverage is 0%; please raise it to 100%. These are the uncovered code
lines:
- src/denbust/sources/mako.py: 24, 102, 108, 109, 110, 159, 295, 296, 298, 300
- tests/integration/test_scrapers.py: 32

Run metadata:

Tool ref: v4
Tool version: 4.0.3
Workflow run: 23054875866 attempt 1
Comment timestamp: 2026-03-13T14:14:17.166723+00:00
PR head commit: 41e62032974885a3ce6a242f5fccef2e8b635d57

@codecov

codecov Bot commented Mar 13, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 87.69231% with 24 lines in your changes missing coverage. Please review.
✅ Project coverage is 71.80%. Comparing base (495c869) to head (7a59c09).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
src/denbust/sources/mako.py 87.69% 24 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main       #9      +/-   ##
==========================================
+ Coverage   67.91%   71.80%   +3.89%     
==========================================
  Files          14       13       -1     
  Lines         938     1096     +158     
==========================================
+ Hits          637      787     +150     
- Misses        301      309       +8     
Files with missing lines Coverage Δ
src/denbust/sources/mako.py 80.19% <87.69%> (+15.25%) ⬆️

... and 1 file with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-actions

github-actions Bot commented Mar 13, 2026 •

Copy link
Copy Markdown

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

Below are the details of possibly unresolved review comments and/or (possibly) failing checks on PR
#9.

For each unresolved comment (if any), 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 each failing check below (if any), and push all of these changes in a single
commit.

# Other Review Comments

## REVIEW-1
Location: tests/integration/test_scrapers.py:46
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/9#discussion_r2931488289
Root author: copilot-pull-request-reviewer

Comment:
    The new assertion `any(article.date.year == 2026 ...)` can pass even if date parsing fails, because `_parse_article_item` falls back to `datetime.now(UTC)` when it can’t parse a date (and the current year is 2026). To actually validate the new 2-digit date parsing, assert a specific parsed date/day from the fixture (e.g., one article has 2026-03-06 UTC) rather than only the year.

## REVIEW-2
Location: src/denbust/sources/mako.py:24
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/9#discussion_r2931488327
Root author: copilot-pull-request-reviewer

Comment:
    `MAKO_SEARCH_CHANNEL_ID` is a hard-coded opaque identifier that’s likely to change when Mako reconfigures their search. Please add an in-code note explaining where this value comes from and consider a more resilient strategy (e.g., making it configurable or retrying the request without these channelId/vgnextoid params if the search page stops returning results).

# Codecov/patch

Codecov shows patch test coverage is 0%; please raise it to 100%. These are the uncovered code
lines:
- src/denbust/sources/mako.py: 24, 102, 108, 109, 110, 159, 295, 296, 298, 300
- tests/integration/test_scrapers.py: 32, 78, 81, 82, 83

Run metadata:

Tool ref: v4
Tool version: 4.0.3
Workflow run: 23055173076 attempt 1
Comment timestamp: 2026-03-13T14:22:03.860098+00:00
PR head commit: 03ba97d487aa6908c33f1b4f19f5eef91fd0b56f

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Updates the Mako scraper to work with Mako’s current search experience by switching to the live /Search endpoint, adapting parsing to the new result-card markup, and refreshing integration fixtures/tests accordingly.

Changes:

  • Switch Mako keyword search from the old AJAX endpoint to https://www.mako.co.il/Search with updated query parameters.
  • Update HTML parsing to handle li.articleins cards and support 2-digit date formats in search metadata.
  • Refresh Mako search HTML fixture and adjust integration tests; extend .gitignore for local-only files.

Reviewed changes

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

File Description
src/denbust/sources/mako.py Updates search endpoint/params and parsing logic for new Mako search markup + date formats.
tests/integration/test_scrapers.py Updates mocked search URL and adds an assertion intended to validate new date parsing.
tests/fixtures/html/mako_search.html Refreshes fixture to match current Mako search result HTML structure and 2-digit date display.
.gitignore Ignores local config/data/env/tool-version files as described in PR summary.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

Comment thread tests/integration/test_scrapers.py Outdated
Comment thread src/denbust/sources/mako.py
@github-actions

github-actions Bot commented Mar 13, 2026 •

Copy link
Copy Markdown

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

Below are the details of possibly unresolved review comments and/or (possibly) failing checks on PR
#9.

For each unresolved comment (if any), 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 each failing check below (if any), and push all of these changes in a single
commit.

# Other Review Comments

## REVIEW-1
Location: tests/integration/test_scrapers.py:46
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/9#discussion_r2931488289
Root author: copilot-pull-request-reviewer

Comment:
    The new assertion `any(article.date.year == 2026 ...)` can pass even if date parsing fails, because `_parse_article_item` falls back to `datetime.now(UTC)` when it can’t parse a date (and the current year is 2026). To actually validate the new 2-digit date parsing, assert a specific parsed date/day from the fixture (e.g., one article has 2026-03-06 UTC) rather than only the year.

## REVIEW-2
Location: src/denbust/sources/mako.py:24
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/9#discussion_r2931488327
Root author: copilot-pull-request-reviewer

Comment:
    `MAKO_SEARCH_CHANNEL_ID` is a hard-coded opaque identifier that’s likely to change when Mako reconfigures their search. Please add an in-code note explaining where this value comes from and consider a more resilient strategy (e.g., making it configurable or retrying the request without these channelId/vgnextoid params if the search page stops returning results).

# Codecov/patch

Codecov shows patch test coverage is 0%; please raise it to 100%. These are the uncovered code
lines:
- src/denbust/sources/mako.py: 24, 102, 108, 109, 110, 159, 295, 296, 298, 300
- tests/integration/test_scrapers.py: 32, 78, 81, 82, 83

Run metadata:

Tool ref: v4
Tool version: 4.0.3
Workflow run: 23055459073 attempt 1
Comment timestamp: 2026-03-13T14:28:54.496521+00:00
PR head commit: f987ab1e718888a1112641c67cd67521dc541109

@github-actions

github-actions Bot commented Mar 13, 2026 •

Copy link
Copy Markdown

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

Below are the details of possibly unresolved review comments and/or (possibly) failing checks on PR
#9.

For each unresolved comment (if any), 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 each failing check below (if any), and push all of these changes in a single
commit.

# Other Review Comments

## REVIEW-1
Location: tests/integration/test_scrapers.py:46
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/9#discussion_r2931488289
Root author: copilot-pull-request-reviewer

Comment:
    The new assertion `any(article.date.year == 2026 ...)` can pass even if date parsing fails, because `_parse_article_item` falls back to `datetime.now(UTC)` when it can’t parse a date (and the current year is 2026). To actually validate the new 2-digit date parsing, assert a specific parsed date/day from the fixture (e.g., one article has 2026-03-06 UTC) rather than only the year.

## REVIEW-2
Location: src/denbust/sources/mako.py:24
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/9#discussion_r2931488327
Root author: copilot-pull-request-reviewer

Comment:
    `MAKO_SEARCH_CHANNEL_ID` is a hard-coded opaque identifier that’s likely to change when Mako reconfigures their search. Please add an in-code note explaining where this value comes from and consider a more resilient strategy (e.g., making it configurable or retrying the request without these channelId/vgnextoid params if the search page stops returning results).

# Codecov/patch

Codecov shows patch test coverage is 0%; please raise it to 100%. These are the uncovered code
lines:
- src/denbust/sources/mako.py: 24, 102, 108, 109, 110, 159, 295, 296, 298, 300
- tests/integration/test_scrapers.py: 32, 78, 81, 82, 83

Run metadata:

Tool ref: v4
Tool version: 4.0.3
Workflow run: 23055840860 attempt 1
Comment timestamp: 2026-03-13T14:38:08.864173+00:00
PR head commit: 3f20a966bb2d56cd87cf9c8012c01a4f42b83c38

@github-actions

github-actions Bot commented Mar 13, 2026 •

Copy link
Copy Markdown

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

Below are the details of possibly unresolved review comments and/or (possibly) failing checks on PR
#9.

For each unresolved comment (if any), 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 each failing check below (if any), and push all of these changes in a single
commit.

# Other Review Comments

## REVIEW-1
Location: tests/integration/test_scrapers.py:46
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/9#discussion_r2931488289
Root author: copilot-pull-request-reviewer

Comment:
    The new assertion `any(article.date.year == 2026 ...)` can pass even if date parsing fails, because `_parse_article_item` falls back to `datetime.now(UTC)` when it can’t parse a date (and the current year is 2026). To actually validate the new 2-digit date parsing, assert a specific parsed date/day from the fixture (e.g., one article has 2026-03-06 UTC) rather than only the year.

## REVIEW-2
Location: src/denbust/sources/mako.py:24
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/9#discussion_r2931488327
Root author: copilot-pull-request-reviewer

Comment:
    `MAKO_SEARCH_CHANNEL_ID` is a hard-coded opaque identifier that’s likely to change when Mako reconfigures their search. Please add an in-code note explaining where this value comes from and consider a more resilient strategy (e.g., making it configurable or retrying the request without these channelId/vgnextoid params if the search page stops returning results).

# Codecov/patch

Codecov shows patch test coverage is 0%; please raise it to 100%. These are the uncovered code
lines:
- src/denbust/sources/mako.py: 24, 102, 108, 109, 110, 159, 295, 296, 298, 300
- tests/integration/test_scrapers.py: 32, 78, 81, 82, 83

Run metadata:

Tool ref: v4
Tool version: 4.0.3
Workflow run: 23055943858 attempt 1
Comment timestamp: 2026-03-13T14:40:38.176507+00:00
PR head commit: 05e24ad8cd0430fe2aeda89546b50b3e3e88858b

@github-actions

github-actions Bot commented Mar 13, 2026 •

Copy link
Copy Markdown

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

Below are the details of possibly unresolved review comments and/or (possibly) failing checks on PR
#9.

For each unresolved comment (if any), 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 each failing check below (if any), and push all of these changes in a single
commit.

# Other Review Comments

## REVIEW-1
Location: tests/integration/test_scrapers.py:46
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/9#discussion_r2931488289
Root author: copilot-pull-request-reviewer

Comment:
    The new assertion `any(article.date.year == 2026 ...)` can pass even if date parsing fails, because `_parse_article_item` falls back to `datetime.now(UTC)` when it can’t parse a date (and the current year is 2026). To actually validate the new 2-digit date parsing, assert a specific parsed date/day from the fixture (e.g., one article has 2026-03-06 UTC) rather than only the year.

## REVIEW-2
Location: src/denbust/sources/mako.py:24
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/9#discussion_r2931488327
Root author: copilot-pull-request-reviewer

Comment:
    `MAKO_SEARCH_CHANNEL_ID` is a hard-coded opaque identifier that’s likely to change when Mako reconfigures their search. Please add an in-code note explaining where this value comes from and consider a more resilient strategy (e.g., making it configurable or retrying the request without these channelId/vgnextoid params if the search page stops returning results).

# Failing Workflows

## FAIL-1
Type: GitHub Actions job
Workflow: codecov-yaml-validate
Job: Validate Codecov YAML
Run number: 1
Run attempt: 1
Conclusion: failure
URL: https://github.com/DataHackIL/tfht_enforce_idx/actions/runs/23056183216/job/66970155350
Failed steps: Validate Codecov YAML

Summary:
    Fix Mako search scraping

# Codecov/patch

Codecov shows patch test coverage is 0%; please raise it to 100%. These are the uncovered code
lines:
- src/denbust/sources/mako.py: 24, 102, 108, 109, 110, 159, 295, 296, 298, 300
- tests/integration/test_scrapers.py: 32, 78, 81, 82, 83

Run metadata:

Tool ref: v4
Tool version: 4.0.3
Workflow run: 23056185440 attempt 1
Comment timestamp: 2026-03-13T14:46:39.256694+00:00
PR head commit: 02f1a6aeb114a909c5bb063211beb9f0e4c37311

@github-actions

github-actions Bot commented Mar 13, 2026 •

Copy link
Copy Markdown

pr-agent-context report:

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

PR: #9
Error: GitHubApiError: GitHub API error 401: Server failed to authenticate the request. Please refer to the information in the www-authenticate header.
Run: https://github.com/DataHackIL/tfht_enforce_idx/actions/runs/23056318810

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.3
Workflow run: 23056318810 attempt 1
Comment timestamp: 2026-03-13T14:50:27.211059+00:00
PR head commit: 02f1a6aeb114a909c5bb063211beb9f0e4c37311

@github-actions

github-actions Bot commented Mar 13, 2026 •

Copy link
Copy Markdown

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

Below are the details of possibly unresolved review comments and/or (possibly) failing checks on PR
#9.

For each unresolved comment (if any), 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 each failing check below (if any), and push all of these changes in a single
commit.

# Other Review Comments

## REVIEW-1
Location: tests/integration/test_scrapers.py:46
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/9#discussion_r2931488289
Root author: copilot-pull-request-reviewer

Comment:
    The new assertion `any(article.date.year == 2026 ...)` can pass even if date parsing fails, because `_parse_article_item` falls back to `datetime.now(UTC)` when it can’t parse a date (and the current year is 2026). To actually validate the new 2-digit date parsing, assert a specific parsed date/day from the fixture (e.g., one article has 2026-03-06 UTC) rather than only the year.

## REVIEW-2
Location: src/denbust/sources/mako.py:24
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/9#discussion_r2931488327
Root author: copilot-pull-request-reviewer

Comment:
    `MAKO_SEARCH_CHANNEL_ID` is a hard-coded opaque identifier that’s likely to change when Mako reconfigures their search. Please add an in-code note explaining where this value comes from and consider a more resilient strategy (e.g., making it configurable or retrying the request without these channelId/vgnextoid params if the search page stops returning results).

# Codecov/patch

Codecov shows patch test coverage is 0%; please raise it to 100%. These are the uncovered code
lines:
- src/denbust/sources/mako.py: 24, 102, 108, 109, 110, 159, 295, 296, 298, 300
- tests/integration/test_scrapers.py: 32, 78, 81, 82, 83

Run metadata:

Tool ref: v4
Tool version: 4.0.3
Workflow run: 23086081320 attempt 1
Comment timestamp: 2026-03-14T10:24:38.379903+00:00
PR head commit: 91a32cf0c0ca6702dad56f45f3e8d524fe241b34

@github-actions

github-actions Bot commented Mar 14, 2026 •

Copy link
Copy Markdown

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

Below are the details of possibly unresolved review comments and/or (possibly) failing checks on PR
#9.

For each unresolved comment (if any), 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 each failing check below (if any), and push all of these changes in a single
commit.

# Codecov/patch

Codecov shows patch test coverage is 0%; please raise it to 100%. These are the uncovered code
lines:
- src/denbust/sources/mako.py: 24, 108, 109, 110, 111, 112, 129, 130, 132, 133, 134, 178, 314, 316, 319, 321
- tests/integration/test_scrapers.py: 3, 81, 82, 83, 86, 89, 93, 94, 97, 99, 100, 101, 103, 104

Run metadata:

Tool ref: v4
Tool version: 4.0.3
Workflow run: 23086527859 attempt 1
Comment timestamp: 2026-03-14T10:54:58.341269+00:00
PR head commit: e26f5cb1d287e88494607d7ec1b9b8ac4c28cd03

@github-actions

github-actions Bot commented Mar 14, 2026 •

Copy link
Copy Markdown

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

Below are the details of possibly unresolved review comments and/or (possibly) failing checks on PR
#9.

For each unresolved comment (if any), 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 each failing check below (if any), and push all of these changes in a single
commit.

# Codecov/patch

Codecov shows patch test coverage is 0%; please raise it to 100%. These are the uncovered code
lines:
- src/denbust/sources/mako.py: 6, 9, 24, 27, 30, 32, 33, 35, 36, 38, 40, 50, 52, 53, 55, 81, 85, 87, 97, 98, 101, 102, 129, 132, 133, 134, 135, 136, 137, 138, 140, 150, 151, 154, 156, 157, 159, 161, 174, 175, 178, 179, 185, 196, 197, 198, 199, 202, 203, 204, 205, 208, 212, 213, 215, 216, 219, 220, 223, 224, 225, 226, 229, 237, 247, 248, 250, 251, 252, 253, 254, 255, 258, 259, 260, 261, 264, 265, 266, 267, 269, 271, 290, 291
- tests/integration/test_scrapers.py: 3, 32, 45, 48, 50, 51, 53, 57, 60, 67, 69, 74, 75, 78, 81, 82, 83, 97, 99, 100, 101, 103, 104, 106, 107, 110, 113, 116, 117, 118, 120, 122, 124, 126, 127, 132, 135, 136, 137, 139, 140, 141, 143, 145, 147, 149, 152

Run metadata:

Tool ref: v4
Tool version: 4.0.3
Workflow run: 23086811309 attempt 1
Comment timestamp: 2026-03-14T11:13:24.854334+00:00
PR head commit: a97346b2d47d06192a411d8a9a0b459851cb14db

@github-actions

github-actions Bot commented Mar 14, 2026 •

Copy link
Copy Markdown

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

Below are the details of possibly unresolved review comments and/or (possibly) failing checks on PR
#9.

For each unresolved comment (if any), 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 each failing check below (if any), and push all of these changes in a single
commit.

# Codecov/patch

Codecov shows patch test coverage is 0%; please raise it to 100%. These are the uncovered code
lines:
- src/denbust/sources/mako.py: 6, 9, 24, 27, 30, 32, 33, 35, 36, 38, 40, 50, 52, 53, 55, 81, 85, 87, 97, 98, 101, 102, 129, 132, 133, 134, 135, 136, 137, 138, 140, 150, 151, 154, 156, 157, 159, 161, 174, 175, 178, 179, 185, 196, 197, 198, 199, 202, 203, 204, 205, 208, 212, 213, 215, 216, 219, 220, 223, 224, 225, 226, 229, 237, 247, 248, 250, 251, 252, 253, 254, 255, 258, 259, 260, 261, 264, 265, 266, 267, 269, 271, 290, 291
- tests/integration/test_scrapers.py: 3, 32, 45, 48, 50, 51, 53, 57, 60, 67, 69, 74, 75, 78, 81, 82, 83, 97, 99, 100, 101, 103, 104, 106, 107, 110, 113, 116, 117, 118, 120, 122, 124, 126, 127, 132, 135, 136, 137, 139, 140, 141, 143, 145, 147, 149, 152

Run metadata:

Tool ref: v4
Tool version: 4.0.3
Workflow run: 23086813501 attempt 1
Comment timestamp: 2026-03-14T11:13:31.662472+00:00
PR head commit: a97346b2d47d06192a411d8a9a0b459851cb14db

@github-actions

Copy link
Copy Markdown

pr-agent-context report:

Below are the details of possibly unresolved review comments and/or (possibly) failing checks on PR
#9.

For each unresolved comment (if any), 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 each failing check below (if any), and push all of these changes in a single
commit.

# Codecov/patch

Codecov shows patch test coverage is 0%; please raise it to 100%. These are the uncovered code
lines:
- src/denbust/sources/mako.py: 6, 8, 9, 24, 27, 30, 31, 36, 42, 43, 44, 45, 46, 49, 50, 53, 54, 55, 56, 81, 85, 87, 88, 92, 96, 100, 101, 102, 104, 105, 115, 118, 120, 121, 122, 123, 128, 129, 131, 132, 133, 138, 139, 140, 141, 146, 153, 156, 158, 159, 161, 163, 167, 168, 169, 170, 172, 178, 179, 185, 186, 188, 192, 193, 194, 201, 203, 210, 218, 219, 220, 221, 226, 229, 230, 231, 236, 237, 238, 243, 245, 247, 248, 250, 254, 260, 262, 264, 270, 271, 272, 274, 291, 345, 415, 416, 417, 418, 419, 420, 421

Run metadata:

Tool ref: v4
Tool version: 4.0.3
Workflow run: 23086812645 attempt 1
Comment timestamp: 2026-03-14T11:15:44.045875+00:00
PR head commit: a97346b2d47d06192a411d8a9a0b459851cb14db

@github-actions

github-actions Bot commented Mar 14, 2026 •

Copy link
Copy Markdown

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

Below are the details of possibly unresolved review comments and/or (possibly) failing checks on PR
#9.

For each unresolved comment (if any), 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 each failing check below (if any), and push all of these changes in a single
commit.

# Codecov/patch

Codecov shows patch test coverage is 0%; please raise it to 100%. These are the uncovered code
lines:
- src/denbust/sources/mako.py: 3, 4, 10, 11, 19, 30, 32, 35, 36, 38, 40, 50, 52, 53, 55, 60, 63, 64, 65, 66, 69, 70, 101, 102, 110, 111, 112, 114, 116, 129, 132, 133, 134, 135, 136, 137, 138, 140, 150, 151, 154, 155, 156, 157, 159, 161, 174, 175, 178, 179, 180, 181, 183, 185, 196, 198, 199, 200, 202, 203, 204, 205, 208, 209, 212, 213, 215, 216, 219, 220, 224, 225, 226, 227, 229, 237, 247, 248, 250, 251, 252, 253, 254, 255, 258, 259, 260, 261, 264, 265, 266, 267, 269, 271, 281, 282, 283, 284, 285, 286, 287, 323
- tests/integration/test_scrapers.py: 3, 32, 45, 48, 50, 51, 53, 57, 60, 67, 69, 74, 75, 78, 81, 82, 83, 97, 99, 100, 101, 103, 104, 106, 107, 110, 113, 116, 117, 118, 120, 122, 124, 126, 127, 132, 135, 136, 137, 139, 140, 141, 143, 145, 147, 149, 152

Run metadata:

Tool ref: v4
Tool version: 4.0.3
Workflow run: 23086992927 attempt 1
Comment timestamp: 2026-03-14T11:25:35.245423+00:00
PR head commit: 5951ce5fa52a13e66d603879419f67ee8c18d317

@github-actions

github-actions Bot commented Mar 14, 2026 •

Copy link
Copy Markdown

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

Below are the details of possibly unresolved review comments and/or (possibly) failing checks on PR
#9.

For each unresolved comment (if any), 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 each failing check below (if any), and push all of these changes in a single
commit.

# Codecov/patch

Codecov shows patch test coverage is 0%; please raise it to 100%. These are the uncovered code
lines:
- src/denbust/sources/mako.py: 3, 4, 10, 11, 19, 30, 32, 35, 36, 38, 40, 50, 52, 53, 55, 60, 63, 64, 65, 66, 69, 70, 101, 102, 110, 111, 112, 114, 116, 129, 132, 133, 134, 135, 136, 137, 138, 140, 150, 151, 154, 155, 156, 157, 159, 161, 174, 175, 178, 179, 180, 181, 183, 185, 196, 198, 199, 200, 202, 203, 204, 205, 208, 209, 212, 213, 215, 216, 219, 220, 224, 225, 226, 227, 229, 237, 247, 248, 250, 251, 252, 253, 254, 255, 258, 259, 260, 261, 264, 265, 266, 267, 269, 271, 281, 282, 283, 284, 285, 286, 287, 323
- tests/integration/test_scrapers.py: 3, 32, 45, 48, 50, 51, 53, 57, 60, 67, 69, 74, 75, 78, 81, 82, 83, 97, 99, 100, 101, 103, 104, 106, 107, 110, 113, 116, 117, 118, 120, 122, 124, 126, 127, 132, 135, 136, 137, 139, 140, 141, 143, 145, 147, 149, 152

Run metadata:

Tool ref: v4
Tool version: 4.0.4
Workflow run: 23087078730 attempt 1
Comment timestamp: 2026-03-14T11:31:22.050272+00:00
PR head commit: 5d8d7b041b39e1444ee16d0af99460d274935798

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Updates the Mako scraper to use the live /Search page (now requiring a browser-rendered fetch) and refreshes parsing/tests/CI tooling to match the current Mako markup and reporting needs.

Changes:

  • Replace Mako’s old AJAX search with Playwright-driven navigation to /Search, including challenge/ready-state handling and a channel-id fallback retry.
  • Update Mako HTML fixture and integration tests to validate the new search-result card structure and 2-digit date parsing.
  • Adjust project/CI coverage + add lightweight config-validation workflows; extend .gitignore for local-only files.

Reviewed changes

Copilot reviewed 10 out of 11 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
src/denbust/sources/mako.py Switches Mako scraping to Playwright, updates search URL building, readiness waits, and parsing selectors/date parsing.
tests/integration/test_scrapers.py Updates/expands Mako integration coverage to validate new parsing and browser-fetch flow via monkeypatching.
tests/fixtures/html/mako_search.html Refreshes fixture to match current /Search result-card markup and 2-digit dates.
pyproject.toml Adds Playwright dependency and introduces coverage configuration in pyproject.
README.md Documents Playwright/Chromium installation requirement for Mako scraping.
.gitignore Ignores local config/data/env/tool-version files (including uv.lock).
.github/workflows/ci-test.yml Tweaks coverage invocation/output and Codecov upload configuration.
.github/workflows/pyproject-validate.yml Adds a PR-scoped pyproject validator workflow.
.github/workflows/codecov-yaml-validate.yml Adds a PR-scoped Codecov YAML validator workflow.
.codecov.yml Updates Codecov configuration and PR comment settings.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

Comment thread src/denbust/sources/mako.py Outdated
Comment thread tests/integration/test_scrapers.py
Comment thread tests/integration/test_scrapers.py Outdated
Comment thread pyproject.toml Outdated
Comment thread .github/workflows/codecov-yaml-validate.yml Outdated
@github-actions

github-actions Bot commented Mar 14, 2026 •

Copy link
Copy Markdown

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

Below are the details of possibly unresolved review comments and/or (possibly) failing checks on PR
#9.

For each unresolved comment (if any), 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 each failing check below (if any), and push all of these changes in a single
commit.

# Other Review Comments

## REVIEW-1
Location: src/denbust/sources/mako.py:116
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/9#discussion_r2935158599
Root author: copilot-pull-request-reviewer

Comment:
    `fetch()` wraps the entire scrape (all keywords + section) in a single broad `except Exception` and returns `[]` on any error. That means a transient failure for one keyword/section (timeout, navigation error, etc.) discards articles already collected and prevents scraping remaining keywords. Consider handling errors per keyword/section (log and continue), and only returning `[]` when the browser session cannot be opened at all; also prefer `logger.exception(...)` (or `exc_info=True`) so the stack trace is preserved for debugging.

## REVIEW-2
Location: tests/integration/test_scrapers.py:89
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/9#discussion_r2935158605
Root author: copilot-pull-request-reviewer

Comment:
    These integration tests call `MakoScraper.fetch()`, which currently sleeps 1.5s per keyword (plus an additional sleep before section scraping). With three keywords this adds ~6s of wall time to this test alone even though all I/O is monkeypatched. Consider monkeypatching the sleep used by `denbust.sources.mako` to a no-op for the test, or adding a configurable rate-limit delay (defaulting to 1.5s) that tests can set to 0.

## REVIEW-3
Location: tests/integration/test_scrapers.py:131
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/9#discussion_r2935158610
Root author: copilot-pull-request-reviewer

Comment:
    This test also calls `MakoScraper.fetch()`, which includes built-in `asyncio.sleep(1.5)` delays for rate limiting. Since the browser I/O is monkeypatched here, the sleep adds avoidable runtime to the test suite. Consider monkeypatching the sleep used by the Mako module (or allowing rate-limiting to be disabled in tests).

## REVIEW-4
Location: pyproject.toml:104
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/9#discussion_r2935158612
Root author: copilot-pull-request-reviewer

Comment:
    `[tool.coverage.paths]` includes an absolute local workstation path (`/Users/shaypalachy/...`). This is contributor-specific noise in a shared repo config and can become stale or confusing for others. Consider removing local-user paths and keeping only generic/CI paths (or using a more general mapping approach) so coverage config remains portable.

## REVIEW-5
Location: .github/workflows/codecov-yaml-validate.yml:37
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/9#discussion_r2935158614
Root author: copilot-pull-request-reviewer

Comment:
    The path filter triggers this workflow when `.codecov.yml`/`codecov.yml` changes, including deletions. In the deletion/rename case, the selection loop won’t find either file and the workflow fails even though there’s nothing to validate. Consider treating “no config file found” as a no-op success (exit 0) or adjusting the `paths` filter/logic to avoid running on deletion-only changes.

# Codecov/patch

Codecov shows patch test coverage is 0%; please raise it to 100%. These are the uncovered code
lines:
- src/denbust/sources/mako.py: 3, 8, 10, 11, 29, 32, 35, 36, 41, 49, 52, 53, 56, 57, 58, 59, 60, 63, 64, 67, 68, 69, 70, 95, 99, 101, 102, 106, 110, 114, 115, 116, 118, 119, 129, 132, 134, 135, 136, 137, 142, 143, 145, 146, 147, 152, 153, 154, 155, 160, 167, 170, 172, 173, 175, 177, 181, 182, 183, 184, 186, 192, 193, 199, 200, 202, 206, 207, 208, 215, 217, 224, 232, 233, 234, 235, 240, 243, 244, 245, 250, 251, 252, 257, 259, 261, 262, 264, 268, 274, 276, 278, 284, 285, 286, 288, 305, 359, 429, 430, 431, 432, 433, 434, 435

Run metadata:

Tool ref: v4
Tool version: 4.0.4
Workflow run: 23087117334 attempt 1
Comment timestamp: 2026-03-14T11:33:47.543883+00:00
PR head commit: eaa8e1a54845f762d8f9cfe70f206f802032b860

@github-actions

github-actions Bot commented Mar 14, 2026 •

Copy link
Copy Markdown

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

Below are the details of possibly unresolved review comments and/or (possibly) failing checks on PR
#9.

For each unresolved comment (if any), 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 each failing check below (if any), and push all of these changes in a single
commit.

# Other Review Comments

## REVIEW-1
Location: tests/integration/test_scrapers.py:95
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/9#discussion_r2935158605
Root author: copilot-pull-request-reviewer

Comment:
    These integration tests call `MakoScraper.fetch()`, which currently sleeps 1.5s per keyword (plus an additional sleep before section scraping). With three keywords this adds ~6s of wall time to this test alone even though all I/O is monkeypatched. Consider monkeypatching the sleep used by `denbust.sources.mako` to a no-op for the test, or adding a configurable rate-limit delay (defaulting to 1.5s) that tests can set to 0.

Replies:
- shaypal5
  Addressed in `bea62e4`. The scraper now accepts an internal `rate_limit_delay_seconds` constructor
parameter with a default of `1.5`, and the mocked `fetch()` tests instantiate
`MakoScraper(rate_limit_delay_seconds=0)` so they no longer pay the sleep cost.

## REVIEW-2
Location: tests/integration/test_scrapers.py:137
URL: https://github.com/DataHackIL/tfht_enforce_idx/pull/9#discussion_r2935158610
Root author: copilot-pull-request-reviewer

Comment:
    This test also calls `MakoScraper.fetch()`, which includes built-in `asyncio.sleep(1.5)` delays for rate limiting. Since the browser I/O is monkeypatched here, the sleep adds avoidable runtime to the test suite. Consider monkeypatching the sleep used by the Mako module (or allowing rate-limiting to be disabled in tests).

Replies:
- shaypal5
  Addressed in `bea62e4` via the same delay-control change as the earlier test comment. The mocked
`fetch()` tests now run with `rate_limit_delay_seconds=0`, so the built-in rate limiting no longer
slows this case down.

# Failing Workflows

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

Summary:
    checks completed with failures

# Codecov/patch

Codecov shows patch test coverage is 0%; please raise it to 100%. These are the uncovered code
lines:
- src/denbust/sources/mako.py: 3, 8, 10, 11, 29, 32, 35, 36, 41, 49, 52, 53, 56, 57, 58, 59, 60, 61, 64, 65, 68, 69, 70, 71, 77, 80, 97, 102, 103, 104, 105, 106, 108, 110, 111, 112, 113, 114, 115, 117, 119, 120, 121, 124, 125, 127, 129, 130, 131, 132, 142, 145, 147, 148, 150, 152, 154, 155, 156, 157, 162, 163, 166, 167, 172, 173, 174, 175, 180, 187, 189, 190, 192, 193, 195, 197, 201, 202, 203, 204, 206, 212, 213, 219, 220, 222, 226, 227, 228, 235, 237, 244, 252, 253, 254, 255, 260, 263, 264, 265, 270, 271, 272, 277, 279, 281, 282, 284, 288, 294, 296, 298, 304, 305, 306, 308, 325, 379, 449, 450, 451, 452, 453, 454, 455

Run metadata:

Tool ref: v4
Tool version: 4.0.4
Workflow run: 23088516787 attempt 1
Comment timestamp: 2026-03-14T13:04:52.486402+00:00
PR head commit: bea62e4e2d2d153c5eb8f376f24ae0ab14c6557e

@github-actions

github-actions Bot commented Mar 14, 2026 •

Copy link
Copy Markdown

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

Below are the details of possibly unresolved review comments and/or (possibly) failing checks on PR
#9.

For each unresolved comment (if any), 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 each failing check below (if any), and push all of these changes in a single
commit.

# Codecov/patch

Codecov shows patch test coverage is 0%; please raise it to 100%. These are the uncovered code
lines:
- src/denbust/sources/mako.py: 3, 4, 10, 11, 19, 30, 32, 35, 36, 38, 40, 50, 52, 53, 55, 60, 63, 64, 65, 66, 69, 70, 71, 77, 80, 97, 102, 108, 110, 111, 112, 113, 114, 129, 130, 132, 133, 134, 150, 154, 155, 156, 157, 159, 161, 174, 175, 178, 179, 180, 181, 183, 185, 196, 197, 198, 199, 200, 202, 203, 204, 205, 208, 209, 212, 213, 215, 220, 223, 224, 225, 226, 227, 229, 237, 247, 248, 250, 251, 252, 253, 254, 255, 258, 259, 260, 261, 265, 266, 267, 269, 271, 281, 282, 283, 284, 285, 286, 287, 290, 291, 292, 293, 294, 295, 296, 298, 300, 310, 325, 326
- tests/integration/test_scrapers.py: 3, 5, 27, 29, 51, 54, 57, 63, 67, 69, 74, 75, 78, 81, 82, 83, 86, 89, 93, 94, 97, 101, 103, 104, 106, 107, 110, 113, 116, 117, 118, 120, 122, 124, 126, 127, 132, 135, 136, 137, 139, 140, 141, 143, 145, 147, 149, 152, 155, 157, 158, 159, 161, 163, 165, 166, 169

Run metadata:

Tool ref: v4
Tool version: 4.0.4
Workflow run: 23088529422 attempt 1
Comment timestamp: 2026-03-14T13:05:41.685170+00:00
PR head commit: adeb93a050b80c8849c0cf9fbfb5327fa8daa880

@github-actions

github-actions Bot commented Mar 14, 2026 •

Copy link
Copy Markdown

pr-agent-context report:

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

PR: #9
Error: GitHubApiError: GitHub API error 401: Server failed to authenticate the request. Please refer to the information in the www-authenticate header.
Run: https://github.com/DataHackIL/tfht_enforce_idx/actions/runs/23088568474

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.4
Workflow run: 23088568474 attempt 1
Comment timestamp: 2026-03-14T13:09:01.777423+00:00
PR head commit: adeb93a050b80c8849c0cf9fbfb5327fa8daa880

@github-actions

github-actions Bot commented Mar 14, 2026 •

Copy link
Copy Markdown

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

Below are the details of possibly unresolved review comments and/or (possibly) failing checks on PR
#9.

For each unresolved comment (if any), 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 each failing check below (if any), and push all of these changes in a single
commit.

# Codecov/patch

Codecov shows patch test coverage is 0%; please raise it to 100%. These are the uncovered code
lines:
- src/denbust/sources/mako.py: 3, 4, 9, 11, 22, 30, 32, 33, 36, 38, 40, 50, 52, 53, 55, 60, 63, 64, 65, 66, 69, 70, 71, 73, 76, 77, 78, 79, 80, 81, 82, 84, 85, 87, 97, 98, 101, 110, 132, 133, 134, 135, 136, 138, 140, 150, 151, 154, 155, 156, 157, 159, 161, 174, 178, 179, 180, 185, 198, 199, 200, 202, 203, 204, 205, 208, 209, 212, 213, 215, 216, 219, 220, 223, 224, 225, 226, 227, 229, 247, 248, 250, 251, 252, 253, 254, 255, 258, 259, 261, 264, 265, 266, 267, 269, 271, 281, 282, 283, 284, 285, 286, 287, 290, 291, 292, 293, 294, 295, 296, 298, 300, 310, 311, 314, 316, 319, 321, 322, 323, 324, 325, 326, 329, 330
- tests/integration/test_scrapers.py: 3, 5, 27, 29, 51, 54, 57, 63, 67, 69, 74, 75, 78, 81, 82, 83, 86, 89, 99, 100, 101, 103, 104, 106, 107, 110, 113, 116, 117, 118, 120, 122, 124, 126, 127, 132, 135, 136, 137, 139, 140, 141, 143, 145, 147, 149, 152, 155, 157, 158, 159, 161, 163, 165, 166, 169

Run metadata:

Tool ref: v4
Tool version: 4.0.4
Workflow run: 23088912850 attempt 1
Comment timestamp: 2026-03-14T13:29:56.766967+00:00
PR head commit: d7219c053c6ca2670839b6c5c03f4a3e4c4b62e5

@github-actions

Copy link
Copy Markdown

pr-agent-context report:

Below are the details of possibly unresolved review comments and/or (possibly) failing checks on PR
#9.

For each unresolved comment (if any), 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 each failing check below (if any), and push all of these changes in a single
commit.

# Codecov/patch

Codecov shows patch test coverage is 0%; please raise it to 100%. These are the uncovered code
lines:
- src/denbust/sources/mako.py: 3, 8, 9, 11, 12, 30, 33, 36, 37, 45, 48, 49, 52, 53, 54, 55, 56, 57, 58, 59, 64, 65, 66, 71, 72, 83, 84, 87, 88, 89, 90, 93, 94, 97, 98, 99, 100, 101, 107, 110, 127, 132, 133, 134, 135, 136, 138, 140, 141, 142, 143, 144, 145, 147, 149, 150, 151, 154, 155, 159, 161, 162, 163, 164, 174, 177, 179, 180, 182, 184, 186, 187, 188, 189, 194, 195, 198, 199, 204, 205, 206, 207, 208, 213, 220, 222, 223, 225, 226, 228, 230, 234, 235, 238, 244, 245, 247, 249, 250, 252, 254, 261, 269, 270, 271, 272, 277, 280, 281, 282, 287, 288, 289, 294, 296, 303, 304, 305, 306, 311, 312, 314, 315, 316, 317, 318, 322, 323, 330, 332, 333, 334, 335, 343, 344, 345, 347, 348, 349, 351, 352, 356, 358, 360, 364, 366, 367, 368, 369, 370, 378, 380, 381, 383, 384, 385, 387, 388, 390, 392, 394, 395, 397, 399, 405, 413, 420, 422, 423, 425, 429, 435, 436, 438, 440, 441, 444, 445, 447, 449, 451, 460, 477, 531, 601, 602, 603, 604, 605, 606, 607

Run metadata:

Tool ref: v4
Tool version: 4.0.4
Workflow run: 23088913996 attempt 1
Comment timestamp: 2026-03-14T13:32:41.859624+00:00
PR head commit: d7219c053c6ca2670839b6c5c03f4a3e4c4b62e5

@github-actions

github-actions Bot commented Mar 14, 2026 •

Copy link
Copy Markdown

pr-agent-context report:

This is a refreshed snapshot of the current PR state.

Below are the details of possibly unresolved review comments and/or (possibly) failing checks on PR
#9.

For each unresolved comment (if any), 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 each failing check below (if any), and push all of these changes in a single
commit.

# Codecov/patch

Codecov shows patch test coverage is 0%; please raise it to 100%. These are the uncovered code
lines:
- src/denbust/sources/mako.py: 3, 4, 9, 11, 22, 30, 32, 33, 36, 38, 40, 50, 52, 53, 55, 60, 63, 64, 65, 66, 69, 70, 71, 73, 76, 77, 78, 79, 80, 81, 82, 84, 85, 87, 97, 98, 101, 110, 132, 133, 134, 135, 136, 138, 140, 150, 151, 154, 155, 156, 157, 159, 161, 174, 178, 179, 180, 185, 198, 199, 200, 202, 203, 204, 205, 208, 209, 212, 213, 215, 216, 219, 220, 223, 224, 225, 226, 227, 229, 247, 248, 250, 251, 252, 253, 254, 255, 258, 259, 261, 264, 265, 266, 267, 269, 271, 281, 282, 283, 284, 285, 286, 287, 290, 291, 292, 293, 294, 295, 296, 298, 300, 310, 311, 314, 316, 319, 321, 322, 323, 324, 325, 326, 329, 330
- tests/integration/test_scrapers.py: 3, 5, 27, 29, 51, 54, 57, 63, 67, 69, 74, 75, 78, 81, 82, 83, 86, 89, 93, 94, 97, 99, 101, 106, 110, 113, 116, 117, 118, 120, 122, 124, 126, 127, 132, 135, 136, 137, 139, 140, 141, 143, 145, 147, 149, 152, 155, 157, 158, 159, 161, 163, 165, 166, 169

Run metadata:

Tool ref: v4
Tool version: 4.0.4
Workflow run: 23089082238 attempt 1
Comment timestamp: 2026-03-14T13:40:23.053377+00:00
PR head commit: 7a59c091d5f9b21ecaffa8f79a33ae92629546cd

@github-actions

github-actions Bot commented Mar 14, 2026 •

Copy link
Copy Markdown

pr-agent-context report:

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

PR: #9
Error: CalledProcessError: Command '['git', '-C', '/home/runner/work/tfht_enforce_idx/tfht_enforce_idx/caller-repo', 'diff', '--unified=0', '495c869f688e7760def9041c422ba12cc8936c15...7a59c091d5f9b21ecaffa8f79a33ae92629546cd']' returned non-zero exit status 128.
Run: https://github.com/DataHackIL/tfht_enforce_idx/actions/runs/23089802018

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.5
Workflow run: 23089802018 attempt 1
Comment timestamp: 2026-03-14T14:25:55.187669+00:00
PR head commit: 7a59c091d5f9b21ecaffa8f79a33ae92629546cd

@shaypal5
shaypal5 merged commit 1353b73 into main Mar 14, 2026
11 checks passed
@shaypal5
shaypal5 deleted the codex/fix-mako-search branch March 14, 2026 13:49
shaypal5 added a commit that referenced this pull request May 21, 2026
Fixes all 16 issues raised in the post-merge review:

Critical:
- [#1] Orchestrator now checks config.enabled / config.mode at the top of
  evaluate_thin/evaluate_thick: mode=OFF or enabled=False returns a
  _noop_pass immediately without running any stage or writing telemetry;
  SHADOW mode downgrades drop→pass in _conclude while preserving
  stopped_at_stage for recall analysis; ENFORCE respects drops.
- [#2] Stage objects are only instantiated when config.stages.X.enabled is
  True; disabled stages are stored as None, preventing model-load cost for
  stages like C (embedding) and D (SLM) that aren't in use.
- [#3] Added @runtime_checkable StageEvaluator Protocol in models.py with
  uniform evaluate(candidate, pass_kind, body=None) signature; all four
  stage stubs (A–D) updated to that signature so the orchestrator calls
  them uniformly.
- [#4] Removed duplicate ThinOrThick alias from cascade.py; PassKind from
  models.py is the single source of truth.

Major:
- [#5] StoppedAt = StageName | Literal["passed_all"] — no longer a
  copy-paste of the four stage letters.
- [#6] PrefilterDecision.decided_at changed from str to datetime; telemetry
  writer converts to .isoformat() at the serialisation boundary; _path_for
  uses .strftime() directly on the datetime.
- [#7] StageScore.__post_init__ validates p_negative and threshold are both
  in [0.0, 1.0], raising ValueError for out-of-range values.
- [#8] Stage A re-run in evaluate_thick documented with an explicit Note in
  the docstring; thin-result passthrough deferred to a later PR.
- [#9] Test fixtures now use typed aliases (StageName, Verdict, StoppedAt,
  PassKind) — all type: ignore[arg-type] comments removed from helpers.

Minor:
- [#10] flush() removed from PrefilterDecisionWriter.
- [#11] _path_for no longer has a try/except — datetime param makes it
  unnecessary.
- [#12] "short" removed from _hash_config docstring.
- [#13] test_frozen uses pytest.raises(FrozenInstanceError) instead of
  try/except/else antipattern.
- [#14] PrefilterStatePaths converted from pydantic BaseModel to
  @dataclasses.dataclass(frozen=True) — consistent with StageScore /
  PrefilterDecision.
- [#15] __init__.py now exports CandidateView, StageEvaluator,
  PrefilterStatePaths, resolve_prefilter_state_paths, PassKind, Verdict.
- [#16] cli.py summary command no longer hardcodes agents/news/local.yaml;
  prints an actionable error and exits 1 when --config is not supplied.

Tests: 54 → 78 (+24), all passing.
New coverage: StageScore bounds validation (5 tests), StageEvaluator
protocol conformance for all four stages (5 tests), type-alias smoke checks
(4 tests), OFF-mode no-telemetry (2 tests), disabled-flag suppression (1),
shadow/enforce telemetry (2), shadow downgrade with monkeypatched stage (1),
enforce drop with monkeypatched stage (1), disabled-stages-not-instantiated
(1), decided_at-is-datetime (2).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
shaypal5 added a commit that referenced this pull request May 21, 2026
* feat(prefilter): LPF-PR-01 — prefilter package foundation, models, config, telemetry, no-op cascade

Introduces the `denbust.prefilter` package (10 modules, 54 unit tests, 0 ruff/mypy errors):

- `models.py`: `CandidateView` runtime-checkable Protocol, `StageScore` and
  `PrefilterDecision` frozen dataclasses with Literal-typed `StageName`, `PassKind`,
  `Verdict`, and `StoppedAt` fields.
- `config.py`: `PrefilterMode(StrEnum)` (off/shadow/enforce), per-stage configs
  (`StageAConfig`–`StageDConfig`), `PrefilterStagesConfig`, `PrefilterRefreshConfig`,
  and `PrefilterConfig` root with `~`-expansion model_validator.
- `state_paths.py`: `PrefilterStatePaths` pydantic model + `resolve_prefilter_state_paths()`
  anchoring artefacts under `<state_root>/<dataset>/<job>/prefilter/`.
- `telemetry.py`: `PrefilterDecisionWriter` appending decisions to date-sharded
  `<decisions_dir>/YYYY-MM-DD.jsonl` files.
- `cascade.py`: `CascadeOrchestrator` with `evaluate_thin()` / `evaluate_thick()` — always
  returns `verdict="pass"` stub; records every decision via the writer.
- `stage_a.py`–`stage_d.py`: stub `evaluate()` methods returning `None` so the cascade
  always passes through; full implementations land in LPF-PR-03 through LPF-PR-07.
- `cli.py`: `denbust prefilter summary` Typer command stub.
- `__init__.py`: re-exports `CascadeOrchestrator`, `PrefilterConfig`, `PrefilterMode`,
  `PrefilterDecision`, `StageScore`.
- `src/denbust/config.py`: adds `prefilter: PrefilterConfig` field to the root `Config`.
- `src/denbust/cli.py`: registers `prefilter_app` under `denbust prefilter`.
- `README.md`: retitles the cascade section to reflect active implementation.

Cascade ships disabled (`mode: off`); no pipeline insertion in this PR.
54 unit tests covering protocol conformance, config validation, YAML round-trips,
state-path resolution, JSONL telemetry, and cascade no-op behaviour.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs(plan): mark LPF-PR-01 done, update last-merged-PR reference (#158)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(prefilter): address code-review issues from PR #158 self-review

Fixes all 16 issues raised in the post-merge review:

Critical:
- [#1] Orchestrator now checks config.enabled / config.mode at the top of
  evaluate_thin/evaluate_thick: mode=OFF or enabled=False returns a
  _noop_pass immediately without running any stage or writing telemetry;
  SHADOW mode downgrades drop→pass in _conclude while preserving
  stopped_at_stage for recall analysis; ENFORCE respects drops.
- [#2] Stage objects are only instantiated when config.stages.X.enabled is
  True; disabled stages are stored as None, preventing model-load cost for
  stages like C (embedding) and D (SLM) that aren't in use.
- [#3] Added @runtime_checkable StageEvaluator Protocol in models.py with
  uniform evaluate(candidate, pass_kind, body=None) signature; all four
  stage stubs (A–D) updated to that signature so the orchestrator calls
  them uniformly.
- [#4] Removed duplicate ThinOrThick alias from cascade.py; PassKind from
  models.py is the single source of truth.

Major:
- [#5] StoppedAt = StageName | Literal["passed_all"] — no longer a
  copy-paste of the four stage letters.
- [#6] PrefilterDecision.decided_at changed from str to datetime; telemetry
  writer converts to .isoformat() at the serialisation boundary; _path_for
  uses .strftime() directly on the datetime.
- [#7] StageScore.__post_init__ validates p_negative and threshold are both
  in [0.0, 1.0], raising ValueError for out-of-range values.
- [#8] Stage A re-run in evaluate_thick documented with an explicit Note in
  the docstring; thin-result passthrough deferred to a later PR.
- [#9] Test fixtures now use typed aliases (StageName, Verdict, StoppedAt,
  PassKind) — all type: ignore[arg-type] comments removed from helpers.

Minor:
- [#10] flush() removed from PrefilterDecisionWriter.
- [#11] _path_for no longer has a try/except — datetime param makes it
  unnecessary.
- [#12] "short" removed from _hash_config docstring.
- [#13] test_frozen uses pytest.raises(FrozenInstanceError) instead of
  try/except/else antipattern.
- [#14] PrefilterStatePaths converted from pydantic BaseModel to
  @dataclasses.dataclass(frozen=True) — consistent with StageScore /
  PrefilterDecision.
- [#15] __init__.py now exports CandidateView, StageEvaluator,
  PrefilterStatePaths, resolve_prefilter_state_paths, PassKind, Verdict.
- [#16] cli.py summary command no longer hardcodes agents/news/local.yaml;
  prints an actionable error and exits 1 when --config is not supplied.

Tests: 54 → 78 (+24), all passing.
New coverage: StageScore bounds validation (5 tests), StageEvaluator
protocol conformance for all four stages (5 tests), type-alias smoke checks
(4 tests), OFF-mode no-telemetry (2 tests), disabled-flag suppression (1),
shadow/enforce telemetry (2), shadow downgrade with monkeypatched stage (1),
enforce drop with monkeypatched stage (1), disabled-stages-not-instantiated
(1), decided_at-is-datetime (2).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants