The BankPulse Correction Log
Every time our own audit process finds something wrong on the live site -- a bad date, a broken chronology, an overclaimed trust statement, a stale badge -- and fixes it, the fix is recorded here automatically. This list is not curated or filtered for a good impression: it pulls directly and mechanically from our internal audit ledger. Nothing is typed in by hand, and nothing is left out.
84 fix(es) recorded to date. This log covers fixes our own automated audit process caught and closed; it does not yet track whether individual affected readers were separately notified for each one -- that is an open item, not something we claim is done.
2026-07-10 · severity S2
Systemic sweep: 55 chronologically-impossible circular 'amends/supersedes' relation pairs found and removed sitewide (well beyond the 4 individually-flagged findings)
Evidence: Full list of 55 bad pairs logged in this run's AUTOPILOT_LEDGER.md entry for Task 11 -- includes e.g. (rbi-2009-10-79, rbi-2010-11-20), (rbi-2013-14-3, rbi-2026-27-10), (rbi-2025-26-58, rbi-2020-21-111), and 52 others.
Fix applied: TASK11 FIXED (10 Jul 2026): Confirmed genuinely impossible -- rbi-2004-05-296 (a 2004 PPF-scheme circular) claimed to 'Amend' rbi-2013-14-244 (a 2013 BC/CIT cash-distribution circular), which cannot be true (an earlier document cannot amend a later one). Root cause: the lineage/relationship engine's LLM candidate-matching (deepseek/deepseek-chat) occasionally produces a wrong match, and its auto-generated 'inverse edge' propagates the same error to the other side of the
2026-07-10 · severity S2
Bare 'under verification' AI placeholder shown verbatim as a full FAQ answer (reader- and Google-facing)
Evidence: rbi-doc-63106: FAQ answer text was the literal string 'under verification' with zero elaboration, both in the visible <p> and in the page's FAQPage JSON-LD schema.
Fix applied: TASK9 FIX (10 Jul 2026): Added _faq_is_stub() helper to publisher.py (before _lineage_extras) and used it to filter both the on-page FAQ HTML and the FAQPage JSON-LD in render_circular() -- any FAQ entry whose answer is a bare 'under verification'/'tbd'/'to be determined' placeholder is now dropped entirely rather than shown to readers or search engines. Hedged sentences that merely mention verification (e.g. 'exact penalty under verification, not specified in
2026-07-10 · severity S2
Hardcoded 'three-model AI consensus' trust claim persisted on many hub pages after Task 3's fix (Task 3 only touched the circular-page footer and /reviewers/; missed the shared 'short version' trust-strip reused across ~19 call sites)
Evidence: /latest/, /answers/, /dashboards/, /glossary/, /verified/, /aeo/ all hardcoded 'three-model' though the live reviewer.py pipeline only runs 2 models (see Task 3 resolution).
Fix applied: TASK9 FIX (10 Jul 2026): Replaced all 19 literal 'three-model' occurrences in publisher.py's shared trust-strip and page copy with the real, data-driven N_MODELS (established in Task 3). Also patched 5 standalone hub-page generator scripts that carried their own copy of the same hardcoded text: aeo_page.py, answers_hub.py, dashboards_index.py, glossary.py, factcheck_page.py (each now imports N_MODELS from publisher, with a safe fallback of 2 if the import ever fails). Verified liv
2026-07-08 · severity S2
withdrawal-status date older than decoded/publish date (violates daily refresh expectation)
Evidence: Withdrawn: 2025-02-07 · Decoded by BankPulse: 19 Jun 2026, 05:26 IST
Fix applied: TASK8 FIXED (10 Jul 2026): Root-caused and fixed at the source. publisher.py's _lineage_extras() built the "Regulatory timeline" list in a FIXED append order (Decoded-by-BankPulse always first, Status-change always last) rather than chronological order. Since BankPulse only started decoding circulars in 2026, its own internal processing timestamp ("Decoded by BankPulse") almost always sits after older, real regulatory dates (withdrawal effective dates, relation dates) lo
2026-07-08 · severity S1
Circular shown as later amended by an older circular (2021-22-143) after being superseded, which is chronologically impossible
Evidence: Later amended by — rbi-2021-22-143 06 Jul 2026, 01:21 IST
Fix applied: TASK11 FIXED (10 Jul 2026): Confirmed genuinely impossible -- rbi-2004-05-296 (a 2004 PPF-scheme circular) claimed to 'Amend' rbi-2013-14-244 (a 2013 BC/CIT cash-distribution circular), which cannot be true (an earlier document cannot amend a later one). Root cause: the lineage/relationship engine's LLM candidate-matching (deepseek/deepseek-chat) occasionally produces a wrong match, and its auto-generated 'inverse edge' propagates the same error to the other side of the
2026-07-08 · severity S2
withdrawal-status date older than decode/publish date
Evidence: Withdrawn: w.e.f. 04 Dec 2025 · Decoded by BankPulse: 20 Jun 2026, 05:09 IST
Fix applied: TASK8 FIXED (10 Jul 2026): Root-caused and fixed at the source. publisher.py's _lineage_extras() built the "Regulatory timeline" list in a FIXED append order (Decoded-by-BankPulse always first, Status-change always last) rather than chronological order. Since BankPulse only started decoding circulars in 2026, its own internal processing timestamp ("Decoded by BankPulse") almost always sits after older, real regulatory dates (withdrawal effective dates, relation dates) lo
2026-07-08 · severity S3
Withdrawal-status date older than decode/publish date
Evidence: Withdrawn: w.e.f. 04 Dec 2025 · Decoded by BankPulse: 20 Jun 2026, 14:46 IST
Fix applied: TASK8 FIXED (10 Jul 2026): Root-caused and fixed at the source. publisher.py's _lineage_extras() built the "Regulatory timeline" list in a FIXED append order (Decoded-by-BankPulse always first, Status-change always last) rather than chronological order. Since BankPulse only started decoding circulars in 2026, its own internal processing timestamp ("Decoded by BankPulse") almost always sits after older, real regulatory dates (withdrawal effective dates, relation dates) lo
2026-07-08 · severity S2
withdrawal-status date older than decode date
Evidence: Withdrawn: w.e.f. 04 Dec 2025 · Decoded by BankPulse: 20 Jun 2026, 14:06 IST
Fix applied: TASK8 FIXED (10 Jul 2026): Root-caused and fixed at the source. publisher.py's _lineage_extras() built the "Regulatory timeline" list in a FIXED append order (Decoded-by-BankPulse always first, Status-change always last) rather than chronological order. Since BankPulse only started decoding circulars in 2026, its own internal processing timestamp ("Decoded by BankPulse") almost always sits after older, real regulatory dates (withdrawal effective dates, relation dates) lo
2026-07-08 · severity S2
withdrawal status date older than decoded/publish date (expected daily refresh to be newer)
Evidence: Decoded by BankPulse: 21 Jun 2026, 02:54 IST ... Withdrawn: w.e.f. 04 Dec 2025
Fix applied: TASK8 FIXED (10 Jul 2026): Root-caused and fixed at the source. publisher.py's _lineage_extras() built the "Regulatory timeline" list in a FIXED append order (Decoded-by-BankPulse always first, Status-change always last) rather than chronological order. Since BankPulse only started decoding circulars in 2026, its own internal processing timestamp ("Decoded by BankPulse") almost always sits after older, real regulatory dates (withdrawal effective dates, relation dates) lo
2026-07-08 · severity S2
withdrawal-status date older than decoded/publish date
Evidence: Withdrawn: w.e.f. 04 Dec 2025 · Decoded by BankPulse: 21 Jun 2026, 09:10 IST
Fix applied: TASK8 FIXED (10 Jul 2026): Root-caused and fixed at the source. publisher.py's _lineage_extras() built the "Regulatory timeline" list in a FIXED append order (Decoded-by-BankPulse always first, Status-change always last) rather than chronological order. Since BankPulse only started decoding circulars in 2026, its own internal processing timestamp ("Decoded by BankPulse") almost always sits after older, real regulatory dates (withdrawal effective dates, relation dates) lo
2026-07-08 · severity S3
withdrawal status date older than decoded/publish date
Evidence: Withdrawn: w.e.f. 04 Dec 2025 · Decoded by BankPulse: 21 Jun 2026, 06:30 IST
Fix applied: TASK8 FIXED (10 Jul 2026): Root-caused and fixed at the source. publisher.py's _lineage_extras() built the "Regulatory timeline" list in a FIXED append order (Decoded-by-BankPulse always first, Status-change always last) rather than chronological order. Since BankPulse only started decoding circulars in 2026, its own internal processing timestamp ("Decoded by BankPulse") almost always sits after older, real regulatory dates (withdrawal effective dates, relation dates) lo
2026-07-08 · severity S3
withdrawal-status date in future relative to decode date with no re-verification
Evidence: No withdrawal recorded As of 09 Jul 2026. ... Decoded by BankPulse: 19 Jun 2026
Fix applied: TASK8 FIXED (10 Jul 2026): Root-caused and fixed at the source. publisher.py's _lineage_extras() built the "Regulatory timeline" list in a FIXED append order (Decoded-by-BankPulse always first, Status-change always last) rather than chronological order. Since BankPulse only started decoding circulars in 2026, its own internal processing timestamp ("Decoded by BankPulse") almost always sits after older, real regulatory dates (withdrawal effective dates, relation dates) lo
2026-07-08 · severity S2
future decode date after withdrawal date
Evidence: Decoded by BankPulse: 20 Jun 2026, 21:59 IST ... Withdrawn: w.e.f. 04 Dec 2025
Fix applied: TASK8 FIXED (10 Jul 2026): Root-caused and fixed at the source. publisher.py's _lineage_extras() built the "Regulatory timeline" list in a FIXED append order (Decoded-by-BankPulse always first, Status-change always last) rather than chronological order. Since BankPulse only started decoding circulars in 2026, its own internal processing timestamp ("Decoded by BankPulse") almost always sits after older, real regulatory dates (withdrawal effective dates, relation dates) lo
2026-07-08 · severity S3
Lineage 'Amends' timestamps (06 Jul 2026) are dated after the page's own 'Decoded by BankPulse' timestamp (19 Jun 2026), which is inconsistent for records that should predate or coincide with decoding.
Evidence: Decoded by BankPulse: 19 Jun 2026, 01:10 IST ... Amends — RBI's New Concentration Risk Management Directions for Banks 06 Jul 2026, 01:24 IST
Fix applied: TASK11 FIXED (10 Jul 2026): Confirmed genuinely impossible -- rbi-2004-05-296 (a 2004 PPF-scheme circular) claimed to 'Amend' rbi-2013-14-244 (a 2013 BC/CIT cash-distribution circular), which cannot be true (an earlier document cannot amend a later one). Root cause: the lineage/relationship engine's LLM candidate-matching (deepseek/deepseek-chat) occasionally produces a wrong match, and its auto-generated 'inverse edge' propagates the same error to the other side of the
2026-07-08 · severity S1
Circular dated 2012 shown as superseded by an earlier-numbered circular (2006-2007 series), which is chronologically impossible.
Evidence: Superseded by: rbi-2006-2007-265
Fix applied: TASK11 FIXED (10 Jul 2026): Confirmed genuinely impossible -- rbi-2004-05-296 (a 2004 PPF-scheme circular) claimed to 'Amend' rbi-2013-14-244 (a 2013 BC/CIT cash-distribution circular), which cannot be true (an earlier document cannot amend a later one). Root cause: the lineage/relationship engine's LLM candidate-matching (deepseek/deepseek-chat) occasionally produces a wrong match, and its auto-generated 'inverse edge' propagates the same error to the other side of the
2026-07-08 · severity S2
Contradictory applicability: page states RRBs are covered in one section but excludes them in another.
Evidence: Applies to Regional Rural Banks, Scheduled Commercial Banks ... Who it affects All Scheduled Commercial Banks (excluding RRBs), All India Financial Institutions
Fix applied: Verified already resolved (10 Jul 2026, Task 6): live spot-check of all 4 flagged pages shows a single, consistent "Who it affects" statement that clearly EXCLUDES RRBs (e.g. "All Scheduled Commercial Banks (excluding RRBs)...") with no contradicting chip/tag/metadata claiming RRB inclusion anywhere on the page. The applicability-tag taxonomy (_APPLIC_TAXONOMY in publisher.py) does not even have an RRB category, so no false RRB-included chip could be generated. No code change
2026-07-08 · severity S2
Regulatory timeline mislabels the BankPulse decode date as the RBI publish date, contradicting the stated RBI issue date of 27 Dec 2010.
Evidence: Published by RBI 20 Jun 2026, 11:25 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S3
Contradictory AI consensus model count
Evidence: AI-generated 1-model consensus ... 1 AI fact-check model(s) passed this summary ... AI-drafted · 3-model AI consensus fact-check
Fix applied: Real root cause found and fixed (10 Jul 2026, Task 3 of 20-task auditor-backlog run): every circular page footer hardcoded the literal text "1-model AI consensus fact-check" regardless of the real per-circular data, while /reviewers/ and the process-explanation page separately hardcoded "3-model"/"Three independent AI models" -- but reviewer.py's actual live MODELS list only runs 2 models (deepseek + gpt-oss-120b), not 3 as the docstring/copy claimed. Fixed by:
2026-07-08 · severity S2
Incorrect provenance attribution of publication date to RBI
Evidence: Regulatory timeline Published by RBI 19 Jun 2026, 18:38 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S2
Regulatory timeline mislabels the BankPulse decode timestamp as the RBI publish date, contradicting the 'Issued by RBI: 07 Aug 2013' date shown elsewhere on the page.
Evidence: Published by RBI 19 Jun 2026, 18:38 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S2
false attribution of RBI publication/withdrawal dates
Evidence: Regulatory timeline Published by RBI 20 Jun 2026, 12:23 IST Superseded by — Master Direction - Know Your Customer (KYC) Direction, 2016 05 Jul 2026, 22:43 IST Status change: superseded 2016-02-25
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S2
Regulatory timeline mislabels BankPulse's decode date as the RBI publish date, contradicting the actual issuance date stated elsewhere on the page.
Evidence: Regulatory timeline Published by RBI 19 Jun 2026, 16:36 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S2
false attribution of publish date to RBI
Evidence: Regulatory timeline Published by RBI 20 Jun 2026, 22:37 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S3
'Published by RBI' date in Regulatory timeline shows the decode date instead of actual RBI issue date (08 Oct 2008), contradicting the 'Issued by RBI: 08 Oct 2008' field elsewhere.
Evidence: Published by RBI 20 Jun 2026, 22:37 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S3
AI consensus count is contradictory: header says '1-model consensus' but footer says '3-model AI consensus fact-check'.
Evidence: AI-generated 1-model consensus ... AI-drafted · 3-model AI consensus fact-check
Fix applied: Real root cause found and fixed (10 Jul 2026, Task 3 of 20-task auditor-backlog run): every circular page footer hardcoded the literal text "1-model AI consensus fact-check" regardless of the real per-circular data, while /reviewers/ and the process-explanation page separately hardcoded "3-model"/"Three independent AI models" -- but reviewer.py's actual live MODELS list only runs 2 models (deepseek + gpt-oss-120b), not 3 as the docstring/copy claimed. Fixed by:
2026-07-08 · severity S2
Inconsistent withdrawal vs. publish dates
Evidence: Withdrawn: w.e.f. 04 Dec 2025 · Decoded by BankPulse: 19 Jun 2026, 07:26 IST
Fix applied: TASK8 FIXED (10 Jul 2026): Root-caused and fixed at the source. publisher.py's _lineage_extras() built the "Regulatory timeline" list in a FIXED append order (Decoded-by-BankPulse always first, Status-change always last) rather than chronological order. Since BankPulse only started decoding circulars in 2026, its own internal processing timestamp ("Decoded by BankPulse") almost always sits after older, real regulatory dates (withdrawal effective dates, relation dates) lo
2026-07-08 · severity S2
Regulatory timeline mislabels the BankPulse decode timestamp as the RBI publish date, contradicting the 'Issued by RBI: 13 Sep 2023' stated in the summary box.
Evidence: Published by RBI 19 Jun 2026, 07:26 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S3
Contradictory AI consensus model count on same page
Evidence: 1 AI fact-check model(s) passed this summary ... AI-generated 1-model consensus ... AI-drafted · 3-model AI consensus fact-check
Fix applied: Real root cause found and fixed (10 Jul 2026, Task 3 of 20-task auditor-backlog run): every circular page footer hardcoded the literal text "1-model AI consensus fact-check" regardless of the real per-circular data, while /reviewers/ and the process-explanation page separately hardcoded "3-model"/"Three independent AI models" -- but reviewer.py's actual live MODELS list only runs 2 models (deepseek + gpt-oss-120b), not 3 as the docstring/copy claimed. Fixed by:
2026-07-08 · severity S3
missing effective date
Evidence: Effective date Not stated in the circular
Fix applied: Verified already resolved (10 Jul 2026, Task 5): the underlying contradiction bug (field literally claiming "Effective date: not stated" while body/FAQ text on the same page states a real date) no longer exists on the live site. _provenance_block() now silently omits the Effective: line entirely when ent.get("effective_text") is empty, instead of rendering a false "not stated" claim -- this removes the contradiction (silence is not a lie) even though it does not rec
2026-07-08 · severity S2
1-model consensus stated in header but text elsewhere claims 3-model consensus
Evidence: 1-model consensus, ... AI-drafted · 3-model AI consensus fact-check
Fix applied: Real root cause found and fixed (10 Jul 2026, Task 3 of 20-task auditor-backlog run): every circular page footer hardcoded the literal text "1-model AI consensus fact-check" regardless of the real per-circular data, while /reviewers/ and the process-explanation page separately hardcoded "3-model"/"Three independent AI models" -- but reviewer.py's actual live MODELS list only runs 2 models (deepseek + gpt-oss-120b), not 3 as the docstring/copy claimed. Fixed by:
2026-07-08 · severity S2
Contradictory AI consensus model count
Evidence: AI-generated 1-model consensus ... 1 AI fact-check model(s) passed this summary ... AI-drafted · 3-model AI consensus fact-check
Fix applied: Real root cause found and fixed (10 Jul 2026, Task 3 of 20-task auditor-backlog run): every circular page footer hardcoded the literal text "1-model AI consensus fact-check" regardless of the real per-circular data, while /reviewers/ and the process-explanation page separately hardcoded "3-model"/"Three independent AI models" -- but reviewer.py's actual live MODELS list only runs 2 models (deepseek + gpt-oss-120b), not 3 as the docstring/copy claimed. Fixed by:
2026-07-08 · severity S2
Contradiction: effective date is claimed both as stated and unstated
Evidence: Effective date Not stated in the circular ... RBI has raised the overseas borrowing limit for AD Category-I banks from 50% to 100% of unimpaired Tier I capital or USD 10 million (whichever higher), effective immediately.
Fix applied: Verified already resolved (10 Jul 2026, Task 5): the underlying contradiction bug (field literally claiming "Effective date: not stated" while body/FAQ text on the same page states a real date) no longer exists on the live site. _provenance_block() now silently omits the Effective: line entirely when ent.get("effective_text") is empty, instead of rendering a false "not stated" claim -- this removes the contradiction (silence is not a lie) even though it does not rec
2026-07-08 · severity S2
Contradictory AI consensus model count
Evidence: AI-generated 1-model consensus ... 1 AI fact-check model(s) passed this summary ... AI-drafted · 3-model AI consensus fact-check
Fix applied: Real root cause found and fixed (10 Jul 2026, Task 3 of 20-task auditor-backlog run): every circular page footer hardcoded the literal text "1-model AI consensus fact-check" regardless of the real per-circular data, while /reviewers/ and the process-explanation page separately hardcoded "3-model"/"Three independent AI models" -- but reviewer.py's actual live MODELS list only runs 2 models (deepseek + gpt-oss-120b), not 3 as the docstring/copy claimed. Fixed by:
2026-07-08 · severity S2
inconsistent effective-date claim
Evidence: The amendment came into force with immediate effect from the date of the RBI notification, which is December 29, 2025.
Fix applied: Verified already resolved (10 Jul 2026, Task 5): the underlying contradiction bug (field literally claiming "Effective date: not stated" while body/FAQ text on the same page states a real date) no longer exists on the live site. _provenance_block() now silently omits the Effective: line entirely when ent.get("effective_text") is empty, instead of rendering a false "not stated" claim -- this removes the contradiction (silence is not a lie) even though it does not rec
2026-07-08 · severity S2
inconsistent effective-date claim
Evidence: Effective date Not stated in the circular
Fix applied: Verified already resolved (10 Jul 2026, Task 5): the underlying contradiction bug (field literally claiming "Effective date: not stated" while body/FAQ text on the same page states a real date) no longer exists on the live site. _provenance_block() now silently omits the Effective: line entirely when ent.get("effective_text") is empty, instead of rendering a false "not stated" claim -- this removes the contradiction (silence is not a lie) even though it does not rec
2026-07-08 · severity S2
Contradictory effective date: page states effective date is not stated, but FAQ claims immediate effect from 29 Dec 2025.
Evidence: Effective date Not stated in the circular ... The amendment came into force with immediate effect from the date of the RBI notification, which is December 29, 2025.
Fix applied: Verified already resolved (10 Jul 2026, Task 5): the underlying contradiction bug (field literally claiming "Effective date: not stated" while body/FAQ text on the same page states a real date) no longer exists on the live site. _provenance_block() now silently omits the Effective: line entirely when ent.get("effective_text") is empty, instead of rendering a false "not stated" claim -- this removes the contradiction (silence is not a lie) even though it does not rec
2026-07-08 · severity S2
Withdrawal status date older than decode/publish date, violating daily-refresh expectation
Evidence: Withdrawn: w.e.f. 04 Dec 2025 · Decoded by BankPulse: 19 Jun 2026, 23:56 IST
Fix applied: TASK8 FIXED (10 Jul 2026): Root-caused and fixed at the source. publisher.py's _lineage_extras() built the "Regulatory timeline" list in a FIXED append order (Decoded-by-BankPulse always first, Status-change always last) rather than chronological order. Since BankPulse only started decoding circulars in 2026, its own internal processing timestamp ("Decoded by BankPulse") almost always sits after older, real regulatory dates (withdrawal effective dates, relation dates) lo
2026-07-08 · severity S2
Regulatory timeline mislabels the BankPulse decode date as the RBI publish date, contradicting the 'Issued by RBI: 27 Sep 2012' date stated earlier on the same page.
Evidence: Regulatory timeline Published by RBI 19 Jun 2026, 23:56 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S3
misattributed publish date to RBI
Evidence: Regulatory timeline Published by RBI 20 Jun 2026, 23:18 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S2
Regulatory timeline mislabels the BankPulse decode date as the RBI publication date, implying RBI published this 2008-09 circular in 2026.
Evidence: Published by RBI 20 Jun 2026, 23:18 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S3
missing effective date
Evidence: Effective date Not stated in the circular
Fix applied: Verified already resolved (10 Jul 2026, Task 5): the underlying contradiction bug (field literally claiming "Effective date: not stated" while body/FAQ text on the same page states a real date) no longer exists on the live site. _provenance_block() now silently omits the Effective: line entirely when ent.get("effective_text") is empty, instead of rendering a false "not stated" claim -- this removes the contradiction (silence is not a lie) even though it does not rec
2026-07-08 · severity S3
withdrawal-status date older than decode/publish date
Evidence: Withdrawn: w.e.f. 04 Dec 2025 · Decoded by BankPulse: 20 Jun 2026, 01:02 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S3
Effective date marked missing while withdrawal effective date is asserted without source
Evidence: Effective date Not stated in the circular
Fix applied: Verified already resolved (10 Jul 2026, Task 5): the underlying contradiction bug (field literally claiming "Effective date: not stated" while body/FAQ text on the same page states a real date) no longer exists on the live site. _provenance_block() now silently omits the Effective: line entirely when ent.get("effective_text") is empty, instead of rendering a false "not stated" claim -- this removes the contradiction (silence is not a lie) even though it does not rec
2026-07-08 · severity S2
Regulatory timeline mislabels BankPulse's decode timestamp as the RBI publish date, contradicting the 'Issued by RBI: 01 Jul 2009' date stated elsewhere.
Evidence: Published by RBI 20 Jun 2026, 19:10 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S2
Circular relationship engine claims this 2004 PPF Scheme circular 'Amends' a circular about Business Correspondents (BCs) and CIT entities for cash distribution — a framework RBI introduced years later (BC guidelines from 2006 onward). This lineage is anachronistic and contradicts the subject matter.
Evidence: Amends: RBI Allows Banks to Use BCs and CIT Entities for Cash Distribution
Fix applied: TASK11 FIXED (10 Jul 2026): Confirmed genuinely impossible -- rbi-2004-05-296 (a 2004 PPF-scheme circular) claimed to 'Amend' rbi-2013-14-244 (a 2013 BC/CIT cash-distribution circular), which cannot be true (an earlier document cannot amend a later one). Root cause: the lineage/relationship engine's LLM candidate-matching (deepseek/deepseek-chat) occasionally produces a wrong match, and its auto-generated 'inverse edge' propagates the same error to the other side of the
2026-07-08 · severity S3
Contradictory AI model consensus count
Evidence: AI-generated 1-model consensus ... 1 AI fact-check model(s) passed this summary ... AI-drafted · 3-model AI consensus fact-check
Fix applied: Real root cause found and fixed (10 Jul 2026, Task 3 of 20-task auditor-backlog run): every circular page footer hardcoded the literal text "1-model AI consensus fact-check" regardless of the real per-circular data, while /reviewers/ and the process-explanation page separately hardcoded "3-model"/"Three independent AI models" -- but reviewer.py's actual live MODELS list only runs 2 models (deepseek + gpt-oss-120b), not 3 as the docstring/copy claimed. Fixed by:
2026-07-08 · severity S3
missing effective dates
Evidence: Effective date Not stated in the circular
Fix applied: Verified already resolved (10 Jul 2026, Task 5): the underlying contradiction bug (field literally claiming "Effective date: not stated" while body/FAQ text on the same page states a real date) no longer exists on the live site. _provenance_block() now silently omits the Effective: line entirely when ent.get("effective_text") is empty, instead of rendering a false "not stated" claim -- this removes the contradiction (silence is not a lie) even though it does not rec
2026-07-08 · severity S2
misattributed publish date to RBI
Evidence: Regulatory timeline Published by RBI 19 Jun 2026, 18:52 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S2
Regulatory timeline mislabels the BankPulse decode timestamp as the RBI publish date, contradicting the actual RBI issue date shown elsewhere on the page.
Evidence: Published by RBI 19 Jun 2026, 18:52 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S2
Regulatory timeline mislabels BankPulse's decode timestamp as the RBI publish date, contradicting the actual RBI issue date of 02 Jul 2012 stated elsewhere on the page.
Evidence: Published by RBI 20 Jun 2026, 01:32 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S3
Explicit effective date contradicts the 'not stated' field above
Evidence: starting October 11, 2013
Fix applied: Verified already resolved (10 Jul 2026, Task 5): the underlying contradiction bug (field literally claiming "Effective date: not stated" while body/FAQ text on the same page states a real date) no longer exists on the live site. _provenance_block() now silently omits the Effective: line entirely when ent.get("effective_text") is empty, instead of rendering a false "not stated" claim -- this removes the contradiction (silence is not a lie) even though it does not rec
2026-07-08 · severity S3
Effective date listed as not stated, but page repeatedly gives an explicit start date (Oct 11, 2013)
Evidence: Effective date Not stated in the circular
Fix applied: Verified already resolved (10 Jul 2026, Task 5): the underlying contradiction bug (field literally claiming "Effective date: not stated" while body/FAQ text on the same page states a real date) no longer exists on the live site. _provenance_block() now silently omits the Effective: line entirely when ent.get("effective_text") is empty, instead of rendering a false "not stated" claim -- this removes the contradiction (silence is not a lie) even though it does not rec
2026-07-08 · severity S2
Regulatory timeline mislabels BankPulse's decode timestamp as the RBI publish date, contradicting the correct RBI issue date stated elsewhere on the page.
Evidence: Published by RBI 19 Jun 2026, 17:01 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S2
Contradictory applicability: page states RRBs are covered, but FAQ/affected-parties section explicitly excludes RRBs.
Evidence: Applies to Regional Rural Banks, Scheduled Commercial Banks ... Who it affects All scheduled commercial banks (excluding RRBs and LABs)
Fix applied: Verified already resolved (10 Jul 2026, Task 6): live spot-check of all 4 flagged pages shows a single, consistent "Who it affects" statement that clearly EXCLUDES RRBs (e.g. "All Scheduled Commercial Banks (excluding RRBs)...") with no contradicting chip/tag/metadata claiming RRB inclusion anywhere on the page. The applicability-tag taxonomy (_APPLIC_TAXONOMY in publisher.py) does not even have an RRB category, so no false RRB-included chip could be generated. No code change
2026-07-08 · severity S1
Missing original circular issuance date/provenance
Evidence: Issued by RBI: FY 2006-20 · Withdrawn: w.e.f. 04 Dec 2025 · Decoded by BankPulse: 21 Jun 2026
Fix applied: TASK12 FIXED (10 Jul 2026): Root-caused. _rbi_issue_date() in publisher.py falls back to a 'FY <year-range>' label parsed from the circular's own ref string when no explicit issue date can be extracted from the title. Its regex was `((?:19|20)\d\d-\d\d)` -- exactly 2 digits after the dash -- but refs are stored in TWO different formats: 'RBI/2012-13/226' (2-digit second year) and 'RBI/2006-2007/442' (4-digit second year). For the 4-digit format the regex
2026-07-08 · severity S2
Regulatory timeline mislabels the decode date as an RBI publish date; circular is from FY2006-07 but shows 2026 as 'Published by RBI'
Evidence: Published by RBI 21 Jun 2026, 03:48 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S3
missing effective date
Evidence: Effective date Not stated in the circular
Fix applied: Verified already resolved (10 Jul 2026, Task 5): the underlying contradiction bug (field literally claiming "Effective date: not stated" while body/FAQ text on the same page states a real date) no longer exists on the live site. _provenance_block() now silently omits the Effective: line entirely when ent.get("effective_text") is empty, instead of rendering a false "not stated" claim -- this removes the contradiction (silence is not a lie) even though it does not rec
2026-07-08 · severity S2
Contradiction over whether RRBs are covered: header field says circular applies to Regional Rural Banks, but 'Who it affects' explicitly excludes RRBs.
Evidence: Applies to Regional Rural Banks, Scheduled Commercial Banks ... Who it affects All Scheduled Commercial Banks (excluding RRBs), Local Area Banks, All India Financial Institutions
Fix applied: Verified already resolved (10 Jul 2026, Task 6): live spot-check of all 4 flagged pages shows a single, consistent "Who it affects" statement that clearly EXCLUDES RRBs (e.g. "All Scheduled Commercial Banks (excluding RRBs)...") with no contradicting chip/tag/metadata claiming RRB inclusion anywhere on the page. The applicability-tag taxonomy (_APPLIC_TAXONOMY in publisher.py) does not even have an RRB category, so no false RRB-included chip could be generated. No code change
2026-07-08 · severity S2
false publication date attributed to RBI
Evidence: Regulatory timeline Published by RBI 19 Jun 2026, 05:32 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S2
Contradictory AI consensus model count
Evidence: AI-generated 1-model consensus ... 1 AI fact-check model(s) passed this summary ... AI-drafted · 3-model AI consensus fact-check
Fix applied: Real root cause found and fixed (10 Jul 2026, Task 3 of 20-task auditor-backlog run): every circular page footer hardcoded the literal text "1-model AI consensus fact-check" regardless of the real per-circular data, while /reviewers/ and the process-explanation page separately hardcoded "3-model"/"Three independent AI models" -- but reviewer.py's actual live MODELS list only runs 2 models (deepseek + gpt-oss-120b), not 3 as the docstring/copy claimed. Fixed by:
2026-07-08 · severity S2
'Published by RBI' date in timeline shows decode date, not actual issuance date
Evidence: Published by RBI 20 Jun 2026, 20:29 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S2
Contradictory AI consensus model count
Evidence: AI-generated 1-model consensus ... 1 AI fact-check model(s) passed this summary
Fix applied: Real root cause found and fixed (10 Jul 2026, Task 3 of 20-task auditor-backlog run): every circular page footer hardcoded the literal text "1-model AI consensus fact-check" regardless of the real per-circular data, while /reviewers/ and the process-explanation page separately hardcoded "3-model"/"Three independent AI models" -- but reviewer.py's actual live MODELS list only runs 2 models (deepseek + gpt-oss-120b), not 3 as the docstring/copy claimed. Fixed by:
2026-07-08 · severity S2
Contradictory AI consensus model count: confidence breakdown states 1-model consensus, footer states 3-model consensus
Evidence: 1 AI fact-check model(s) passed this summary +8 Consensus verdict: PASS ... AI-drafted · 3-model AI consensus fact-check
Fix applied: Real root cause found and fixed (10 Jul 2026, Task 3 of 20-task auditor-backlog run): every circular page footer hardcoded the literal text "1-model AI consensus fact-check" regardless of the real per-circular data, while /reviewers/ and the process-explanation page separately hardcoded "3-model"/"Three independent AI models" -- but reviewer.py's actual live MODELS list only runs 2 models (deepseek + gpt-oss-120b), not 3 as the docstring/copy claimed. Fixed by:
2026-07-08 · severity S3
missing effective date
Evidence: Effective date Not stated in the circular
Fix applied: Verified already resolved (10 Jul 2026, Task 5): the underlying contradiction bug (field literally claiming "Effective date: not stated" while body/FAQ text on the same page states a real date) no longer exists on the live site. _provenance_block() now silently omits the Effective: line entirely when ent.get("effective_text") is empty, instead of rendering a false "not stated" claim -- this removes the contradiction (silence is not a lie) even though it does not rec
2026-07-08 · severity S2
Contradictory AI model consensus count: header says 1-model, footer says 3-model.
Evidence: AI-generated 1-model consensus ... AI-drafted · 3-model AI consensus fact-check
Fix applied: Real root cause found and fixed (10 Jul 2026, Task 3 of 20-task auditor-backlog run): every circular page footer hardcoded the literal text "1-model AI consensus fact-check" regardless of the real per-circular data, while /reviewers/ and the process-explanation page separately hardcoded "3-model"/"Three independent AI models" -- but reviewer.py's actual live MODELS list only runs 2 models (deepseek + gpt-oss-120b), not 3 as the docstring/copy claimed. Fixed by:
2026-07-08 · severity S2
Contradictory applicability: top metadata includes RRBs, but body text and FAQ explicitly exclude RRBs.
Evidence: Applies to Regional Rural Banks, Scheduled Commercial Banks
Fix applied: Verified already resolved (10 Jul 2026, Task 6): live spot-check of all 4 flagged pages shows a single, consistent "Who it affects" statement that clearly EXCLUDES RRBs (e.g. "All Scheduled Commercial Banks (excluding RRBs)...") with no contradicting chip/tag/metadata claiming RRB inclusion anywhere on the page. The applicability-tag taxonomy (_APPLIC_TAXONOMY in publisher.py) does not even have an RRB category, so no false RRB-included chip could be generated. No code change
2026-07-08 · severity S2
false publication date attributed to RBI
Evidence: Published by RBI 20 Jun 2026, 18:26 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S2
Regulatory timeline mislabels the decode date as 'Published by RBI', misattributing BankPulse's own processing date to RBI's original publication.
Evidence: Published by RBI 20 Jun 2026, 18:26 IST
Fix applied: Verified already resolved on live site (10 Jul 2026, Task 2 of 20-task auditor-backlog run): _lineage_extras() in publisher.py correctly separates "Issued by RBI:" (real circular date, from rd/effective_text fields) from "Decoded by BankPulse" (d.get("published_at"), the processing timestamp) -- these are two distinct, correctly-labeled timeline entries, not one mislabeled entry. Spot-checked live on 6 of the specifically-flagged pages (rbi-2009-10-154, rbi-2006-200
2026-07-08 · severity S2
Effective date field contradicts the Quick answer/FAQ text elsewhere on the page.
Evidence: Effective date Not stated in the circular ... effective from a notification dated July 3, 2024, published in the Gazette of India.
Fix applied: Verified already resolved (10 Jul 2026, Task 5): the underlying contradiction bug (field literally claiming "Effective date: not stated" while body/FAQ text on the same page states a real date) no longer exists on the live site. _provenance_block() now silently omits the Effective: line entirely when ent.get("effective_text") is empty, instead of rendering a false "not stated" claim -- this removes the contradiction (silence is not a lie) even though it does not rec
2026-07-08 · severity S2
Effective date listed as not stated, contradicting the circular's own text that says the change is effective immediately for one year
Evidence: Effective date Not stated in the circular
Fix applied: Verified already resolved (10 Jul 2026, Task 5): the underlying contradiction bug (field literally claiming "Effective date: not stated" while body/FAQ text on the same page states a real date) no longer exists on the live site. _provenance_block() now silently omits the Effective: line entirely when ent.get("effective_text") is empty, instead of rendering a false "not stated" claim -- this removes the contradiction (silence is not a lie) even though it does not rec
2026-07-08 · severity S2
Missing official source links / circular provenance
Evidence: Official RBI source → RBI/2004-05/125 ,Ref RPCD.SP.BC.18/09.01.01/2004-05 dated 17 th August 2004.
Fix applied: Verified already resolved (10 Jul 2026, Task 4): live /withdrawals/ page shows real circular numbers (e.g. RBI/2004-05/187) in a dedicated column plus a real hyperlinked "Official RBI source ->" link per row. No fabrication involved -- this is genuine stored provenance data already wired up correctly.
2026-07-08 · severity S1
Future-dated source verification claims
Evidence: RBI source last checked: 09 Jul 2026, 03:01 IST · Latest RBI item found: Sectoral Deployment of Credit by NBFC – May 2026
Fix applied: VERIFIED FALSE ALARM -- no code change made. Two independent checks: (1) Timing check: the auditor flagged this at 2026-07-08T21:46:49 UTC, which is 2026-07-09 03:16 IST. The evidence quoted ('RBI source last checked: 09 Jul 2026, 03:01 IST') was therefore already ~15 minutes IN THE PAST at the moment it was flagged, not in the future -- the auditor's own math was wrong, likely from not accounting for IST being 5.5 hours ahead of UTC. (2) Mechanism check: the prior probe_notes gue
2026-07-08 · severity S3
malformed / missing effective dates on multiple listings
Evidence: MPA Recruitment of Deputy Director (Class I Post) 05-June-2026 06-Jul-2026
Fix applied: Verified already resolved (10 Jul 2026, Task 5): live /jobs/ deadline badges render correctly (e.g. "Deadline: 20 Jul 2026", "Closed" for expired) -- no malformed dates found in a live spot-check.
2026-07-08 · severity S2
missing provenance (no circular numbers, official source links, or exact posting URLs provided despite repeated 'official posting only' claims)
Evidence: Source: official posting only
Fix applied: Fixed (10 Jul 2026, Task 4): every job card already linked its title to the real official posting URL (data/jobs.json has a real "link" field per job), but the redundant caption below it literally said the unlinked text "Source: official posting only" -- confusing, matches the auditor complaint verbatim. Replaced with a real, visible "Official posting -> " hyperlink using the same real link field. Verified live: 42/42 job cards now show a real clickable source li
2026-07-08 · severity S3
Relative-date label incorrect: 25 Jun 2026 is 14 days prior (2 weeks), not '1 week ago'.
Evidence: 25 Jun 2026 1 week ago
Fix applied: TASK7 VERIFIED (10 Jul 2026): Re-tested _ageing() in publisher.py against real elapsed time on the live homepage today -- every sampled card (1-day-old, 8-10 day-old, etc) now shows the correct label, including the exact "14 days = 2 weeks ago" edge case which the current code handles explicitly (line: if days==14: return "2 weeks ago"). Root-caused the ORIGINAL mismatch: the 3 flagged instances (25 Jun/02 Jul/03 Jul) are all internally consistent with the labels having been
2026-07-08 · severity S3
Relative-date label inconsistent with actual date difference: 02 Jul 2026 is 7 days prior, not 6.
Evidence: 02 Jul 2026 6 days ago
Fix applied: TASK7 VERIFIED (10 Jul 2026): Re-tested _ageing() in publisher.py against real elapsed time on the live homepage today -- every sampled card (1-day-old, 8-10 day-old, etc) now shows the correct label, including the exact "14 days = 2 weeks ago" edge case which the current code handles explicitly (line: if days==14: return "2 weeks ago"). Root-caused the ORIGINAL mismatch: the 3 flagged instances (25 Jun/02 Jul/03 Jul) are all internally consistent with the labels having been
2026-07-05 · severity S3
missing issuance or effective date
Evidence: Issued by RBI: FY 2026-27
Fix applied: Verified already resolved (10 Jul 2026, Task 5): the underlying contradiction bug (field literally claiming "Effective date: not stated" while body/FAQ text on the same page states a real date) no longer exists on the live site. _provenance_block() now silently omits the Effective: line entirely when ent.get("effective_text") is empty, instead of rendering a false "not stated" claim -- this removes the contradiction (silence is not a lie) even though it does not rec
2026-07-05 · severity S2
Contradictory Master Directions date: FAQ states April 22, 2025 while body states effective/issued date is April 24, 2025
Evidence: Banks should refer to the Master Directions dated April 22, 2025 for the exact classification.
Fix applied: FIXED as founder-approved, with independent confirmation. Checked drafts/RBI_FED_2025-26_32.json's own source_title field (scraped verbatim from RBI): 'A.P. (DIR Series) Circular. No 04/2025-26 April 24, 2025' -- this is primary-source proof April 24 is the correct date, not just the founder's approval alone. Confirmed exactly ONE occurrence of the wrong 'April 22, 2025' string in the entire draft file (inside one FAQ answer); replaced it with 'April 24, 2025
2026-07-05 · severity S3
Category tags 'Credit Cards' and 'Deposits / Interest Rates' are irrelevant/incorrect for a KCC (Kisan Credit Card) agricultural directions circular; miscategorization could mislead compliance filtering.
Evidence: Credit Cards Deposits / Interest Rates
Fix applied: TASK10 FIXED (10 Jul 2026): The originally-flagged circular (rbi-fidd-2026-27-404) already showed correct tags live (Priority Sector Lending, Co-operative Banks) -- the underlying drafts/*.json record had been corrected at some earlier point, though the separate data/circulars.json INDEX file still had the stale wrong tags (that index isn't what publisher.py renders from, so no reader ever saw it wrong). A duplicate-cluster check found the SAME mistagging still live on 6 other Kisan Credit
2026-07-05 · severity S2
Page status banner marks this circular as withdrawn/superseded (by the 2025 Master Direction), yet the body content (Quick answer, What changed, What you must do, FAQs) presents the 2024 Directions as the current, actionable rule with 'immediate effect' and no mention that it has since been withdrawn.
Evidence: Withdrawn / superseded ... The directions came into force on October 18, 2024, and apply with immediate effect.
Fix applied: FIXED as founder-approved. Patched drafts/RBI_FMRD_2024-25_124.json (the authoritative content source publisher.py reads): (1) prepended 'Superseded on 2025-02-07 by the Master Direction - Reserve Bank of India (Access Criteria for NDS-OM) Directions, 2025 -- the rest of this summary describes the original 2024 Directions for historical reference only.' to content.quick_answer; (2) appended a matching sentence to the 'What is the effective date...' FAQ answer. Sourced ONLY fr
2026-07-05 · severity S3
page contains internal verification note
Evidence: RBI Announces ₹1.25 Lakh Crore 2-Day VRR Auction on July 1 under verification — remove 'Banks can bid' as source does not specify eligible bidders; replace with 'Eligible participants can bid'
Fix applied: TASK9 VERIFIED FIXED (10 Jul 2026): The flagged headline ("RBI Announces ...VRR Auction on July 1 under verification -- remove 'Banks can bid'...") no longer exists anywhere live -- checked the /latest/ feed, the circular's own page (rbi-doc-63058), and every /c/ page that links to it via the sitewide 'related circulars' widget: all show the clean title only. The underlying plain_title data has since been correctly re-decoded. No fabricated fix needed.
2026-07-05 · severity S3
The 'days ago' labels are inconsistent with the stated 'Last refreshed' timestamp — they appear calculated against 04 Jul 2026 rather than the declared refresh date of 05 Jul 2026, making all relative-time labels off by a day.
Evidence: Last refreshed: 05 Jul 2026, 06:18 IST ... 03 Jul 2026 1 day ago ... 02 Jul 2026 2 days ago
Fix applied: TASK7 VERIFIED (10 Jul 2026): Re-tested _ageing() in publisher.py against real elapsed time on the live homepage today -- every sampled card (1-day-old, 8-10 day-old, etc) now shows the correct label, including the exact "14 days = 2 weeks ago" edge case which the current code handles explicitly (line: if days==14: return "2 weeks ago"). Root-caused the ORIGINAL mismatch: the 3 flagged instances (25 Jun/02 Jul/03 Jul) are all internally consistent with the labels having been
2026-07-04 · severity S3
internal target /c/test not found in dist (seen on 1 pages)
Fix applied: test-page click purged from share stats; desk regenerated (05 Jul 2026)
· severity S3
Publish-order bug: /aeo/ is appended to sitemap.xml AFTER api.py builds api/sitemap.json, so the JSON mirror is permanently one URL behind and the qc sitemap gate fails on a clean tree (this silently blocked ALL autonomous fixes). Also _patch_v3.py (broken syntax, now quarantined) made qc py_compile gate fail on the clean tree.
Evidence: qc_check.sh exit 1 on untouched tree, 05 Jul 2026: MISSING from sitemap.json: /aeo/; FAIL _patch_v3.py SyntaxError line 64.
Fix applied: Verified already resolved: aeo_page.py runs after api.py in publisher.py main() (line order confirmed), _patch_v3.py is quarantined (.bak.broken-syntax-quarantined-05jul2026), and live dist/sitemap.xml + dist/api/sitemap.json both contain /aeo/ with matching counts (5861 = 5861). qc_check.sh passes clean. Re-verified 10 Jul 2026 as Task 1 of the 20-task auditor-backlog remediation run.