Revise PR #291: The headline field of this card is dead on the real ingest path, and the test suite cannot see it. - #307
Revise PR #291: The headline field of this card is dead on the real ingest path, and the test suite cannot see it.#307jaylfc wants to merge 1 commit into
Conversation
…291) BLOCKER 1: _format_hit now reads doc_id, version, and review_by from the inner user-metadata dict (where ingest_folder stores them), not from the outer envelope where they were never present on a real hit. The three new tests built a metadata shape ingest_folder did not produce; the tests now use hits that match the real double-wrapped envelope. BLOCKER 2: Replaced the bare assert in the request path with an explicit if plus logging.warning. The assert was stripped under -O and converted metadata-shape anomalies into 500 errors instead of a degraded result. Also guarded the new metadata mutation with isinstance(user_md, dict) so non-dict metadata degrades to {} instead of raising TypeError, matching master defensive behavior. BLOCKER 3: is_current is now derived from the presence of hidden_by on the outer envelope, so superseded/history rows are False while current rows remain True. DEFECT 4: Added _parse_front_matter unit tests and end-to-end tests covering front-matter surviving ingest_folder to search to _format_hit. DEFECT 5: version is always int or absent (non-int values dropped at parse time); as_of is always float (coerced at the boundary); review_by is validated as an ISO date before storage. DEFECT 6: front-matter parsing now supports both .md and .markdown extensions (matching _loader_for); thematic-break documents that open with --- are not scanned as front matter via a closing-delimiter line budget; unknown keys are always skipped. Full suite: 1420 passed, 12 skipped. Refs: PR #291, PR #295
|
ⓘ Qodo reviews are paused because your trial has ended. Ask your workspace admin to add credits to resume reviews. Manage billing |
|
Warning Review limit reached
Next review available in: 19 minutes Limit details: You’ve used all 1 included review currently available under your plan. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?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 reviews. How do review 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 refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (5)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
| text = Path(file_path).read_text(encoding="utf-8", errors="replace") | ||
| except OSError: | ||
| return {} | ||
| if not text.startswith("---\n"): |
There was a problem hiding this comment.
WARNING: text.startswith("---\n") fails for markdown files with Windows line endings (\r\n), causing front matter to be silently skipped.
The check requires the file to begin with exactly ---\n. A file that starts with ---\r\n (common on Windows) does not match, so _parse_front_matter returns {} and the document's doc_id, version, and review_by are never extracted. Since splitlines(keepends=True) handles \r\n correctly, only this initial guard is wrong.
Consider normalizing line endings before the check, e.g. text = text.replace("\r\n", "\n"), or matching both ---\n and ---\r\n.
Reply with @kilocode-bot fix it to have Kilo Code address this issue.
Code Review SummaryStatus: 1 Issue Found | Recommendation: Address before merge Overview
Issue Details (click to expand)WARNING
Files Reviewed (5 files)
Fix these issues in Kilo Cloud Reviewed by step-3.7-flash · Input: 129.6K · Output: 32K · Cached: 555K |
BLOCKED on 1. The fix for DEFECT 5 reintroduces the exact failure class BLOCKER 2 was raised about: an unguarded coercion on the search request path.Reviewed against card First, what this PR actually got right. Do not re-do any of it.BLOCKER 1 is genuinely discharged, end to end, on the real shape. This was the headline defect and the fix is correct. Real Same command against master as the control, where the field is absent entirely: Reading the doc keys off BLOCKER 2 is discharged. The BLOCKER 3 is discharged. A superseded row no longer contradicts itself: DEFECT 6 is discharged for the case that was filed. The document that opens with a thematic break now yields THE BLOCKER:
|
…of/review_by coercion guards forward with tests (#347) Revision of the closed #312. All three blockers from tsk-agi5ph resolved, both non-blocking items addressed, and the tests verified red-first rather than taken on the body's word. RED FIRST, this PR's test files run UNCHANGED against #307 (swap proven by md5 first: test_api.py d2736eae and test_collections_ingest.py c5787bc1 identical on both sides; api.py ce0ac0e0 (#307) vs ccc68390 (#347) genuinely differs): the card's five-case table, on #307: FAILED coerce_iso_string_timestamp_returns_hits ValueError FAILED coerce_int_review_by_returns_hits TypeError '<' int/str FAILED coerce_list_review_by_returns_hits TypeError '<' list/str coerce_str_review_by_overdue_is_past_review passed coerce_plain_metadata_returns_hits passed 3 failed, 2 passed -- failure-for-failure identical to the card's prediction all six coercion tests on #307: 4 failed, 2 passed -- exactly the body's "4 of 6" claim BLOCKER 2, the dropped producer, restored rather than rebuilt: taosmd/collections.py is byte-identical to #307 (md5 744af0bb on both). The producer is genuinely absent on master -- the end-to-end test cannot even import there (ImportError: cannot import name '_parse_front_matter'), so it discriminates. indexed_at is written at collections.py:909. The PR body states the chosen direction explicitly, as acceptance required. BLOCKER 3: the false UnboundLocalError changelog entry is gone; replacement fragment ends 0x0a. Guards are now symmetric (api.py:486 as_of, api.py:494 review_by). Gates clean (deleted-symbols, normalise-handle, witness), no conflict markers, no Removes-Intentionally trailer. Suite 1617 passed, 12 skipped -- reconciles as the post-#351 baseline 1591 + the 26 tests added. The card's bar was >1435. STATED LIMITATIONS. - test_search_hit_metadata_always_has_doc_currency_fields PASSES on #307 too. It is a valid output-shape contract guard but is NOT evidence anything was fixed; the discriminating tests are the four coercion cases. - The red-first baseline is #307, not master: against master these tests cannot import at all, so master is useless as a red baseline for the producer half. - The PR body reports no suite count, which the card's acceptance asked for in as many words. Ran it here rather than bounce correct work. This is the sixth PR in that pattern (#340, #341, #345, #346, #348, #347) and is worth fixing at the source. - api.py:498 builds is_past_review in a 110-character expression. No line-length rule exists in the repo, so style only; no change requested.
CARD TITLE (intent, not commit subject): Revise PR #291: The headline field of this card is dead on the real ingest path, and the test suite cannot see it.
Autonomous build of board card tsk-x6ph7n.
BLOCKER 1: _format_hit now reads doc_id, version, and review_by from the
inner user-metadata dict (where ingest_folder stores them), not from the
outer envelope where they were never present on a real hit. The three
new tests built a metadata shape ingest_folder did not produce; the tests
now use hits that match the real double-wrapped envelope.
BLOCKER 2: Replaced the bare assert in the request path with an explicit
if plus logging.warning. The assert was stripped under -O and converted
metadata-shape anomalies into 500 errors instead of a degraded result.
Also guarded the new metadata mutation with isinstance(user_md, dict) so
non-dict metadata degrades to {} instead of raising TypeError, matching
master defensive behavior.
BLOCKER 3: is_current is now derived from the presence of hidden_by on the
outer envelope, so superseded/history rows are False while current rows
remain True.
DEFECT 4: Added _parse_front_matter unit tests and end-to-end tests
covering front-matter surviving ingest_folder to search to _format_hit.
DEFECT 5: version is always int or absent (non-int values dropped at
parse time); as_of is always float (coerced at the boundary); review_by
is validated as an ISO date before storage.
DEFECT 6: front-matter parsing now supports both .md and .markdown
extensions (matching _loader_for); thematic-break documents that open
with --- are not scanned as front matter via a closing-delimiter line
budget; unknown keys are always skipped.
Full suite: 1420 passed, 12 skipped.
Refs: PR #291, PR #295
Files:
changelog.d/tsk-x6ph7n-collection-doc-currency.md | 2 +
taosmd/api.py | 36 ++++++
taosmd/collections.py | 97 +++++++++++++-
tests/test_api.py | 136 +++++++++++++++++++-
tests/test_collections_ingest.py | 150 ++++++++++++++++++++++
5 files changed, 413 insertions(+), 8 deletions(-)