Skip to content

Commit 854f4e0

Browse files
committed
docs: record UYAP Live Pilot 1 fourth real live FAIL + Live Interoperability Fix 4
README pilot callout and DEVELOPMENT_HISTORY milestone updated to four real live runs all FAIL. Run 4: operator started from the real search/listing page (active source /pp/index.jsp) with the 2026/263 Icra card visible; real terminal 'Satis Islemleri Tamamlandi' extracted; but classify_page_state incorrectly returned udf_viewer because weak embedded viewer references in raw HTML overrode active-page semantics, so document_entry_path became unsupported and the Fix-3 target-record-card logic never ran. Fix 4 hardens active-page state precedence (active URL first, then visible detail, then visible listing, then viewer-only-when-no-listing/detail), records weak embedded refs as ignored, trusts the live page.url, and adds safe multi-tab selection. Preserves Fix-3 card matching. No live PASS is claimed; the modal is not asserted to open and the UDF viewer is not asserted to be reached; a post-Fix-4 operator rerun is required. Structural core, four SMM moments, conditional_on_trade, Theta_A, TOKI external (5 observed / 0 SMM), and the numerical-search convention are unchanged.
1 parent a9f3a3d commit 854f4e0

2 files changed

Lines changed: 35 additions & 1 deletion

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ Get-Content data\ingestion\uyap\pilot_report.json
259259

260260
The dedicated profile lives **outside** the repository; browser profiles, cookies, tokens, and the pilot report are gitignored and never committed. Outcome semantics: **`PASS`** (real live session reached, required evidence extracted, reconciliation passed, audit `ADMISSIBLE_COMPLETED_SALE`, known-truth matched, `uyap.json` unchanged, count still 7); **`PARTIAL`** (live session worked but a required artifact/parser path was unsupported, reconciliation ambiguous, or terminal evidence not collected); **`FAIL`** (a real live run produced incorrect required evidence or an incorrect audit decision); **`NOT_RUN`** (no real user-controlled UYAP browser session was available). Offline regression success does **not** convert `NOT_RUN` into `PASS`.
261261

262-
> **Three real live runs, all `FAIL` (interoperability); Fix 3 makes document entry page-state-aware and target-record-scoped.** A real operator Chrome/CDP session connected and the real UYAP `2026/263` page was reached; the appraisal (`6,800,000`), terminal status (`satildi`) and KDV (`20.0`) are extracted, but no run has yet collected the official auction-result document, so the explicit İhale Bedeli is missing (`audit_decision = MISSING_APPRAISAL` / `MISSING_AUCTION_PRICE`). Every run left `uyap.json` byte-unchanged with the genuine count at **7** — a collection defect, not a structural/admission defect. **Fix 1** hardened KDV (`KDV Oranı : %20` → `20.0`) and found the "İhale Evrak Listesi" control, but then wrongly waited for a modal/dialog. **Fix 2** switched to same-page tab/panel detection with a row-local eye action opening a new-tab `viewer.jsp?mimeType=Udf&evrakId=...` **UDF viewer**. The third live run then failed differently: the operator ran from the **search/listing page**, where the code used a **global page-level text locator** for "İhale Evrak Listesi" that was **not scoped to the `2026/263` record card**; a generic text node is not an actionable control, so the click timed out (`document_list_opened = false`, labels `[]`). The operator also confirmed **two genuine entry paths** to the same documents: **(A)** on the **listing card** the card-local "İhale Evrak Listesi" opens a **modal**; **(B)** "İncele" opens a **detail page** whose "İhale Evrak Listesi" **tab** renders a **same-page panel**. **Fix 3** adds a page-state classifier (`classify_page_state` → `search_listing` / `record_detail` / `udf_viewer`), locates the **target record card by official file identity** (`find_target_record_card` — never by price, never a first/Nth card, with an Esas/İcra listing-alias match), requires an **actionable card-local control** (`card_document_list_control`; bare text is rejected as `non_actionable_text_only`), derives the **entry path** (`classify_document_entry_path`), distinguishes a **row-local eye action from a download arrow** (downloads are skipped), and converges **both paths** onto the **same document-row abstraction** → new-tab UDF viewer. **A live `PASS` is not claimed**, and the UDF viewer's content representation is **not** asserted until a runtime rerun observes it — the operator must rerun `sold uyap pilot` against the real UYAP page (the search/listing page with the `2026/263` card visible is recommended) and a new real live report must measure `PASS` (or an honest `PARTIAL` if the UDF viewer proves canvas/image-only).
262+
> **Four real live runs, all `FAIL` (interoperability); Fix 4 hardens active-page state classification against embedded-reference false positives.** A real operator Chrome/CDP session connected and the real UYAP `2026/263` page was reached; the appraisal (`6,800,000`), terminal status (`satildi`) and KDV (`20.0`) are extracted, but no run has yet collected the official auction-result document, so the explicit İhale Bedeli is missing. Every run left `uyap.json` byte-unchanged with the genuine count at **7** — a collection defect, not a structural/admission defect. **Fix 1** hardened KDV and found the "İhale Evrak Listesi" control but wrongly waited for a modal. **Fix 2** switched to same-page tab/panel detection with a row-local eye action opening a new-tab `viewer.jsp?mimeType=Udf` **UDF viewer**. **Fix 3** made document entry **page-state-aware and target-record-card-scoped** (listing card → modal; detail tab → panel). The **fourth** live run then failed *before* the Fix-3 logic could run: the operator started on the real **search/listing page** (active source `/pp/index.jsp`) with the `2026/263 İcra` card visible and the real `Satış İşlemleri Tamamlandı` was extracted, but `classify_page_state` returned **`udf_viewer`** because the listing HTML contained weak embedded viewer references (a hidden "Evrak Görüntüleme" string / a `viewer.jsp?mimeType=Udf` fragment in script/template) that were treated as decisive. That produced `document_entry_path = unsupported` (`blocking_reason = unsupported_page_state:udf_viewer`), so the target-record-card path **never executed** — run 4 did **not** test whether card matching, the card-local control, the modal, document rows, or the UDF viewer work. **Fix 4** introduces deterministic **active-page state evidence precedence**: strong active-**URL** viewer evidence (`/pp/viewer.jsp` path with `mimeType=Udf`) first, then strong visible detail semantics, then strong visible listing semantics, then viewer semantics only when no listing/detail is present. A `viewer.jsp` or `mimeType=Udf` string embedded in raw HTML (script, hidden markup, link target, template) **no longer** classifies the active page as a viewer (it is recorded as `weak_embedded_viewer_reference_ignored`); the classifier trusts the live `page.url` as the active URL, and multi-tab page selection prefers a supported target page over a stale viewer tab (`select_target_page_index`). New privacy-safe diagnostics: `page_state_evidence`, `page_candidates_seen`, `selected_page_url_kind`, `selected_page_state`, `selected_page_target_identity_match`. **No live `PASS` is claimed**; the fix only removes the incorrect page-state blocker, and the operator must rerun `sold uyap pilot` from the real search/listing page (`2026/263 İcra` card visible) so a new real report can measure whether the pipeline now reaches the card, modal, document rows, and UDF viewer.
263263

264264
## Optional direct-label validation channel
265265

docs/DEVELOPMENT_HISTORY.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,3 +295,37 @@ milestones:
295295
content representation is not asserted** until a runtime operator rerun observes it. Structural core, four
296296
SMM moments, `conditional_on_trade`, `Θ_A`, TOKİ external status, and the numerical-search convention are
297297
unchanged; the pilot remains non-mutating (genuine count stays 7).
298+
299+
- **UYAP Live Browser Pilot 1 — Live Interoperability Fix 4 (measured fourth live result: `FAIL`)**
300+
chronology: run 1 = **FAIL** → Fix 1 → run 2 = **FAIL** → Fix 2 → run 3 = **FAIL** → Fix 3 → run 4 =
301+
**FAIL** → Fix 4 → operator rerun pending. On the fourth real run the operator did everything right:
302+
a single Chrome/CDP session, the real UYAP **search/listing page** (active source ref
303+
`https://esatis.uyap.gov.tr/pp/index.jsp`), the `2026/263 İcra` result card visible, no modal or detail
304+
page manually opened. The real terminal evidence `Satış İşlemleri Tamamlandı` was even extracted from the
305+
listing content. **But `classify_page_state(...)` returned `udf_viewer`** — because its top-priority rule
306+
treated a weak viewer reference in the *raw HTML* (a hidden "Evrak Görüntüleme" string / a
307+
`viewer.jsp?mimeType=Udf` fragment inside script/template markup) as decisive, overriding the strong
308+
visible listing semantics of the active page. That yielded `document_entry_path = unsupported`
309+
(`document_collection_attempts=[{stage:"page_state", blocking_reason:"unsupported_page_state:udf_viewer"}]`),
310+
so the **Fix-3 target-record-card logic never executed**. The mutation guard passed again (`uyap.json`
311+
unchanged, count `7 -> 7`, SMM unchanged, `uyap_sale_prob` absent). Run 4 therefore did **not** disprove
312+
the Fix-3 card logic — it never reached it; the defect was a **page-state false positive**. **Fix 4
313+
(narrow):** a deterministic **active-page state evidence precedence** (`_page_state_evidence` /
314+
`page_state_evidence`) — (1) strong active-**URL** viewer evidence via `_active_viewer_url`, which parses
315+
only the live `page.url` path/query (`/pp/viewer.jsp` + `mimeType=Udf`), never URLs embedded in HTML;
316+
(2) strong visible detail semantics → `record_detail`; (3) strong visible listing semantics
317+
(`\bincele\b` + "evrak listesi") → `search_listing`; (4) viewer semantics (`Evrak Görüntüleme`) only when
318+
no listing/detail is present → `udf_viewer`; else `unknown`. A raw-HTML `viewer.jsp` / `mimeType=Udf`
319+
reference is recorded as `weak_embedded_viewer_reference_ignored` and is **never** decisive. Multi-tab
320+
safety adds a pure `select_target_page_index` (+ live `_select_target_page`) that prefers a supported
321+
target page (`search_listing`/`record_detail` + file-identity match) over a stale UDF viewer tab, never
322+
selecting a viewer merely because it is a UYAP page. New privacy-safe report diagnostics: `page_state_evidence`,
323+
`page_candidates_seen`, `selected_page_url_kind`, `selected_page_state`,
324+
`selected_page_target_identity_match` (no raw HTML/URLs, no cookies/tokens/personal data). Fix-3
325+
target-card matching (file identity, Esas/İcra alias, no price/Nth selection) and both entry paths are
326+
**preserved unchanged**; after classifier repair, `search_listing` again flows into the Fix-3 listing-card
327+
path. Added 28 offline tests. Full suite: **332 passed** (304 baseline + 28 tests). **No live `PASS` is
328+
claimed**, the listing modal is **not** asserted to open programmatically, and the UDF viewer is **not**
329+
asserted to be programmatically reached — a post-Fix-4 operator rerun is required. Structural core, four
330+
SMM moments, `conditional_on_trade`, `Θ_A`, TOKİ external status (5 observed / 0 SMM), and the
331+
numerical-search convention are unchanged; the pilot remains non-mutating (genuine count stays 7).

0 commit comments

Comments
 (0)