Skip to content

Commit d2f9db7

Browse files
committed
docs: record UYAP Live Pilot 1 fifth real live FAIL + Live Interoperability Fix 5
README pilot callout and DEVELOPMENT_HISTORY milestone updated to five real live runs all FAIL. Run 5 proved live that page-state classification, target 2026/263 card matching (file_id+institution), listing_card_modal entry-path selection, and the card-local Ihale Evrak Listesi control (card_link) all worked and the click succeeded; the operator directly watched the real UYAP modal visibly open, yet the collector reported document_list_opened=false / modal_opened=false / labels=[] / actions=0. The exact defect was a visible-modal / document-list recognition false negative (detection required .modal/role=dialog/<tr>; the real overlay is a div/portal; diagnostics also showed mojibake label text). Fix 5 detects the open list from visible semantic content (title + >=2 distinct recognized document types), locates the container by nearest common ancestor (guarded against body/html/whole-results; no .modal/dialog required), anchors document rows on the label elements, distinguishes download vs eye (unresolved rows not clicked), tracks a pre-click/post-click visible transition, and applies a constrained mojibake repair to classification input only. No live PASS is claimed, the modal is not asserted to open programmatically in a live run, and UDF source extraction is not proven; a post-Fix-5 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 a1269c0 commit d2f9db7

2 files changed

Lines changed: 45 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-
> **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.
262+
> **Five real live runs, all `FAIL` (interoperability); Fix 5 recognizes the visibly-open document modal by semantic content.** 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. 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** added same-page tab/panel detection with a row-local eye 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). **Fix 4** hardened active-page state classification so embedded viewer references in raw HTML no longer misclassify the listing page as a viewer. On the **fifth** run everything up to the click worked live — `page_state = search_listing`, the `2026/263` card was found by `file_id` + `institution`, `document_entry_path = listing_card_modal`, the card-local "İhale Evrak Listesi" control was found (`document_list_control_kind = card_link`), the click succeeded, and **the operator directly watched the real UYAP modal visibly open on screen** — yet the collector reported `document_list_opened = false`, `document_modal_opened = false`, `document_labels_observed = []`. The exact defect was a **visible-modal / document-list recognition false negative**: modal detection required `.modal` / `role=dialog` / `<tr>` markup, but the real overlay is a div/portal, and run-5 diagnostics also showed mojibake-like label text. **Fix 5** detects the open list from **visible semantic content** (a document-list title **plus at least two distinct recognized document types** — never the title alone), locates the container by the **nearest common ancestor** of the recognized label elements (guarded so `html`/`body`/a whole multi-record results container can never be chosen; `.modal`/`role=dialog` not required — a plain div/portal works), anchors **document rows on the label elements** (no `<tr>` assumption, no global Nth-icon), distinguishes a **row-local download vs eye/view action** (reporting a row **unresolved** rather than clicking arbitrarily), tracks a **pre-click→post-click semantic transition** over *visible* labels (hidden templates ignored, echoing the run-4 raw-HTML lesson), and applies a **constrained mojibake repair** (UTF-8-as-Latin-1/cp1252) to classification input only — never mutating source artifacts. On success it sets `document_list_opened = true`, `document_list_container_kind = listing_modal`, populates the labels/actions, and flows into the existing shared collection → new-tab UDF viewer. New privacy-safe diagnostics: `pre_click_visible_document_types`, `post_click_visible_document_types`, `document_list_semantic_transition_detected`, `document_container_strategy`, `document_container_recognized_types`, `document_row_detection_strategy`, `recognized_document_rows`. **No live `PASS` is claimed**, UDF source extraction is **not** proven, and the İhale Bedeli was **not** programmatically extracted; 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 recognizes the modal, reads the rows, and reaches the viewer (or fails honestly later at eye resolution / viewer representation / UDF extraction).
263263

264264
## Optional direct-label validation channel
265265

docs/DEVELOPMENT_HISTORY.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,3 +329,47 @@ milestones:
329329
asserted to be programmatically reached — a post-Fix-4 operator rerun is required. Structural core, four
330330
SMM moments, `conditional_on_trade`, `Θ_A`, TOKİ external status (5 observed / 0 SMM), and the
331331
numerical-search convention are unchanged; the pilot remains non-mutating (genuine count stays 7).
332+
333+
- **UYAP Live Browser Pilot 1 — Live Interoperability Fix 5 (measured fifth live result: `FAIL`)**
334+
chronology: run 1 = **FAIL** → Fix 1 → run 2 = **FAIL** → Fix 2 → run 3 = **FAIL** → Fix 3 → run 4 =
335+
**FAIL** → Fix 4 → run 5 = **FAIL** → Fix 5 → operator rerun pending. Run 5 proved live that everything
336+
up to and including the click works: `page_state = search_listing`, the `2026/263` card was found by
337+
`file_id` + `institution`, `document_entry_path = listing_card_modal`, the card-local "İhale Evrak
338+
Listesi" control was found (`document_list_control_kind = card_link`), and the click succeeded. The
339+
operator **directly watched the real Chrome window during the collector run and confirmed the UYAP "İhale
340+
Evrak Listesi" modal visibly opened** (dimmed background, foreground overlay, document rows: *Satış İlanı*,
341+
*Belediye İmar Durumu*, *Satış Şartnamesi Ve Tutanağı*, *BİLİRKİŞİ RAPORU 2026 263 ESAS.udf*, *Artırma
342+
Sonuç / Uzatma Tutanağı*, each with a download and an eye control). Yet the collector reported
343+
`document_list_opened = false`, `document_modal_opened = false`, `document_labels_observed = []`,
344+
`document_actions_observed = 0`, `blocking_reason = "document list did not become visible after control
345+
click"`. The mutation guard passed again (`uyap.json` unchanged, count `7 -> 7`, SMM unchanged). The exact
346+
defect was a **visible-modal / document-list recognition false negative**: detection required `.modal` /
347+
`role=dialog` / `<tr>` markup, but the real overlay is a div/portal, and run-5 diagnostics also showed
348+
mojibake-like label text. **Fix 5 (narrow, recognition only):** detect the open list from **visible
349+
semantic content**`detect_document_list` requires a document-list title **and ≥2 distinct recognized
350+
document types** (never the title alone); `detect_document_container` locates the **nearest common
351+
ancestor** of the recognized visible label elements, guarded so `html`/`body`/`[document]` and any
352+
whole-multi-record results container (`spans_multiple_records`) can never be chosen and **without**
353+
requiring `.modal`/`role=dialog` (`_container_strategy` reports `semantic_dialog` / `semantic_modal_class`
354+
/ `semantic_common_ancestor`); `extract_document_rows_semantic` anchors **document rows on the label
355+
elements** (no `<tr>`/`li`/`class*=row` assumption, hidden templates ignored via `_is_hidden`) and reuses
356+
the unified DocumentRow abstraction; `resolve_row_view_action` distinguishes a **row-local download vs
357+
eye/view action** and returns `resolved=False` (never clicking arbitrarily) when a row is download-only or
358+
ambiguous; `document_list_semantic_transition` tracks a **pre-click→post-click** change over *visible*
359+
labels; and a constrained `_demojibake` (UTF-8-as-Latin-1/cp1252) repairs `İhale`/`Satış`/`Bilirkişi`/
360+
`Artırma` for classification input only, guarded so correct Turkish Unicode is untouched and source
361+
artifacts are never mutated. On success the live collector sets `document_list_opened = true`,
362+
`document_list_container_kind = listing_modal` (from the entry path via `document_container_kind_for_entry`,
363+
not CSS), populates labels/actions, and flows into the existing shared collection → new-tab UDF viewer
364+
(Fix-2 handling unchanged). New privacy-safe diagnostics: `pre_click_visible_document_types`,
365+
`post_click_visible_document_types`, `document_list_semantic_transition_detected`,
366+
`document_container_strategy`, `document_container_recognized_types`, `document_row_detection_strategy`,
367+
`recognized_document_rows` (per row: `artifact_type`, `normalized_label`, `action_count`,
368+
`view_action_resolved`, `download_action_detected` — no source text, no personal data). Collection
369+
priority (auction_result > appraisal_report > sale_notice > sale_spec) is preserved; `Belediye İmar
370+
Durumu` is not collected; result-card `Satış Tutarı` is never substituted for the explicit İhale Bedeli.
371+
Added 31 offline tests. Full suite: **363 passed** (332 baseline + 31 tests). **No live `PASS` is claimed**,
372+
the modal is **not** asserted to open programmatically in a live run, and **UDF source extraction is not
373+
proven** — a post-Fix-5 operator rerun is required. Structural core, four SMM moments,
374+
`conditional_on_trade`, `Θ_A`, TOKİ external status (5 observed / 0 SMM), and the numerical-search
375+
convention are unchanged; the pilot remains non-mutating (genuine count stays 7).

0 commit comments

Comments
 (0)