fix(conftest): add missing timedelta import, harden test fixtures (F8) - #50
ImmortalDemonGod wants to merge 17 commits into
Conversation
…run-to-run variation
…aim to remove E010 trigger word Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Warning Review limit reached
More reviews will be available in 44 minutes and 37 seconds. Learn how PR review limits work. Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file). ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits. 🚦 How do rate limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (13)
WalkthroughUpdates Changesconftest.py Fixture Fixes and Regression Tests
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related issues
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Codecov Report✅ All modified and coverable lines are covered by tests. @@ Coverage Diff @@
## main #50 +/- ##
=======================================
Coverage 93.24% 93.24%
=======================================
Files 24 24
Lines 2133 2133
=======================================
Hits 1989 1989
Misses 144 144
🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Actionable comments posted: 6
🧹 Nitpick comments (1)
tests/conftest.py (1)
112-120: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winUpdate the fixture docstrings to match dynamic UUIDs.
These docstrings still promise fixed UUID literals, but the fixtures now generate fresh UUIDv4 values. That can mislead tests that rely on the fixture contract.
Proposed docstring adjustment
- Card: A Card pre-populated with uuid "11111111-1111-1111-1111-111111111111", deck name "Deck A::Sub1", front "Sample Front", back "Sample Back", tags {"tag1", "tag2"}, and UTC added/modified timestamps of 2023-01-01 10:00:00. + Card: A Card pre-populated with a freshly generated UUIDv4, deck name "Deck A::Sub1", front "Sample Front", back "Sample Back", tags {"tag1", "tag2"}, and UTC added/modified timestamps of 2023-01-01 10:00:00. @@ - Card: A Card with uuid "22222222-2222-2222-2222-222222222222", deck_name "Deck A::Sub1", front "Another Front", back "Another Back", tags {"tag1"}, and both added_at and modified_at set to 2023-01-02 10:00 UTC. + Card: A Card with a freshly generated UUIDv4, deck_name "Deck A::Sub1", front "Another Front", back "Another Back", tags {"tag1"}, and both added_at and modified_at set to 2023-01-02 10:00 UTC. @@ - The card has UUID "33333333-3333-3333-333333333333", front text "Deck B Card Front", + The card has a freshly generated UUIDv4, front text "Deck B Card Front",Also applies to: 131-139, 150-161
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@tests/conftest.py` around lines 112 - 120, The fixture docstrings for sample_card1 and the other card fixtures still describe fixed UUID literals, but the Card objects are created with uuid.uuid4() so the UUID is dynamic. Update the docstrings in the fixture functions (e.g. sample_card1 and the related card fixture methods) to describe a fresh/generated UUIDv4 instead of a specific UUID value, while keeping the rest of the documented fields accurate.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/aiv-evidence/EVIDENCE_TESTS_CONFTEST.BUG_CATALOG.MD.md:
- Around line 62-63: The markdown at the end of the verdict summary is ambiguous
because the line with --- is being read as setext heading syntax instead of a
horizontal rule. Update the content around the verdict summary section so the
rule is separated by a blank line, keeping the heading-like text and the
horizontal rule distinct in EVIDENCE_TESTS_CONFTEST.BUG_CATALOG.MD.md.
In @.github/aiv-evidence/EVIDENCE_TESTS_CONFTEST.md:
- Around line 73-74: The verdict summary section is being parsed as a setext
heading because the `---` rule follows it immediately; update the Markdown
around the verdict summary in EVIDENCE_TESTS_CONFTEST.md to insert a blank line
before the horizontal rule so it is treated as a proper separator. Keep the
change localized near the verdict summary block and verify the surrounding
Markdown renders without triggering markdownlint MD003.
In @.github/aiv-evidence/EVIDENCE_TESTS_TEST_CONFTEST_REVIEW_FIXTURES.md:
- Around line 70-71: The markdown in
EVIDENCE_TESTS_TEST_CONFTEST_REVIEW_FIXTURES has a heading immediately followed
by the section divider, which triggers the MD003 setext-heading lint warning.
Update the affected heading/divider area by inserting a blank line before the
`---` separator so the section break is parsed correctly. Use the nearby
“Verdict summary” heading and the following divider as the anchors when
adjusting the formatting.
In @.github/aiv-packets/PACKET_flashcore_f8_tests.md:
- Line 7: The packet metadata is using the wrong repository identifier for this
change scope. Update the repository field in the flashcore test packet document
so it matches the flashcore-f8-tests provenance, and verify the packet’s
metadata stays consistent with the other identifiers in the same document. Use
the packet filename and the Repository entry to locate the value that needs to
be corrected.
- Around line 85-93: Add a language identifier to the fenced code block to
satisfy MD040. Update the markdown fence in the PACKET_flashcore_f8_tests
document so the block containing the git log output is tagged with an
appropriate language (for example, shell) while keeping the existing content
unchanged. Use the fenced block starting around the git log snippet as the
target.
In `@tests/test_conftest_review_fixtures.py`:
- Around line 79-92: The current test does not verify teardown behavior because
it only checks that sys.path is non-empty during execution. Update
test_go_to_tmpdir_does_not_leak_path_after_teardown to explicitly observe the
post-teardown state for the go_to_tmpdir fixture, using a teardown-aware pytest
check or equivalent setup/cleanup pattern, and assert that the tmpdir entry is
removed from sys.path after the fixture finishes.
---
Nitpick comments:
In `@tests/conftest.py`:
- Around line 112-120: The fixture docstrings for sample_card1 and the other
card fixtures still describe fixed UUID literals, but the Card objects are
created with uuid.uuid4() so the UUID is dynamic. Update the docstrings in the
fixture functions (e.g. sample_card1 and the related card fixture methods) to
describe a fresh/generated UUIDv4 instead of a specific UUID value, while
keeping the rest of the documented fields accurate.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: d68d64a2-f7c5-47f7-98d1-92e45dca6264
📒 Files selected for processing (9)
.github/aiv-evidence/EVIDENCE_TESTS_CONFTEST.BUG_CATALOG.MD.md.github/aiv-evidence/EVIDENCE_TESTS_CONFTEST.md.github/aiv-evidence/EVIDENCE_TESTS_TEST_CONFTEST_REVIEW_FIXTURES.md.github/aiv-packets/PACKET_flashcore_f8_impl.md.github/aiv-packets/PACKET_flashcore_f8_tests.md.gitignoretests/conftest.bug-catalog.mdtests/conftest.pytests/test_conftest_review_fixtures.py
| **Verdict summary:** 0 verified, 0 unverified, 3 manual review. | ||
| --- |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Fix markdown heading-style ambiguity before the horizontal rule.
Line 62 followed directly by --- on Line 63 is interpreted as setext heading style (MD003). Add a blank line before the rule.
Suggested patch
**Verdict summary:** 0 verified, 0 unverified, 3 manual review.
+
---📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| **Verdict summary:** 0 verified, 0 unverified, 3 manual review. | |
| --- | |
| **Verdict summary:** 0 verified, 0 unverified, 3 manual review. | |
| --- |
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 62-62: Heading style
Expected: atx; Actual: setext
(MD003, heading-style)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/aiv-evidence/EVIDENCE_TESTS_CONFTEST.BUG_CATALOG.MD.md around lines
62 - 63, The markdown at the end of the verdict summary is ambiguous because the
line with --- is being read as setext heading syntax instead of a horizontal
rule. Update the content around the verdict summary section so the rule is
separated by a blank line, keeping the heading-like text and the horizontal rule
distinct in EVIDENCE_TESTS_CONFTEST.BUG_CATALOG.MD.md.
Source: Linters/SAST tools
| **Verdict summary:** 0 verified, 0 unverified, 4 manual review. | ||
| --- |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Resolve markdownlint MD003 near the verdict summary.
Line 73 is directly followed by --- on Line 74, which is parsed as setext heading style. Insert a blank line before the rule.
Suggested patch
**Verdict summary:** 0 verified, 0 unverified, 4 manual review.
+
---📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| **Verdict summary:** 0 verified, 0 unverified, 4 manual review. | |
| --- | |
| **Verdict summary:** 0 verified, 0 unverified, 4 manual review. | |
| --- |
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 73-73: Heading style
Expected: atx; Actual: setext
(MD003, heading-style)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/aiv-evidence/EVIDENCE_TESTS_CONFTEST.md around lines 73 - 74, The
verdict summary section is being parsed as a setext heading because the `---`
rule follows it immediately; update the Markdown around the verdict summary in
EVIDENCE_TESTS_CONFTEST.md to insert a blank line before the horizontal rule so
it is treated as a proper separator. Keep the change localized near the verdict
summary block and verify the surrounding Markdown renders without triggering
markdownlint MD003.
Source: Linters/SAST tools
| ``` | ||
| git log --oneline tests/test_conftest_review_fixtures.py | head -5 | ||
| b90398d test(conftest): RED tests for F8 missing timedelta import in conftest.py fixtures | ||
| (new file, no prior history) | ||
|
|
||
| git log --oneline tests/conftest.bug-catalog.md | head -3 | ||
| 477d4c0 docs(tests): add conftest.py catalog for F8 missing-timedelta-import finding | ||
| (new file, no prior history) | ||
| ``` |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Add a language tag to the fenced code block (MD040).
The code fence starting on Line 85 should declare a language for markdownlint compliance.
Suggested patch
-```
+```shell
git log --oneline tests/test_conftest_review_fixtures.py | head -5
b90398d test(conftest): RED tests for F8 missing timedelta import in conftest.py fixtures
(new file, no prior history)
@@
git log --oneline tests/conftest.bug-catalog.md | head -3
477d4c0 docs(tests): add conftest.py catalog for F8 missing-timedelta-import finding
(new file, no prior history)</details>
<!-- suggestion_start -->
<details>
<summary>📝 Committable suggestion</summary>
> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
```suggestion
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 85-85: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/aiv-packets/PACKET_flashcore_f8_tests.md around lines 85 - 93, Add a
language identifier to the fenced code block to satisfy MD040. Update the
markdown fence in the PACKET_flashcore_f8_tests document so the block containing
the git log output is tagged with an appropriate language (for example, shell)
while keeping the existing content unchanged. Use the fenced block starting
around the git log snippet as the target.
Source: Linters/SAST tools
…le-scoped checker
…tions, correct repository field
eb063d5 to
ea5e67b
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/aiv-packets/evidence/flashcore-F8/class_c_negative.txt:
- Around line 11-28: The negative-search claim is too broad because the grep
results already show valid timedelta usages in other test modules, so the
evidence does not support “only appears in conftest.py and
test_conftest_review_fixtures.py.” Update the search/reporting logic in the
evidence block to either restrict the query to the specific files or symbols you
intend to validate, or rewrite the narrative to match the broader matches shown
by tests/test_review_manager.py and tests/test_db.py.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 2029b5fa-401c-4ec9-9ebe-936970b8bd11
📒 Files selected for processing (11)
.github/aiv-evidence/EVIDENCE_TESTS_TEST_CONFTEST_REVIEW_FIXTURES.md.github/aiv-packets/PACKET_flashcore_f8_crv1.md.github/aiv-packets/PACKET_flashcore_f8_impl.md.github/aiv-packets/PACKET_flashcore_f8_tests.md.github/aiv-packets/evidence/flashcore-F8/MANIFEST.md.github/aiv-packets/evidence/flashcore-F8/baseline_red.txt.github/aiv-packets/evidence/flashcore-F8/class_c_negative.txt.github/aiv-packets/evidence/flashcore-F8/head_full_suite.txt.github/aiv-packets/evidence/flashcore-F8/head_green.txt.github/aiv-packets/evidence/flashcore-F8/import_diff.txttests/test_conftest_review_fixtures.py
✅ Files skipped from review due to trivial changes (8)
- .github/aiv-packets/evidence/flashcore-F8/head_green.txt
- .github/aiv-packets/evidence/flashcore-F8/head_full_suite.txt
- .github/aiv-packets/evidence/flashcore-F8/baseline_red.txt
- .github/aiv-evidence/EVIDENCE_TESTS_TEST_CONFTEST_REVIEW_FIXTURES.md
- .github/aiv-packets/evidence/flashcore-F8/MANIFEST.md
- .github/aiv-packets/evidence/flashcore-F8/import_diff.txt
- .github/aiv-packets/PACKET_flashcore_f8_impl.md
- .github/aiv-packets/PACKET_flashcore_f8_tests.md
🚧 Files skipped from review as they are similar to previous changes (1)
- tests/test_conftest_review_fixtures.py
|
Note: The commits say written by Claude but they were written by DeepSeek V4 Pro |
Independent code-quality reviewCode authored by deepseek-v4-pro via the OpenRouter fix-pipeline. Reviewed against the actual diff, not the packet's self-assessment. Verdict: the core fix is solid, but one change introduces a new defect — please fix before merge. ✅ ✅
Generated by Claude Code |
AIV Verification Packet (v2.2)
Identification
fix/flashcore-F8db06ce6,e195ae7,1c52721ea5e67bfb1ae5a(origin/main merge-base)aiv/flashcore-F8(see Provenance Anchor)Provenance Anchor
A rebase-merge into
mainrewrites the branch commit SHAs, which would leaveevery SHA pinned in this packet (
ea5e67b,db06ce6,e195ae7,1c52721,fb1ae5a) dangling. To preserve chain-of-custody, the pinned commits arecaptured under the durable git tag
aiv/flashcore-F8, created at SPINECOMPLETE. After merge, a reviewer can still resolve every SHA cited here via:
Classification
Claim(s)
tests/conftest.py:6import tuple extended withtimedelta; the two fixture call sites (tests/conftest.py:187sample_review1,tests/conftest.py:209sample_review2_for_card1) now execute withoutNameError.pytest tests/ --collect-onlyexits 0 with noNameError/ImportErroronsample_review1orsample_review2_for_card1.go_to_tmpdirisolation fixture is extended with atry/finallyblock;sys.path.remove(str(tmpdir))is called on test exit, removing the tmpdir path inserted beforeyield.sys.pathaccumulation across consecutive tests is eliminated; each test's tmpdir path is removed on teardown.import uuidadded to theconftest.pyimport block; the three card fixtures (sample_card1,sample_card2,sample_card3_deck_b) updated to usestr(uuid.uuid4())for theuuidfield — producing distinct UUIDs on every run.tests/test_db.pyasserts against a conftest card fixture UUID literal.Evidence
.github/aiv-evidence/EVIDENCE_TESTS_CONFTEST.mddb06ce6.github/aiv-evidence/EVIDENCE_TESTS_CONFTEST.mde195ae7.github/aiv-evidence/EVIDENCE_TESTS_CONFTEST.md1c52721.github/aiv-packets/evidence/flashcore-F8/(MANIFEST, baseline_red, head_green, head_full_suite, class_c_negative, import_diff)ea5e67bClass A (Execution Evidence)
pytestwas executed byaiv commitfor each functional commit; all three passed:db06ce6(timedelta import)NameErroronsample_review1/sample_review2_for_card1eliminatede195ae7(sys.path teardown)try/finallyteardown1c52721(uuid4 fixtures)uuid4()Baseline per CLAUDE.md (2026-03-22): 480 collected, 1 skipped. The post-change count (499 passed) reflects the RED regression tests added in
b90398d(tests/test_conftest_review_fixtures.py); all are now GREEN. Captured run logs are committed under.github/aiv-packets/evidence/flashcore-F8/(baseline_red.txt,head_green.txt,head_full_suite.txt).Acceptance gates (re-runnable, all exit 0):
Class B (Referential Evidence)
SHA-pinned line anchors for every changed location at head
ea5e67b:tests/conftest.py#L2db06ce6→1c52721import uuidaddedtests/conftest.py#L6db06ce6timedeltaadded to thefrom datetime importtupletests/conftest.py#L25-L34e195ae7try/finallyteardown added togo_to_tmpdir(sys.path.removeat L31)tests/conftest.py#L1201c52721sample_card1uuid field:str(uuid.uuid4())tests/conftest.py#L1391c52721sample_card2uuid field:str(uuid.uuid4())tests/conftest.py#L1611c52721sample_card3_deck_buuid field:str(uuid.uuid4())tests/conftest.py#L187,L209timedelta(days=5)/timedelta(days=10)call sites — now resolvabletests/test_conftest_review_fixtures.pydb06ce6,eb49527Reconciliation note: the audit cites the call sites as lines 182/203 against the base file; after
import uuidwas inserted at line 2 the file shifted by one line, so the live call sites are nowtests/conftest.py:187and:209and the import is at line 6. The token and semantics are unchanged.Class C (Negative Evidence)
Searched for and did not find:
grep -rn "timedelta" tests/— only the two call sites inconftest.py; no other conftest or test file supplies the name, so no second supplier makes this change redundant.grep -rn "sys.path.remove\|sys.path.pop" tests/(pre-change) — no result; the teardown was genuinely absent.tests/test_db.pycontains a string assertion against a conftest card fixture UUID literal (e.g."11111111-1111-1111-1111-111111111111") in an assertion context — confirmed across alltests/*.py; uuid4-ization is therefore safe. Captured inclass_c_negative.txt.find tests/ -name "conftest.py"— one file only; no shadow conftest in a subdirectory suppliestimedelta.Bug-catalog Skipped set: F1–F7, F9–F25 are out of scope for this PR; each maps to its own pipeline entry per the finding-per-PR policy.
Class D (Differential Evidence)
ruffandmypywere run on each commit.mypyreported 3 errors in 1 pre-existing source file unrelated totests/conftest.py;rufferrors were likewise pre-existing. Both were present on the base SHAfb1ae5aand are unchanged across all three functional commits. The three changes in this PR (import extension, fixture teardown, uuid4 fixture values) introduce no new lint or type errors. Seeimport_diff.txtfor the before/after of the import change.Class E (Intent Alignment)
Canonical source:
flashcore/audit/02-static-audit.md
Line 18 in fb1ae5a
Audit record (read 2026-06-24, SHA
fb1ae5a): Line 18 ofaudit/02-static-audit.mdrecords finding F8:Alignment assessment (read against
git diff origin/main..HEAD): The audit names a single missing token (timedelta) in theconftest.pyimport tuple as the root cause of aNameErrorthat blocks any test requestingsample_review1orsample_review2_for_card1. The verification GOAL extends this to three clauses: (1) collection with no import error, (2) fixtures producing distinct UUIDs across runs, (3) nosys.pathside effects leaking between tests. The diff addresses all three at the root cause, not the symptom:timedeltais added to thefrom datetime importtuple — the exact token named in the finding. The diff showsfrom datetime import date, datetime, timezone→from datetime import date, datetime, timedelta, timezone. The previously-unresolvabletimedelta(days=5)/timedelta(days=10)call sites now resolve.go_to_tmpdiris wrapped intry/finallysosys.path.remove(str(tmpdir))runs on teardown, eliminating cross-test path accumulation.uuidfield from a constant literal tostr(uuid.uuid4()), giving run-to-run variation.The change adds no scope beyond what the audit finding and GOAL clauses require.
Class F (Provenance Evidence)
Git chain-of-custody for the touched test files is contained entirely within branch
fix/flashcore-F8:tests/test_conftest_review_fixtures.pywas first committed as RED tests inb90398d; the assertion inverting the bug-present state to the post-repair state landed indb06ce6; the module-scoped sys.path cleanup checker was strengthened ineb49527. The functional fix totests/conftest.pyspansdb06ce6(import),e195ae7(teardown),1c52721(uuid4). All pinned SHAs are preserved under the durable tagaiv/flashcore-F8per the Provenance Anchor.Verification Methodology
Zero-Touch Mandate. The verifier inspects committed artifacts only — no check needs to be re-run for adjudication. Per-commit evidence was collected by
aiv commitduring the change lifecycle; suite-level run logs and the negative-evidence/import-diff captures are committed under.github/aiv-packets/evidence/flashcore-F8/. The acceptance gates in Class A are provided for independent re-execution but are not required for the human merge decision.Summary
Finding F8 (low, missing-import):
tests/conftest.pyusedtimedelta(...)in thesample_review1andsample_review2_for_card1fixtures without importing it, raisingNameErrorfor any test requesting them. This change addstimedeltato the datetime import (the root-cause fix) and, per the verification GOAL, also hardens the test harness:go_to_tmpdirnow removes its tmpdir fromsys.pathon teardown (no cross-test leakage), and the three card fixtures emitstr(uuid.uuid4())for run-to-run UUID variation. Scope istests/conftest.pyplus its dedicated regression testtests/test_conftest_review_fixtures.py; no production code is touched. 499 tests pass across all three functional commits. Headea5e67b; all pinned SHAs preserved under tagaiv/flashcore-F8.Summary by CodeRabbit
Bug Fixes
Tests