Skip to content

Commit 6dd91fc

Browse files
committed
docs: record additional UYAP viewer download-required observation + Live Interoperability Fix 6.1
README pilot callout gains a follow-up note and DEVELOPMENT_HISTORY gains a Fix 6.1 milestone, recorded as an additional direct live viewer observation (not a formal seventh pilot rerun). The operator clicked a row-local eye/view action: a real UYAP viewer opened at /pp/viewer.jsp?mimeType=Udf but the document did not render, showing 'Evrak Goruntulenemedi, Evragi indirerek Goruntuleyebilirsiniz.'. So viewer reachability does not guarantee content availability. Fix 6.1 adds a viewer-outcome classifier and a same-row download fallback that reuses the Fix-6 positive download semantics (never global/Nth/other-row; unresolved -> honest blocker), preserves the downloaded artifact through the existing gitignored store, and attempts deterministic extraction only for genuinely supported formats (raw .udf/.pdf preserved but reported unsupported; mimeType=Udf hint alone never implies support; no raw-UDF parser, no OCR, no known-truth injection). No live PASS is claimed: the same-row download fallback has not been exercised live, no official UDF download has been captured live, raw-UDF parsing is not proven, and the Ihale Bedeli was not programmatically extracted; a post-Fix-6.1 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 5bbf5ee commit 6dd91fc

2 files changed

Lines changed: 46 additions & 0 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,8 @@ The dedicated profile lives **outside** the repository; browser profiles, cookie
261261

262262
> **Six real live runs, all `FAIL` (interoperability); Fix 5 is now proven live and Fix 6 resolves the row-local icon controls.** 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**. **Fix 4** hardened active-page state classification against embedded-reference false positives. **Fix 5** detected the visibly-open document modal by **semantic content** (div/portal overlay, no `.modal`/`role=dialog` required). On the **sixth** run Fix 5 worked live: `document_list_opened=true`, `document_modal_opened=true`, `document_list_container_kind=listing_modal`, the four real evidence rows recognized (`sale_notice`, `sale_spec`, `appraisal_report`, `auction_result`), and `document_actions_observed=8` (each row `action_count=2`) — **but every row reported `view_action_resolved=false` and `download_action_detected=false`**, so all attempts stopped at `row_action_unresolved:no_view_action`. The operator has directly observed that each row has two right-side **icon-only** controls (a red download/down-arrow and a separate eye/view), and that clicking the eye opens `/pp/viewer.jsp?mimeType=Udf&evrakId=...`. The defect was purely **row-local icon-control semantics**: the resolver inspected only each control's own text/class, never its descendant icon metadata (SVG `<title>`, `<use href="#...">`, nested `<i>` classes). **Fix 6** adds per-action **introspection** (tag, role, accessible name, `title`/`aria-label`, `href_kind`, `download` attribute, `onclick` presence, safe class tokens, descendant icon tokens from SVG `<title>`/`<use>` fragments/icon-font classes, safe handler tokens) and a deterministic **download-vs-view resolver** with precedence: accessibility/title → descendant icon tokens → href/download attribute → onclick tokens → else unresolved. Resolution is **positive-view only** — a control is chosen solely when it is positively classified `view`; there is **no** "the other one is download, so this is view" inference, **no** positional/right-most/Nth-action guessing, and **color is never a classifier** (the observed red is ignored). New privacy-safe diagnostics (`recognized_document_rows[].action_summaries`, `action_resolution_strategy`) record the real observed tokens/`href_kind` **without** raw hrefs, opaque `evrakId` values, `onclick` bodies, or DOM dumps, so an unresolved live run remains debuggable. **No live `PASS` is claimed**, the viewer stage was **not** exercised live, and **UDF source extraction / İhale Bedeli extraction remain unproven**; 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 auction-result row now resolves its view action and reaches the viewer (or fails honestly later at click / new-tab / UDF representation).
263263

264+
> **Additional real viewer observation (before the post-Fix-6 rerun) — `download_required`; Fix 6.1 adds a same-row download fallback.** The operator manually clicked a row-local eye/view action: a real UYAP viewer tab opened at `/pp/viewer.jsp?mimeType=Udf&evrakId=...`, but the document did **not** render — the viewer visibly displayed **"Evrak Görüntülenemedi, Evrağı indirerek Görüntüleyebilirsiniz."**. So reaching the viewer does **not** guarantee content availability: a positively resolved view action has at least two real outcomes — content available, or **download required**. **Fix 6.1** adds a deterministic **viewer-outcome classifier** (`classify_viewer_outcome` → `content_available` / `download_required` / `unsupported_representation` / `viewer_error` / `unknown`) whose `download_required` requires the **combined** viewer-failure + download-instruction semantics (`viewer_download_instruction_detected`, with Turkish folding + constrained mojibake repair) — a bare `indir` or a generic "program indir" instruction is **not** enough. When the viewer reports `download_required`, the collector falls back to the **same** `DocumentRow`'s **positively resolved Fix-6 download action** (never a global/first/Nth/other-row download; if that row has no positively resolved download action it reports `download_required_but_download_action_unresolved` rather than clicking arbitrarily), captures the official artifact via a bounded Playwright download, and preserves it through the existing gitignored artifact store. View-first is preserved (documents are not downloaded unless the viewer says so). Deterministic extraction is attempted **only** for genuinely supported formats (`extraction_supported_for` → `.txt`/`.html` only); a raw `.udf`/`.pdf` download is **preserved but reported unsupported** (`downloaded_artifact_extraction_supported=false`) — a `mimeType=Udf` URL hint alone never implies support, and **no** raw-UDF parser, OCR, or known-truth injection is added. New privacy-safe diagnostics (`viewer_outcome`, `viewer_download_instruction_detected`, `download_fallback_attempted`, `download_fallback_resolved_same_row`, `download_action_resolved`, `download_event_detected`, `downloaded_artifact_extension`/`mime_hint`/`size`, `downloaded_artifact_collected`, `downloaded_artifact_extraction_supported`, `download_fallback_blocking_reason`) carry **no** opaque `evrakId`, full URLs, cookies/tokens, or document text. **No live `PASS` is claimed**: the same-row download fallback has **not** been exercised live, no official UDF download has been captured live, raw-UDF parsing is **not** proven, and the İhale Bedeli was **not** programmatically extracted — a post-Fix-6.1 operator rerun is required.
265+
264266
## Optional direct-label validation channel
265267

266268
Separately from the structural evidence above, `sold` retains a **frozen** listing-outcome channel that lets a broker or seller record the *outcome* of a listing and receive simple **non-ML negotiation analytics** in return. This channel is **not** part of the structural model:

docs/DEVELOPMENT_HISTORY.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,3 +419,47 @@ milestones:
419419
Structural core, four SMM moments, `conditional_on_trade`, `Θ_A`, TOKİ external status (5 observed / 0
420420
SMM), and the numerical-search convention are unchanged; the pilot remains non-mutating (genuine count
421421
stays 7).
422+
423+
- **UYAP Live Browser Pilot 1 — Live Interoperability Fix 6.1 (additional real viewer observation;
424+
viewer download-required same-row fallback)** — recorded as a **direct live viewer observation**, not a
425+
formal seventh pilot rerun. Between Fix 6 and the post-Fix-6 rerun the operator manually clicked a
426+
row-local eye/view action: a real UYAP viewer tab opened at `/pp/viewer.jsp?mimeType=Udf&evrakId=...`, but
427+
the document did **not** render — the viewer visibly displayed **"Evrak Görüntülenemedi, Evrağı indirerek
428+
Görüntüleyebilirsiniz."**. So reaching the viewer does not guarantee content availability; a positively
429+
resolved view action has at least two real outcomes (content available, or download required). **Fix 6.1
430+
(narrow follow-up; Fix-6 action architecture reused, not reopened):** a deterministic viewer-outcome
431+
classifier `classify_viewer_outcome(text, representation) → content_available / download_required /
432+
unsupported_representation / viewer_error / unknown`, where `download_required` requires the **combined**
433+
viewer-failure + download-instruction semantics via `viewer_download_instruction_detected` (Turkish fold +
434+
constrained mojibake repair; a bare `indir`, a generic "program indir" instruction, a failure message
435+
without the download instruction, or the instruction without the failure are all **not** sufficient).
436+
`resolve_row_view_action` now also exposes the row's **positively resolved single** download action
437+
(`download_action`, `download_action_resolved`) reusing the Fix-6 `classify_action_semantic` — never a
438+
positional/Nth/"the other one" inference. The live collector branches on the viewer outcome: on
439+
`content_available` it uses the existing viewer-backed source collection; on `download_required` it closes
440+
the failed viewer tab (preserving the operator's original listing/detail page), then falls back to the
441+
**same** `DocumentRow`'s resolved download action via `_locate_row_download_action` (selectors derived
442+
only from the resolved download spec — never a global/first/Nth/other-row download; if the row has no
443+
positively resolved download action it reports `download_required_but_download_action_unresolved` rather
444+
than clicking arbitrarily), captures the official artifact with a bounded `page.expect_download`, and
445+
preserves it in the existing gitignored artifact store (type + extension + size + short sha). View-first
446+
is preserved — documents are not downloaded unless the viewer says so. Deterministic extraction runs
447+
**only** for genuinely supported formats (`extraction_supported_for` / `EXTRACTABLE_ARTIFACT_EXTENSIONS`
448+
= `.txt`/`.html`/`.htm`); a raw `.udf`/`.pdf` download is preserved but reported unsupported
449+
(`downloaded_artifact_extraction_supported=false`) and is **not** fed to the extractor (no garbage/UDF
450+
fabrication) — a `mimeType=Udf` URL hint alone never implies support, and **no** raw-UDF parser, OCR, or
451+
known-truth injection is added (this task deliberately does not build a speculative UDF parser). New
452+
privacy-safe per-attempt diagnostics: `viewer_outcome`, `viewer_download_instruction_detected`,
453+
`download_fallback_attempted`, `download_fallback_resolved_same_row`, `download_action_resolved`,
454+
`download_event_detected`, `downloaded_artifact_extension`/`_mime_hint`/`_size`/`_sha256`,
455+
`downloaded_artifact_collected`, `downloaded_artifact_extraction_supported`,
456+
`download_fallback_blocking_reason` — with **no** opaque `evrakId`, full URLs, cookies/tokens, onclick
457+
bodies, or document text. The auction numerator remains the explicit İhale Bedeli (result-card `Satış
458+
Tutarı` / `Ödenmesi Gereken Bedel` / deposit / share / setoff / KDV never substituted); if a downloaded
459+
official artifact cannot yet be parsed, the official auction price simply stays missing. Added 22 offline
460+
tests. Full suite: **414 passed** (392 baseline + 22 tests). **No live `PASS` is claimed: the same-row
461+
download fallback has not been exercised live, no official UDF download has been captured live, raw-UDF
462+
parsing is not proven, and the İhale Bedeli was not programmatically extracted** — a post-Fix-6.1 operator
463+
rerun is required. Structural core, four SMM moments, `conditional_on_trade`, `Θ_A`, TOKİ external status
464+
(5 observed / 0 SMM), and the numerical-search convention are unchanged; the pilot remains non-mutating
465+
(genuine count stays 7).

0 commit comments

Comments
 (0)