github-security-report 0.14.1__tar.gz → 0.14.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. {github_security_report-0.14.1 → github_security_report-0.14.2}/PKG-INFO +10 -5
  2. {github_security_report-0.14.1 → github_security_report-0.14.2}/README.md +9 -4
  3. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/_version.py +2 -2
  4. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/client/copilot.py +5 -0
  5. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/client/queries.py +12 -3
  6. {github_security_report-0.14.1 → github_security_report-0.14.2}/.gitignore +0 -0
  7. {github_security_report-0.14.1 → github_security_report-0.14.2}/LICENSE +0 -0
  8. {github_security_report-0.14.1 → github_security_report-0.14.2}/LICENSES/Apache-2.0.txt +0 -0
  9. {github_security_report-0.14.1 → github_security_report-0.14.2}/pyproject.toml +0 -0
  10. {github_security_report-0.14.1 → github_security_report-0.14.2}/scripts/README.md +0 -0
  11. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/__init__.py +0 -0
  12. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/authors.py +0 -0
  13. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/categories.py +0 -0
  14. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/classify.py +0 -0
  15. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/cli/__init__.py +0 -0
  16. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/cli/__main__.py +0 -0
  17. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/cli/app.py +0 -0
  18. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/cli/boundary.py +0 -0
  19. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/cli/modes.py +0 -0
  20. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/cli/options.py +0 -0
  21. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/cli/outputs.py +0 -0
  22. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/cli/publish.py +0 -0
  23. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/cli/serialise.py +0 -0
  24. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/client/__init__.py +0 -0
  25. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/client/alerts.py +0 -0
  26. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/client/batch_errors.py +0 -0
  27. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/client/endpoints.py +0 -0
  28. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/client/errors.py +0 -0
  29. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/client/org_reads.py +0 -0
  30. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/client/parsers.py +0 -0
  31. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/client/reads.py +0 -0
  32. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/client/transport.py +0 -0
  33. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/client/writes.py +0 -0
  34. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/collect/__init__.py +0 -0
  35. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/collect/context.py +0 -0
  36. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/collect/extras.py +0 -0
  37. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/collect/org.py +0 -0
  38. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/collect/protocols.py +0 -0
  39. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/collect/repo.py +0 -0
  40. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/config/__init__.py +0 -0
  41. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/config/loader.py +0 -0
  42. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/config/models.py +0 -0
  43. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/config/order.py +0 -0
  44. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/config/schema.py +0 -0
  45. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/gating.py +0 -0
  46. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/gitctx.py +0 -0
  47. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/issues.py +0 -0
  48. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/layout.py +0 -0
  49. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/models.py +0 -0
  50. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/ordering.py +0 -0
  51. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/posture/__init__.py +0 -0
  52. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/posture/enablement.py +0 -0
  53. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/posture/facts.py +0 -0
  54. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/posture/releases.py +0 -0
  55. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/pulls/__init__.py +0 -0
  56. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/pulls/columns.py +0 -0
  57. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/pulls/counting.py +0 -0
  58. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/pulls/presentation.py +0 -0
  59. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/pulls/table.py +0 -0
  60. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/py.typed +0 -0
  61. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/remediate.py +0 -0
  62. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/render/__init__.py +0 -0
  63. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/render/html.py +0 -0
  64. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/render/markdown.py +0 -0
  65. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/render/slack.py +0 -0
  66. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/render/slack_limits.py +0 -0
  67. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/render/terminal.py +0 -0
  68. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/report/__init__.py +0 -0
  69. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/report/aggregate.py +0 -0
  70. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/report/display.py +0 -0
  71. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/report/signals.py +0 -0
  72. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/report/tables.py +0 -0
  73. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/rulesets.py +0 -0
  74. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/runner.py +0 -0
  75. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/scope.py +0 -0
  76. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/secret_patterns.py +0 -0
  77. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/severity.py +0 -0
  78. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/summary.py +0 -0
  79. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/templates/index.html.j2 +0 -0
  80. {github_security_report-0.14.1 → github_security_report-0.14.2}/src/github_security_report/templates/report.html.j2 +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: github-security-report
3
- Version: 0.14.1
3
+ Version: 0.14.2
4
4
  Summary: Security and quality reporting across GitHub organisations
5
5
  Project-URL: Homepage, https://github.com/lfreleng-actions/github-security-report-action
6
6
  Project-URL: Repository, https://github.com/lfreleng-actions/github-security-report-action
@@ -789,10 +789,15 @@ pull request that cannot progress until somebody responds. The count also feeds
789
789
  the row ranking, so a backlog awaiting review outranks an untouched one of the
790
790
  same size.
791
791
 
792
- The scan reads up to **20 review threads per pull request**, which is the single
793
- most expensive part of the prefetch (see the cost figures above). Where a pull
794
- request carries more threads than that and none of the collected ones qualifies,
795
- the pull request is treated as **indeterminate** rather than clear — see below.
792
+ The scan reads the **newest 20 review threads per pull request**, which is the
793
+ single most expensive part of the prefetch (see the cost figures above). The
794
+ newest end is deliberate: GitHub returns review threads oldest-first and offers
795
+ no way to order them, so reading from the front would window the threads a
796
+ review has already worked through — the resolved ones — and report a pull
797
+ request still waiting on its latest round as clear. Unanswered feedback is the
798
+ recent kind. Where a pull request carries more threads than the window and none
799
+ of the collected ones qualifies, it is treated as **indeterminate** rather than
800
+ clear — see below.
796
801
 
797
802
  #### Automation backlog thresholds
798
803
 
@@ -745,10 +745,15 @@ pull request that cannot progress until somebody responds. The count also feeds
745
745
  the row ranking, so a backlog awaiting review outranks an untouched one of the
746
746
  same size.
747
747
 
748
- The scan reads up to **20 review threads per pull request**, which is the single
749
- most expensive part of the prefetch (see the cost figures above). Where a pull
750
- request carries more threads than that and none of the collected ones qualifies,
751
- the pull request is treated as **indeterminate** rather than clear — see below.
748
+ The scan reads the **newest 20 review threads per pull request**, which is the
749
+ single most expensive part of the prefetch (see the cost figures above). The
750
+ newest end is deliberate: GitHub returns review threads oldest-first and offers
751
+ no way to order them, so reading from the front would window the threads a
752
+ review has already worked through — the resolved ones — and report a pull
753
+ request still waiting on its latest round as clear. Unanswered feedback is the
754
+ recent kind. Where a pull request carries more threads than the window and none
755
+ of the collected ones qualifies, it is treated as **indeterminate** rather than
756
+ clear — see below.
752
757
 
753
758
  #### Automation backlog thresholds
754
759
 
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.14.1'
22
- __version_tuple__ = version_tuple = (0, 14, 1)
21
+ __version__ = version = '0.14.2'
22
+ __version_tuple__ = version_tuple = (0, 14, 2)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -50,6 +50,11 @@ def _copilot_unresolved(node: dict) -> bool | None:
50
50
  every thread was seen. This mirrors the rule ``mergeable`` and the check
51
51
  rollup already follow: not established is not the same as nothing to report.
52
52
 
53
+ The window holds the *newest* threads (see ``_REVIEW_THREAD_WINDOW``), which
54
+ is what makes ``True`` reachable on a long review: unanswered feedback is
55
+ the recent kind, so a truncated window that finds nothing is a weak reading
56
+ rather than the usual one.
57
+
53
58
  An outdated thread still counts. GitHub marks a thread outdated when the
54
59
  code beneath it changes but does not resolve it, so the feedback remains
55
60
  unanswered -- which is exactly what the column reports.
@@ -120,8 +120,17 @@ _ASSIGNEE_WINDOW = 10
120
120
  # without this connection and 57, 89 or 151 with a window of 5, 10 or 20. At 20
121
121
  # a 118-repository organisation costs ~755 points of the 5,000-point hourly
122
122
  # budget, which leaves room for the several organisations a scheduled run
123
- # covers, and 20 threads covers a realistic review cycle: this project's own
124
- # most-reviewed pull requests carry single-figure thread counts.
123
+ # covers.
124
+ #
125
+ # The window is taken with ``last``, not ``first``, and which end it is anchored
126
+ # to decides whether it can answer the question at all. ``reviewThreads`` is
127
+ # ordered oldest-first and accepts no ``orderBy``, so ``first`` collects the
128
+ # threads a review has already worked through -- exactly the ones most likely to
129
+ # have been resolved. A pull request that has answered dozens of rounds and is
130
+ # now waiting on the latest would fill the window with settled threads and
131
+ # report the outstanding ones as never seen. Unresolved feedback ages into
132
+ # resolution rather than the other way round, so the newest threads are where
133
+ # the column's answer lives. Same node cost, opposite blind spot.
125
134
  #
126
135
  # ``totalCount`` rides along free of node cost and is what keeps the bounded
127
136
  # window honest -- a pull request carrying more threads than the window returned
@@ -173,7 +182,7 @@ fragment RepoData on Repository {{
173
182
  authorAssociation
174
183
  author {{ __typename login }}
175
184
  assignees(first: {_ASSIGNEE_WINDOW}) {{ nodes {{ login }} }}
176
- reviewThreads(first: {_REVIEW_THREAD_WINDOW}) {{
185
+ reviewThreads(last: {_REVIEW_THREAD_WINDOW}) {{
177
186
  totalCount
178
187
  nodes {{
179
188
  isResolved