Skip to content

Separate cooldown property deadlines from process bounds (#219) - #222

Merged
leynos merged 1 commit into
mainfrom
fix/cooldown-property-deadlines
Oct 14, 2026
Merged

leynos merged 1 commit into
mainfrom
fix/cooldown-property-deadlines

Conversation

@leynos

@leynos leynos commented Oct 14, 2026 •

Copy link
Copy Markdown
Owner

Summary

The default Hypothesis deadline can reject subprocess-backed cooldown examples
because of host scheduling, even though their semantic assertions pass. This
change removes that wall-clock deadline from the two affected properties while
retaining their independent 30-second subprocess timeout.

Closes #219.

This is the independent timing prerequisite for PR #217.
PR #217 is stacked on this branch and will be restacked onto the updated parent
before merge, so its review diff retains only Tokio spelling-policy scope. The prerequisite will merge
first; the child will then be retargeted and revalidated on the landed main
revision.

Review walkthrough

Cooldown properties
add the settings import, a short scheduler-latency explanation and
@settings(deadline=None) on the requested-wait and malformed-input properties.
Their bodies, generated domains, explicit examples, property budgets, fake
tools, assertions and timeout=30 remain unchanged. The change is one file.

Validation

The current published candidate is a92e31269f40883a2e1d9a585d1bc9e3f84564e9,
based on main 34f86aa35764546cee3fe4a5227077098b4f0fde, with tested tree
c1d134c1831258fa5d3c5067957cd5f0891b575a. The one-file timing patch and
387-line source are unchanged. The new main files, shared-action pins and
Hypothesis 6.168.5 dependency are inherited unchanged.

All six fresh Make gates passed sequentially on this replayed candidate:
check-fmt, markdownlint, lint, typecheck, test and spelling, with
actual zero process exits and accepted final candidate parity. The full suite
passed 977 tests and three snapshots; both affected cooldown properties
executed and passed. typecheck performs syntax checks only.

The observed test environment was Python 3.14.7, pytest 9.1.1 and Hypothesis
6.168.5. Spelling resolved builder v0.1.3 to
c8a4f95d7cf7f6a1b7517f2775d122d47d5721eb. The current shared dictionary,
local overlay and generated output remained unchanged (SHA-256 prefixes
5be79d9f, 56da0706 and 1a6c4cca, respectively).
Hosted CI and review for this published head remain pending; the prerequisite
has not merged.

The original failure was a 1156.06 ms example against a 200 ms deadline;
replaying the same input took 6.34 ms. The failure was deadline flakiness,
rather than a cooldown assertion failure. The independent process bound remains
30 seconds. The existing Node colour warning is tracked in
issue #218; its
producer remains unproven and no warning filter is added.

References

Summary by Sourcery

Remove Hypothesis wall-clock deadlines from subprocess-backed cooldown properties while retaining their process-level timeout.

Bug Fixes:

  • Prevent subprocess-backed cooldown properties from failing due to Hypothesis' default wall-clock deadline while preserving their semantic assertions and independent 30-second process timeout.

Enhancements:

  • Document why scheduler latency is excluded from the cooldown property deadline.

@coderabbitai

coderabbitai Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Important

Review skipped

Review was skipped as selected files did not have any reviewable changes.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Team
  • Run ID: a51b6875-7cc1-40d0-ab67-dcdd373dc444
📥 Commits

Reviewing files that changed from the base of the PR and between f13e8d1 and a92e312.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Team
  • Run ID: 43d97752-ce09-4c80-ac41-c0bac5ceccfa
📥 Commits

Reviewing files that changed from the base of the PR and between d3da862 and f13e8d1.

📒 Files selected for processing: 1
  • tests/test_sdlc_milestone_review.py
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

Included review availability: This review used your included allowance. 0 included reviews remain after this review. Your included PR review attempts over the past 7 days set your current allowance at 1 review per hour.

Summary

Disable Hypothesis execution deadlines on the two subprocess-backed cooldown properties in tests/test_sdlc_milestone_review.py. Keep the independent timeout=30 process bound and explain that scheduler latency is outside the semantic contract.

Preserve the properties’ domains, examples, budgets, assertions, tools, and isolation. See issue #219 for the required scope.

Validation

The PR reports that all six Make gates passed. The full suite passed 977 tests and three snapshots, including both affected properties. Hosted CI and review remain pending.

Walkthrough

The test module imports Hypothesis settings and disables execution deadlines for two subprocess-backed cooldown properties. The subprocess timeout remains unchanged.

Changes

Cooldown test timing

Layer / File(s) Summary
Disable deadlines for cooldown properties
tests/test_sdlc_milestone_review.py
Both subprocess-backed cooldown properties use @settings(deadline=None). A comment explains that scheduler latency is outside the semantic cooldown contract.

Suggested labels: Issue

Priority: ⬇️ Low

Change: Bug fix · Severity of issue fixed: Low

Merge Risk: ⚪ Minimal · up to f13e8

The two cooldown tests retain their 30-second subprocess limit and checks while avoiding scheduler-sensitive Hypothesis deadlines. No actionable merge-blocking risk remains in the reviewed change.

Pre-merge checks: Passed 15
Passed Passed checks: 15 passed
Check name Status Explanation
Linked Issues check Passed Satisfy issue #219. The diff changes only tests/test_sdlc_milestone_review.py. It adds @settings(deadline=None) to the two specified subprocess-backed properties. It imports settings and adds th…
Out of Scope Changes check Passed Keep the change within issue #219 scope. The only changes are the required Hypothesis import, two local deadline settings, and a comment that explains the semantic boundary. The diff adds no global pr…
Docstring Coverage Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 1 files.
Testing (Overall) Passed Pass the testing check. The pull request changes only Hypothesis configuration and adds an explanatory comment; it does not change product behaviour. The two existing properties remain substantive: th…
User-Facing Documentation Passed Treat the change as test-only behaviour. The pull request changes only tests/test_sdlc_milestone_review.py: it disables Hypothesis deadlines for two generated tests and retains each subprocess `time…
Developer Documentation Passed Treat this change as documentation-inapplicable. The pull request changes only tests/test_sdlc_milestone_review.py: it imports settings, adds two @settings(deadline=None) decorators, and adds a …
Module-Level Documentation Passed Keep the existing module docstring at tests/test_sdlc_milestone_review.py:1. It clearly states the module purpose and its relation to the documented local CodeRabbit CLI cooldown helper. The pull re…
Testing (Unit And Behavioural) Passed Pass this check. The pull request changes only Hypothesis timing configuration and a comment. The two affected tests still exercise the documented Bash helper through real subprocesses, with the indep…
Testing (Property / Proof) Passed The pull request changes only tests/test_sdlc_milestone_review.py: it imports settings, adds @settings(deadline=None) to two existing Hypothesis properties, and adds a timing comment. The existi…
Testing (Compile-Time / Ui) Passed The pull request changes only tests/test_sdlc_milestone_review.py, a Python Hypothesis test. It adds @settings(deadline=None) to two subprocess-backed properties and keeps the existing behavioural…
Unit Architecture Passed Pass. The pull request changes only tests/test_sdlc_milestone_review.py. It adds @settings(deadline=None) to the two existing subprocess-backed Hypothesis properties and documents the reason at li…
Domain Architecture Passed Pass. The pull request changes only tests/test_sdlc_milestone_review.py. It adds @settings(deadline=None) to two subprocess-backed Hypothesis tests and documents scheduler latency. It does not cha…
Observability Passed PASS. Restrict the change to tests/test_sdlc_milestone_review.py. It adds @settings(deadline=None) to two Hypothesis properties and imports settings; it adds no production operational behaviour,…
Title check Passed The title accurately describes separating Hypothesis cooldown deadlines from process bounds and references issue #219.
Description check Passed The description directly explains the timing fix, preserved 30-second process timeout, affected properties, validation, and issue scope.
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Set deadlines aside for the run,
Keep the process timeout in place.
Let scheduler delays pass by,
Check cooldowns at their own pace.
Let both properties finish their race.

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

@sourcery-ai

sourcery-ai Bot commented Oct 14, 2026

Copy link
Copy Markdown
Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

The PR isolates subprocess scheduling variability from Hypothesis property timing by disabling the default 200 ms deadline on two cooldown properties, without changing their generated inputs, assertions, examples, budgets, or 30-second process bounds. All six Make validation gates passed, including the affected tests.

File-Level Changes

Change Details Files
Disable Hypothesis wall-clock deadlines for the two subprocess-backed cooldown properties while preserving their semantic checks and independent process timeout.
  • Import Hypothesis settings.
  • Apply @settings(deadline=None) to the requested-wait property.
  • Apply @settings(deadline=None) to the malformed-input property.
  • Document that scheduler latency is outside the cooldown contract and retain the 30-second subprocess timeout.
tests/test_sdlc_milestone_review.py

Assessment against linked issues

Issue Objective Addressed Explanation
#219 Disable Hypothesis's wall-clock deadline on the two subprocess-backed cooldown properties, while retaining their independent 30-second subprocess timeout. ✅
#219 Explain that host scheduler latency is outside the semantic cooldown contract, while preserving the properties' generated domains, examples, budgets, assertions, tools, and other behavior. ✅

Possibly linked issues


Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@leynos
leynos marked this pull request as ready for review October 14, 2026 08:42
@sourcery-ai

sourcery-ai Bot commented Oct 14, 2026

Copy link
Copy Markdown

Sorry @leynos, you've used your own review budget of 250,000 diff characters for the last 7 days.

You can request another review in 1 day and 12 hours by commenting @sourcery-ai review. Upgrade to get a review now.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-14T08:43:49.059773Z f13e8d1 Draft marked ready
🔒 Security Review ✅ Completed 2026-10-14T08:44:41.615924Z f13e8d1 Draft marked ready
ℹ️ About Codex in GitHub

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

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

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai coderabbitai Bot added the Issue label Oct 14, 2026
Keep subprocess-backed cooldown properties independent of scheduler
latency while retaining their separate 30-second process timeout.

Preserve generated inputs, explicit examples and semantic assertions.
@leynos
leynos force-pushed the fix/cooldown-property-deadlines branch from f13e8d1 to a92e312 Compare October 14, 2026 09:14
@pandalump

Copy link
Copy Markdown
Collaborator

@coderabbitai review

Candidate head: a92e312
Base: 34f86aa

Please inspect the current candidate, including the changed test-framework base/input (6.168.3 to 6.168.5) and inherited installer-action pin. The earlier approval submission #5515300525 is current-head metadata, but its linked report coverage was bound to f13e8d1. Please report the actual head and scope inspected; do not transfer that prior report's coverage to this candidate.

@coderabbitai

coderabbitai Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
⚠️ Action not completed

No files to review.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@wafflecat-df12

Copy link
Copy Markdown
Collaborator

@coderabbitai Please reconcile the managed request's response for current head a92e31269f40883a2e1d9a585d1bc9e3f84564e9, based on 34f86aa35764546cee3fe4a5227077098b4f0fde.

The response says “Action not completed” and “No files to review.” The
latest walkthrough
records the skipped incremental comparison from f13e8d19 to a92e3126,
while its substantive review, risk coverage and 15 passed rows still name the
original f13e8d19 candidate. Its 100% docstring result for two functions is
historical coverage, not evidence of new inspection. The reassociated approval
timestamp also predates the replay.

The current one-file comparison
contains the exact original timing patch. The file SHA-256 remains
e58fb2b0a98f91ead5f884e333a449138a1bec3a00c9d8d00150210403f08414
and the native patch SHA-256
a0bfeb58b9317d46531281f3c87dad8850e61cf576f98d8399e66b8e2870d703.
The replay audit records an equal range-diff and preserved parent blobs at
~/docs/leynos-gauss/rust-baseline-4a371535/restack-recovery/helper222-on-main34-20261014/replay-receipt.json.
The main delta
changes only workflow action pins and Hypothesis 6.168.3 to 6.168.5. The test
bodies, generated domains, examples and independent 30-second subprocess bound
are preserved.

All six fresh local Make gates passed on the current candidate, including
977 tests and three snapshots. Current-head CI run 38540914286
passed 968 tests, skipped nine and passed three snapshots. These are separate
local and hosted results; typecheck is syntax-only.

Please state the actual inspected scope and whether any required inspection
remains for this exact current comparison and inherited dependency change.
Does the no-files response mean the previously inspected timing change remains
sufficiently covered, or is a concrete inspection gap still open? If a gap
remains, identify it and provide the bounded remaining agent task, including
any service or access limitation.

This asks for a service and inspection disposition, not another whole-PR
review, review-resume action or approval. No fresh inspection or approval is
inferred from the skipped command or historical report.

@coderabbitai

coderabbitai Bot commented Oct 14, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -uo pipefail
head=a92e31269f40883a2e1d9a585d1bc9e3f84564e9
base=34f86aa35764546cee3fe4a5227077098b4f0fde
oldbase=d3da862950d9169e08454fb47d55f9bb079bf6b8
printf '\nCHECKOUT\n'
git rev-parse HEAD
printf '\nEXACT COMPARISON\n'
git diff --stat "$base...$head"
git diff "$base...$head"
printf '\nINHERITED DELTA\n'
git diff "$oldbase" "$base"
printf '\nFILE DIGEST\n'
git show "$head:tests/test_sdlc_milestone_review.py" | sha256sum
printf '\nTEST FILE OUTLINE\n'
ast-grep outline tests/test_sdlc_milestone_review.py --items all
printf '\nREFERENCES\n'
rg -n -C3 'hypothesis|timeout=30|sdlc.milestone.review' Makefile pyproject.toml tests/test_sdlc_milestone_review.py

Length of output: 3815


🏁 Script executed:

#!/bin/bash
set -uo pipefail
repo=leynos/agent-helper-scripts
printf '\nMANAGED RESPONSE\n'
gh api "repos/$repo/issues/comments/6166745647" --jq '{id,created_at,updated_at,body}'
printf '\nWALKTHROUGH\n'
gh api "repos/$repo/issues/comments/6164359430" --jq '{id,created_at,updated_at,body}'
printf '\nPR CURRENT METADATA\n'
gh api "repos/$repo/pulls/222" --jq '{head:.head.sha,base:.base.sha,state}'
printf '\nHISTORICAL APPROVAL METADATA\n'
gh api "repos/$repo/pulls/222/reviews/5515300525" --jq '{id,state,commit_id,submitted_at,body}'
printf '\nCURRENT CI METADATA\n'
gh api "repos/$repo/actions/runs/38540914286" --jq '{id,head_sha,status,conclusion,created_at,updated_at,html_url}'
printf '\nCI JOBS\n'
gh api "repos/$repo/actions/runs/38540914286/jobs" --jq '.jobs[] | {name,status,conclusion,steps:[.steps[]|{name,conclusion}]}'

Length of output: 19047


🏁 Script executed:

#!/bin/bash
set -uo pipefail
repo=leynos/agent-helper-scripts
printf '\nEXACT COMPARISON\n'
gh api "repos/$repo/compare/34f86aa35764546cee3fe4a5227077098b4f0fde...a92e31269f40883a2e1d9a585d1bc9e3f84564e9" --jq '{status,merge_base:.merge_base_commit.sha,total_commits,files:[.files[]|{filename,status,additions,deletions,patch}]}'
printf '\nINHERITED COMPARISON\n'
gh api "repos/$repo/compare/d3da862950d9169e08454fb47d55f9bb079bf6b8...34f86aa35764546cee3fe4a5227077098b4f0fde" --jq '{status,merge_base:.merge_base_commit.sha,total_commits,files:[.files[]|{filename,status,additions,deletions,patch}]}'
printf '\nNATIVE PATCH DIGEST\n'
gh api -H 'Accept: application/vnd.github.patch' "repos/$repo/compare/34f86aa35764546cee3fe4a5227077098b4f0fde...a92e31269f40883a2e1d9a585d1bc9e3f84564e9" | sha256sum

Length of output: 43241


🏁 Script executed:

#!/bin/bash
set -uo pipefail
printf '\nTEST IMPLEMENTATION\n'
sed -n '1,267p' tests/test_sdlc_milestone_review.py
printf '\nMAKEFILE OUTLINE\n'
ast-grep outline Makefile --items all
printf '\nGATE REFERENCES\n'
rg -n -C4 'typecheck:|test:|uv sync|pytest|compileall|py_compile' Makefile
printf '\nHYPOTHESIS INPUTS\n'
rg -n -C3 '6\.168\.[35]|name = "hypothesis"|hypothesis==' .

Length of output: 32388


🤖 web_search executed:

Hypothesis Python release notes 6.168.4 6.168.5 changes settings deadline None subprocess tests 6.168.3

Length of output: 1204


🏁 Script executed:

#!/bin/bash
set -uo pipefail
printf '\nSHARED ACTION DELTA\n'
gh api 'repos/leynos/shared-actions/compare/b59d7d13d29636cc9f0c33a81ba17a9a2bde9bb8...aea9c14c24b73042e99f0be8245a4f171b67c31a' --jq '{status,total_commits,files:[.files[]|{filename,status}],relevant_patches:[.files[]|select((.filename|contains("install-mdtablefix")) or (.filename|contains("dependabot-automerge")))|{filename,patch}]}'
printf '\nPINNED INSTALLER\n'
gh api 'repos/leynos/shared-actions/contents/.github/actions/install-mdtablefix/action.yml?ref=aea9c14c24b73042e99f0be8245a4f171b67c31a' --jq '.content' | base64 --decode
printf '\nCI EVIDENCE\n'
gh run view 38540914286 --repo leynos/agent-helper-scripts --log | grep -E 'hypothesis==|hypothesis-|test_documented_cooldown_range_and_sleep_match_the_requested_wait|test_malformed_cooldown_inputs_fail_before_invoking_tools|[0-9]+ passed|[0-9]+ skipped|snapshot|typecheck:|make (check-fmt|markdownlint|lint|typecheck|test|spelling)|mdtablefix' | tail -55
printf '\nORIGINAL TEST BLOB DIGEST\n'
gh api 'repos/leynos/agent-helper-scripts/contents/tests/test_sdlc_milestone_review.py?ref=f13e8d19ac334a5cc77526d2e1cd5e299feb8a44' --jq '.content' | base64 --decode | sha256sum

Length of output: 43338


🏁 Script executed:

#!/bin/bash
set -uo pipefail
printf '\nNATIVE GIT DIFF DIGEST\n'
git diff 34f86aa35764546cee3fe4a5227077098b4f0fde a92e31269f40883a2e1d9a585d1bc9e3f84564e9 | sha256sum
printf '\nWORKFLOW OUTLINES\n'
ast-grep outline .github/workflows/ci.yml --items all
ast-grep outline .github/workflows/dependabot-automerge.yml --items all
printf '\nWORKFLOW CONTENTS\n'
sed -n '1,110p' .github/workflows/ci.yml
sed -n '1,90p' .github/workflows/dependabot-automerge.yml
printf '\nDOCUMENTED HELPER\n'
rg -n -A65 -B4 '^wait_for_coderabbit_cli\(\)' skills/sdlc-implementation/references/milestone-review.md

Length of output: 5435


🏁 Script executed:

#!/bin/bash
set -uo pipefail
printf '\nPINNED REUSABLE WORKFLOW\n'
gh api 'repos/leynos/shared-actions/contents/.github/workflows/dependabot-automerge.yml?ref=aea9c14c24b73042e99f0be8245a4f171b67c31a' --jq '.content' | base64 --decode
printf '\nAUDIT IMPLEMENTATION DELTA\n'
gh api 'repos/leynos/shared-actions/compare/b59d7d13d29636cc9f0c33a81ba17a9a2bde9bb8...aea9c14c24b73042e99f0be8245a4f171b67c31a' --jq '.files[]|select(.filename=="workflow_scripts/dependabot_commit_audit.py" or .filename=="workflow_scripts/tests/test_dependabot_foreign_commits.py")|{filename,patch}'

Length of output: 17797


@wafflecat-df12 Treat “No files to review” as a skipped incremental action, not as current-head inspection or approval. The linked response supplies no fresh coverage. Keep the historical risk assessment, 15 passed rows, and docstring result bound to f13e8d19.

Actual scope inspected here

I performed read-only, bounded inspection of:

  • Head: a92e31269f40883a2e1d9a585d1bc9e3f84564e9.
  • Base: 34f86aa35764546cee3fe4a5227077098b4f0fde.
  • The exact one-file comparison, both affected properties, their subprocess helper, and the documented Bash helper.
  • The inherited delta from d3da862950d9169e08454fb47d55f9bb079bf6b8 to the current base.
  • The workflow callers, pinned install-mdtablefix implementation, upstream pin comparison, and the reusable auto-merge workflow’s commit-audit delta.
  • The managed response, walkthrough, approval metadata, and current-head CI logs.

Both original and current test files match your supplied SHA-256. The native Git diff also matches your supplied patch SHA-256. The GitHub patch response uses a different representation; its digest is not the native diff digest.

Inspection disposition

Area Disposition
Timing patch Sufficiently covered by this bounded inspection. The diff changes only the import, two @settings(deadline=None) decorators, and the explanatory comment. Domains, examples, assertions, tools, isolation, and timeout=30 remain unchanged. No budget override, global profile, suppression, retry, or skip was added.
Hypothesis 6.168.3 → 6.168.5 No identified compatibility gap for these properties. The intervening release notes cover PyPy 3.12 support and a from_field() return-type annotation fix, not deadline semantics. Release notes
Installer pin No identified pin-change gap for this caller. The upstream comparison leaves install-mdtablefix unchanged. The caller still requests 0.6.1. Hosted logs show installation and published-checksum verification succeeding.
Inherited auto-merge pin One bounded transitive check remains. The reusable workflow file is unchanged, but workflow_scripts/dependabot_commit_audit.py changes and removes audit_commits(). I inspected that delta and its test updates, but have not verified all reachable callers. This is an inspection gap, not an established defect.
Managed review coverage Still historical. This conversation does not regenerate the managed report, its checks, or approval metadata.

Thus, the skipped command alone does not establish sufficient coverage. The direct inspection above establishes coverage for the timing patch and its Hypothesis/installer context. Do not transfer the old report’s coverage to this head.

Keep validation evidence separate

I verified that run 38540914286 succeeded on the exact current head. Its logs show:

  • Hypothesis 6.168.5.
  • Both affected properties PASSED.
  • 968 passed, nine skipped, and three snapshots passed.

Keep your reported local 977 tests and three snapshots as separate evidence. I did not rerun the local gates. I confirmed that typecheck performs syntax checks only.

Bounded remaining agent task

Inspect only the inherited Dependabot auto-merge dependency compatibility.

Compare leynos/shared-actions:
b59d7d13d29636cc9f0c33a81ba17a9a2bde9bb8
→ aea9c14c24b73042e99f0be8245a4f171b67c31a.

Trace workflow_scripts/dependabot_automerge.py through
workflow_scripts/dependabot_github.py and dependabot_commit_audit.py.

Verify that no reachable caller requires the removed audit_commits().
Verify that the UNKNOWN_OID change preserves commit-audit decisions.
Report the exact files and commits inspected, findings, and evidence limits.

Do not trigger a whole-PR review, resume reviews, submit approval,
or relabel historical coverage.

GitHub read access worked. The initial shallow-history limitation was bypassed through GitHub’s comparison API. I did not access your local replay receipt. The sandbox prohibits executing repository code, so the remaining task must use static inspection or separately supplied execution evidence.

Thanks for the provenance guidance.


✏️ Learnings added
Learnt from: wafflecat-df12
URL: https://github.com/leynos/agent-helper-scripts/pull/222

Timestamp: 2026-10-14T11:18:05.228Z
Learning: In leynos/agent-helper-scripts, distinguish replayed patch equivalence from fresh exact-head CodeRabbit inspection. A skipped incremental command, historical walkthrough checks, docstring results, or reassociated approval metadata do not establish new inspection coverage. Report the actual inspected head, base, files, and inherited dependency scope. Keep local Make results separate from hosted CI results; the Makefile typecheck target performs syntax checks only.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

You are interacting with an AI system.

@pandalump

Copy link
Copy Markdown
Collaborator

@coderabbitai The bounded transitive inspection requested in your response is complete for leynos/shared-actions revisions b59d7d13d29636cc9f0c33a81ba17a9a2bde9bb8 → aea9c14c24b73042e99f0be8245a4f171b67c31a.

The exact trees were non-truncated. The inspection fetched and checked all
36 old and 44 new Python files in the requested workflow_scripts tree,
plus the workflow entry; this was source inspection only, with no test or
repository-code execution.

The reachable route remains:

workflow entry
→ main/live snapshot
→ fetch_pull_request / audit_whole_branch
→ commit_page / foreign_commits.
Both relative and standalone import branches name CommitAudit, commit_page
and foreign_commits, not the removed wrapper.

The workflow and two caller scripts are byte-identical across the revisions:
blob IDs 0fa16324c6b79147d72ae338ad5f748db5aa2733,
9a5fba9738611d0e428c490c9a48293461a80db9 and
e5c6a5e8c54a2d51eb963bf0ef0bd47776b5229f, respectively. The audit module
changes from blob 506fa7c2a2414b2df00cfa4fff5f4dd5e1fade39 to
bec2f5907ad72b9df99f9b880528b973e3d838a0.

The old tree's audit_commits references are one definition, one internal
documentation reference and eight test-only calls. The complete new scoped
tree has none. The tests now compose page parsing and foreign-author judgment;
no production import or reflected access to the removed symbol was found.
The production entry already audits the whole branch through pagination.

OID handling
keeps string values unchanged, including empty strings. Missing and non-string
values now use UNKNOWN_OID rather than UNKNOWN_AUTHOR. The diagnostic
identity/rendering changes; it is not claimed byte-equivalent.
The judgment
still depends only on authors and author-list completeness, so the OID fallback
does not change clean/foreign classification or page readability. A complete
Dependabot-only author record with a missing OID therefore remains non-foreign
by static inspection.

Test source
covers absent/non-string OIDs and their diagnostic marker using empty authors.
It does not directly exercise missing OID plus a valid Dependabot author; that
boundary conclusion comes from the unchanged judgment source, not a new
executed test. Existing source tests also cover unreadable/readable page
shapes, clean/foreign handling, pagination and page ceilings.

No compatibility gap was found within this requested workflow tree. Arbitrary
external consumers, obfuscated imports and unrelated changes in the 13-commit
comparison were not qualified. Exact immutable blobs, hashes and branches are
recorded in /tmp/shared-actions-automerge-call-vet-20261014/report.json.

Does this resolve the specific inherited auto-merge inspection gap? If not,
please identify the remaining caller, decision branch or input and provide the
bounded remaining agent task, including any inspection limitation. This is
focused evidence reconciliation, not a full-review, resume or approval request.
Historical report rows and approval metadata are not relabelled as current.

@coderabbitai

coderabbitai Bot commented Oct 14, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
work=$(mktemp -d)
export INSPECTION_DIR="$work"
python - <<'PY'
import base64, concurrent.futures, json, os, pathlib, subprocess
repo = "leynos/shared-actions"
old = "b59d7d13d29636cc9f0c33a81ba17a9a2bde9bb8"
new = "aea9c14c24b73042e99f0be8245a4f171b67c31a"
root = pathlib.Path(os.environ["INSPECTION_DIR"])
def api(path):
    return json.loads(subprocess.check_output(["gh", "api", f"repos/{repo}/{path}"], text=True))
trees = {}
for label, revision in (("old", old), ("new", new)):
    tree = api(f"git/trees/{revision}?recursive=1")
    if tree.get("truncated"):
        raise RuntimeError("Truncated tree")
    entries = {e["path"]: e for e in tree["tree"] if e["type"] == "blob"}
    trees[label] = entries
    files = [p for p in entries if p.startswith("workflow_scripts/") and p.endswith(".py")]
    print(label, revision, "non-truncated Python file count:", len(files))
paths = [
    ".github/workflows/dependabot-automerge.yml",
    "workflow_scripts/dependabot_automerge.py",
    "workflow_scripts/dependabot_github.py",
    "workflow_scripts/dependabot_commit_audit.py",
]
for path in paths:
    print("BLOB", path, trees["old"][path]["sha"], trees["new"][path]["sha"])
jobs = []
for label in ("old", "new"):
    for path, entry in trees[label].items():
        if (path.startswith("workflow_scripts/") and path.endswith(".py")) or path == paths[0]:
            jobs.append((label, path, entry["sha"]))
def fetch(job):
    label, path, sha = job
    blob = api(f"git/blobs/{sha}")
    data = base64.b64decode(blob["content"])
    destination = root / label / path
    destination.parent.mkdir(parents=True, exist_ok=True)
    destination.write_bytes(data)
    refs = [(i, line) for i, line in enumerate(data.decode().splitlines(), 1) if "audit_commits" in line]
    return label, path, refs
with concurrent.futures.ThreadPoolExecutor(max_workers=6) as pool:
    results = list(pool.map(fetch, jobs))
for label, path, refs in sorted(results):
    for line, text in refs:
        print("REMOVED SYMBOL REFERENCE", label, path, line, text.strip())
print("FETCHED", len(results), "source files; no repository code executed")
PY
for file in workflow_scripts/dependabot_automerge.py workflow_scripts/dependabot_github.py workflow_scripts/dependabot_commit_audit.py workflow_scripts/tests/test_dependabot_foreign_commits.py; do
  ast-grep outline "$work/new/$file" --items all
done
printf '\nWORKFLOW ENTRY\n'
rg -n -C4 'dependabot_automerge|workflow_scripts|python' "$work/new/.github/workflows/dependabot-automerge.yml"
printf '\nCALL ROUTE AND IMPORTS\n'
rg -n -C5 'CommitAudit|commit_page|foreign_commits|audit_whole_branch|fetch_pull_request|live_snapshot' "$work/new/workflow_scripts/dependabot_automerge.py" "$work/new/workflow_scripts/dependabot_github.py"
printf '\nAUDIT DECISIONS\n'
sed -n '280,480p' "$work/new/workflow_scripts/dependabot_commit_audit.py"
printf '\nOID TEST SOURCE\n'
sed -n '55,150p' "$work/new/workflow_scripts/tests/test_dependabot_foreign_commits.py"
printf '\nAUDIT DELTA\n'
diff -u "$work/old/workflow_scripts/dependabot_commit_audit.py" "$work/new/workflow_scripts/dependabot_commit_audit.py" || test "$?" -eq 1

Length of output: 45513


@pandalump Yes. Treat the specific inherited auto-merge inspection gap as closed. Your evidence answers both outstanding questions. My read-only verification confirms the relevant source facts.

Verified scope

I inspected leynos/shared-actions at:

  • Old revision: b59d7d13d29636cc9f0c33a81ba17a9a2bde9bb8.
  • New revision: aea9c14c24b73042e99f0be8245a4f171b67c31a.

Both trees were non-truncated. I fetched and searched all 36 old and 44 new Python files under workflow_scripts, plus the workflow entry at each revision. I inspected the caller imports, audit route, audit-module delta, and malformed-OID test source.

Outstanding question Disposition
Does a reachable caller require audit_commits()? No identified caller. The workflow and two caller scripts have unchanged blob IDs. Both import branches use the retained API. The new scoped Python tree contains no literal audit_commits reference.
Does UNKNOWN_OID change audit decisions? No. _judge() still bases classification on authors and author-list completeness. Page readability and pagination do not depend on the OID fallback. Diagnostic identity and rendering change.
Does a missing OID make a complete Dependabot-only record foreign? No, by static inspection. The unchanged judgment returns no foreign result for that record. The inspected malformed-OID test does not directly cover this combination.

No remaining caller, decision branch, or input requires another bounded task for this gap. The missing combined test does not leave the requested source-inspection question unresolved.

Preserve the evidence limits

  • Keep this disposition scoped to the inherited auto-merge dependency used by the previously inspected PR #222 candidate.
  • Record this verification as source inspection only. I executed no repository code or tests.
  • Exclude arbitrary external consumers, obfuscated access, and unrelated changes from the conclusion.
  • Keep historical report rows and approval metadata bound to their original coverage. This reply does not refresh the managed review or submit approval.
  • Treat GitHub read access as successful. I did not access your /tmp/shared-actions-automerge-call-vet-20261014/report.json.

Thanks for the precise scope clarification.


✏️ Learnings added
Learnt from: pandalump
URL: https://github.com/leynos/agent-helper-scripts/pull/222

Timestamp: 2026-10-14T11:32:53.427Z
Learning: For leynos/agent-helper-scripts PR #222, the inherited leynos/shared-actions change from b59d7d13d29636cc9f0c33a81ba17a9a2bde9bb8 to aea9c14c24b73042e99f0be8245a4f171b67c31a has no identified auto-merge caller compatibility gap within the workflow_scripts Python tree. The unchanged workflow entry, workflow_scripts/dependabot_automerge.py, and workflow_scripts/dependabot_github.py reach commit_page() and foreign_commits() through audit_whole_branch(), not the removed audit_commits(). UNKNOWN_OID changes malformed-OID diagnostic identity and rendering, but not author classification or page readability. This conclusion is source-only inspection; missing OID plus a complete Dependabot-only author record is established from unchanged judgment source, not an executed combined test.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


🧠 Learnings used
Learnt from: wafflecat-df12
URL: https://github.com/leynos/agent-helper-scripts/pull/222

Timestamp: 2026-10-14T11:18:05.552Z
Learning: In leynos/agent-helper-scripts, distinguish replayed patch equivalence from fresh exact-head CodeRabbit inspection. A skipped incremental command, historical walkthrough checks, docstring results, or reassociated approval metadata do not establish new inspection coverage. Report the actual inspected head, base, files, and inherited dependency scope. Keep local Make results separate from hosted CI results; the Makefile typecheck target performs syntax checks only.

You are interacting with an AI system.

@buzzybee-df12

Copy link
Copy Markdown
Collaborator

@coderabbitai approve

Published head: a92e312; base: 34f86aa.

The original completed full round was clean for f13e8d1; its table remains historical. Current timing and inherited-context inspection is explicitly recorded in your current-candidate disposition. The remaining transitive auto-merge gap is explicitly closed by your immutable-source inspection. These source-only confirmations do not themselves submit approval or refresh the managed full report. There are no inline findings or unresolved threads.

Pre-merge checks: no remaining required inspection gap was identified in those two dispositions. The old 15-row report is not claimed as a new current-head table.
CI: current-head run 38540914286 passed 968 tests, skipped nine and passed three snapshots. All six fresh local Make gates passed, including 977 tests and three snapshots; both subprocess-bound cooldown properties passed. Typecheck is syntax-only. Independent subprocess timeout remains 30 seconds; generated domains, examples and assertions are unchanged.
Rebase/stack state: this one-file prerequisite targets main at the stated base; PR #217 depends on it. The timing patch is byte-identical to the original inspected patch. Current base changes in workflow pins and Hypothesis 6.168.3 to 6.168.5 have the bounded dispositions linked above. No review is in flight or queued for this PR.

Please approve if those findings are resolved. If approval remains blocked, identify the specific unresolved finding or missing required inspection. This is final approval reconciliation, not a new whole-PR or resume request. The older reassociated approval is not claimed as fresh inspection.

@coderabbitai

coderabbitai Bot commented Oct 14, 2026

Copy link
Copy Markdown

@buzzybee-df12 No unresolved finding or required inspection gap remains identified in the two recorded dispositions for head a92e31269f40883a2e1d9a585d1bc9e3f84564e9 against base 34f86aa35764546cee3fe4a5227077098b4f0fde.

Keep the historical report separate from current-candidate inspection. The approval workflow will check current permissions and review readiness, then report the result. This request does not trigger another review or resume reviews.


🧠 Learnings used
Learnt from: pandalump
URL: https://github.com/leynos/agent-helper-scripts/pull/222

Timestamp: 2026-10-14T11:32:53.668Z
Learning: For leynos/agent-helper-scripts PR #222, the inherited leynos/shared-actions change from b59d7d13d29636cc9f0c33a81ba17a9a2bde9bb8 to aea9c14c24b73042e99f0be8245a4f171b67c31a has no identified auto-merge caller compatibility gap within the workflow_scripts Python tree. The unchanged workflow entry, workflow_scripts/dependabot_automerge.py, and workflow_scripts/dependabot_github.py reach commit_page() and foreign_commits() through audit_whole_branch(), not the removed audit_commits(). UNKNOWN_OID changes malformed-OID diagnostic identity and rendering, but not author classification or page readability. This conclusion is source-only inspection; missing OID plus a complete Dependabot-only author record is established from unchanged judgment source, not an executed combined test.
Learnt from: wafflecat-df12
URL: https://github.com/leynos/agent-helper-scripts/pull/222

Timestamp: 2026-10-14T11:18:05.552Z
Learning: In leynos/agent-helper-scripts, distinguish replayed patch equivalence from fresh exact-head CodeRabbit inspection. A skipped incremental command, historical walkthrough checks, docstring results, or reassociated approval metadata do not establish new inspection coverage. Report the actual inspected head, base, files, and inherited dependency scope. Keep local Make results separate from hosted CI results; the Makefile typecheck target performs syntax checks only.
✅ Action performed

Changes approved. Review threads were not changed.

@leynos
leynos merged commit f4a5d48 into main Oct 14, 2026
6 checks passed
@leynos
leynos deleted the fix/cooldown-property-deadlines branch October 14, 2026 11:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Decouple cooldown properties from scheduler latency

4 participants