User Tools

Site Tools


provenance:design:ownership_resolution

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
provenance:design:ownership_resolution [2026/09/11 22:45] – Section L.9: the third sweep and the two 2026-09-05 judgement-call bullets it found still stating 69.9%/93.9% in the present tense; dated rather than refreshed. Authored by Claude karel.kubicek.claudeprovenance:design:ownership_resolution [2026/09/17 07:23] (current) – Markup rendering sweep: wrap escapes, CLI flag typography, and heading quotes. Authored by Claude. karel.kubicek.claude
Line 208: Line 208:
  
 ^ Script ^ Invocation ^ Result ^ ^ Script ^ Invocation ^ Result ^
-| ''report_webxray.mjs'' | ''node scripts/report_webxray.mjs --quotes'' | **byte-identical** to the committed ''report_webxray-output.txt'' before the fix in section C; regenerated after it | +| ''report_webxray.mjs'' | ''node scripts/report_webxray.mjs %%--quotes%%'' | **byte-identical** to the committed ''report_webxray-output.txt'' before the fix in section C; regenerated after it | 
-| ''owner_dbs.py'' | ''python3 scripts/owner_dbs.py --cache out/webxray/cache --disagreements 25'' | reproduces the 2026-08-17 frame exactly: 32,369 domains; 669 / 5,581 / 2,268; 58.6% / 84.3% / 80.5%; 15,651 merged rows; 19 non-hostname rows dropped; 6,941 ICANN and 3,290 PRIVATE rules; 782 of 827 owner names untouched by the fold, 16 of the 45 changed losing a legal suffix | +| ''owner_dbs.py'' | ''python3 scripts/owner_dbs.py %%--cache%% out/webxray/cache %%--disagreements%% 25'' | reproduces the 2026-08-17 frame exactly: 32,369 domains; 669 / 5,581 / 2,268; 58.6% / 84.3% / 80.5%; 15,651 merged rows; 19 non-hostname rows dropped; 6,941 ICANN and 3,290 PRIVATE rules; 782 of 827 owner names untouched by the fold, 16 of the 45 changed losing a legal suffix | 
-| ''owner_random_sample.py'' | ''python3 scripts/owner_random_sample.py --sample out/owner_sample.json --rows out/adj_rows_scored.json --table --wiki'' | **byte-identical** to ''out/owner_random_sample-output.txt'' |+| ''owner_random_sample.py'' | ''python3 scripts/owner_random_sample.py %%--sample%% out/owner_sample.json %%--rows%% out/adj_rows_scored.json %%--table%% %%--wiki%%'' | **byte-identical** to ''out/owner_random_sample-output.txt'' |
 | ''owner_selfname_census.py'' | ''python3 scripts/owner_selfname_census.py'' | reproduces 0.8% / 0.7% / 3.2% (25 of 3,215; 250 of 38,368; 250 of 7,850) | | ''owner_selfname_census.py'' | ''python3 scripts/owner_selfname_census.py'' | reproduces 0.8% / 0.7% / 3.2% (25 of 3,215; 250 of 38,368; 250 of 7,850) |
-| ''owner_adjudication.py'' | ''python3 scripts/owner_adjudication.py --table'' | reproduces the 28-row table exactly: 1/18/4/1/4, 8/12/6/2/0, 26/0/2/0/0, and the three rows scored as error rather than staleness |+| ''owner_adjudication.py'' | ''python3 scripts/owner_adjudication.py %%--table%%'' | reproduces the 28-row table exactly: 1/18/4/1/4, 8/12/6/2/0, 26/0/2/0/0, and the three rows scored as error rather than staleness |
 | ''owner_irr_kappa.py'' | invocation reconstructed by the figures reviewer, since it was missing from the brief | reproduces pooled kappa +0.400 (+0.241, +0.551), per-list +0.027 / +0.478 / +0.460, settled-only +0.680 | | ''owner_irr_kappa.py'' | invocation reconstructed by the figures reviewer, since it was missing from the brief | reproduces pooled kappa +0.400 (+0.241, +0.551), per-list +0.027 / +0.478 / +0.460, settled-only +0.680 |
 | ''report_ownership_resolution.mjs'' | ''node scripts/report_ownership_resolution.mjs'' | new; section K | | ''report_ownership_resolution.mjs'' | ''node scripts/report_ownership_resolution.mjs'' | new; section K |
Line 500: Line 500:
 ^ Check ^ Result ^ ^ Check ^ Result ^
 | All published scripts re-run against pinned inputs | they **reproduce their committed output** — which, as C and I both show, is not evidence the output is //right//: byte-identity blessed a wrong denominator for three and a half weeks and five wrong constants for longer. A reproduction record is not a correctness record. | | All published scripts re-run against pinned inputs | they **reproduce their committed output** — which, as C and I both show, is not evidence the output is //right//: byte-identity blessed a wrong denominator for three and a half weeks and five wrong constants for longer. A reproduction record is not a correctness record. |
-| ''owner_adjudication.py --table'' | reproduces the 28-row table exactly: 1/18/4/1/4, 8/12/6/2/0, 26/0/2/0/0, and the three error rows (''1rx.io'', ''jsdelivr.net'', ''stackadapt.com'') |+| ''owner_adjudication.py %%--table%%'' | reproduces the 28-row table exactly: 1/18/4/1/4, 8/12/6/2/0, 26/0/2/0/0, and the three error rows (''1rx.io'', ''jsdelivr.net'', ''stackadapt.com'') |
 | ''domain_owners.json'' schema table on [[Programming:Crawler:webXray]], every cell | reproduces: 319/827 parent_id, depths 508/211/80/24/2/2, 761 uses, 803 platforms, 826 country, 104 trade_groups, 591 policy URLs, 132 GDPR, 4 CCPA, 13 opt-out, 34 crunchbase_id, 52 health-segment, 263 notes, 275 aliases, 69 languages, 2,175 of 3,215 | | ''domain_owners.json'' schema table on [[Programming:Crawler:webXray]], every cell | reproduces: 319/827 parent_id, depths 508/211/80/24/2/2, 761 uses, 803 platforms, 826 country, 104 trade_groups, 591 policy URLs, 132 GDPR, 4 CCPA, 13 opt-out, 34 crunchbase_id, 52 health-segment, 263 notes, 275 aliases, 69 languages, 2,175 of 3,215 |
 | Mutation test of ''report_ownership_resolution.mjs'' | **four mutations, four failures**. Swapping tight/loose on Disconnect → "tight (700) > loose (74)". Making ''loose'' disjoint from ''tight'' at equal size → "23 tight hits are not in the loose set" — the containment guard catches what a size comparison alone would miss. Injecting a fake union member → cross-check throws. Replacing the crawled intersection with the full union → cross-check throws. No guard is vacuous. | | Mutation test of ''report_ownership_resolution.mjs'' | **four mutations, four failures**. Swapping tight/loose on Disconnect → "tight (700) > loose (74)". Making ''loose'' disjoint from ''tight'' at equal size → "23 tight hits are not in the loose set" — the containment guard catches what a size comparison alone would miss. Injecting a fake union member → cross-check throws. Replacing the crawled intersection with the full union → cross-check throws. No guard is vacuous. |
Line 526: Line 526:
 | Mechanical evidence | ''bash scripts/owner_tail_probe.sh out/tail40.json out/tail_probe'' | ''out/tail_probe.txt'' (2,471 lines, 2m 29s, 6-way parallel) | | Mechanical evidence | ''bash scripts/owner_tail_probe.sh out/tail40.json out/tail_probe'' | ''out/tail_probe.txt'' (2,471 lines, 2m 29s, 6-way parallel) |
 | Adjudication | 5 Sonnet sub-agents × 8 domains, round-robin over the prevalence order so every batch spans the range | ''out/tail_adj/result1..5.json'' | | Adjudication | 5 Sonnet sub-agents × 8 domains, round-robin over the prevalence order so every batch spans the range | ''out/tail_adj/result1..5.json'' |
-| Gate | ''python3 scripts/owner_tail_merge.py --sample out/owner_sample.json --base out/adj_rows_scored.json --tail out/tail40.json --dir out/tail_adj --out out/adj_rows_tail.json'' | ''out/adj_rows_tail.json'', **0 problems** | +| Gate | ''python3 scripts/owner_tail_merge.py %%--sample%% out/owner_sample.json %%--base%% out/adj_rows_scored.json %%--tail%% out/tail40.json %%--dir%% out/tail_adj %%--out%% out/adj_rows_tail.json'' | ''out/adj_rows_tail.json'', **0 problems** | 
-| Citation check | ''python3 scripts/owner_verify_sources.py --rows out/tail_rows_only.json --cache out/tail_verify_cache --out out/tail_verify.json'' | 3 defects in the checker itself — see L.5 | +| Citation check | ''python3 scripts/owner_verify_sources.py %%--rows%% out/tail_rows_only.json %%--cache%% out/tail_verify_cache %%--out%% out/tail_verify.json'' | 3 defects in the checker itself — see L.5 | 
-| Hand corrections | ''python3 scripts/owner_tail_corrections.py --rows out/adj_rows_tail.json --out out/adj_rows_tail_final.json'' | 6 rows: resource ×3, keep ×2, rescore ×1 | +| Hand corrections | ''python3 scripts/owner_tail_corrections.py %%--rows%% out/adj_rows_tail.json %%--out%% out/adj_rows_tail_final.json'' | 6 rows: resource ×3, keep ×2, rescore ×1 | 
-| Re-estimate | ''python3 scripts/owner_random_sample.py --sample out/owner_sample.json --rows out/adj_rows_tail_final.json --table --wiki'' | ''out/owner_random_sample-tail-output.txt'' |+| Re-estimate | ''python3 scripts/owner_random_sample.py %%--sample%% out/owner_sample.json %%--rows%% out/adj_rows_tail_final.json %%--table%% %%--wiki%%'' | ''out/owner_random_sample-tail-output.txt'' |
 | What changed | ''python3 scripts/report_tail_pass.py …'' | ''out/report_tail_pass-output.txt'' | | What changed | ''python3 scripts/report_tail_pass.py …'' | ''out/report_tail_pass-output.txt'' |
  
Line 535: Line 535:
  
 <WRAP tip> <WRAP tip>
-**Reproducing the //before// is a trap worth recording.** ''out/adj_rows.json'' and ''out/adj_rows_final.json'' both still carry ''self-named'' verdicts, and ''owner_random_sample.py'' exits fatally on them. The committed 2026-09-05 output is reproduced byte-identically **only** by ''--rows out/adj_rows_scored.json --wiki'' — the ''--wiki'' matters, because sections F and G exist only under it.+**Reproducing the //before// is a trap worth recording.** ''out/adj_rows.json'' and ''out/adj_rows_final.json'' both still carry ''self-named'' verdicts, and ''owner_random_sample.py'' exits fatally on them. The committed 2026-09-05 output is reproduced byte-identically **only** by ''%%--rows%% out/adj_rows_scored.json %%--wiki%%'' — the ''%%--wiki%%'' matters, because sections F and G exist only under it.
 </WRAP> </WRAP>
  
Line 630: Line 630:
 The one non-OK row is ''adgrx.com'': ''samsungads.ca'' serves an **expired The one non-OK row is ''adgrx.com'': ''samsungads.ca'' serves an **expired
 certificate**, so ''curl'' refuses it and the checker never sees a body. Fetched certificate**, so ''curl'' refuses it and the checker never sees a body. Fetched
-by hand with ''--insecure'': HTTP 200, 46,160 bytes, and the quoted row is+by hand with ''%%--insecure%%'': HTTP 200, 46,160 bytes, and the quoted row is
 byte-verbatim in it. The checker was deliberately **not** given an byte-verbatim in it. The checker was deliberately **not** given an
-''--insecure'' retry — an ownership citation whose host identity cannot be+''%%--insecure%%'' retry — an ownership citation whose host identity cannot be
 validated should surface, not be swallowed. validated should surface, not be swallowed.
  
Line 1400: Line 1400:
  
 <bibtex bibliography></bibtex> <bibtex bibliography></bibtex>
 +
 +===== Markup sweep, 2026-09-17 =====
 +
 +Mechanical rendering repair only: a fresh live raw/XHTML export of 188 pages was checked with ''check_wrap.mjs'' and ''check_typography.mjs''. Affected plugin tags, CLI flags and heading markup were repaired; no figures or substantive prose were changed. The resulting source and rendered DOM were re-checked after saving.
  
provenance/design/ownership_resolution.1789166754.txt.gz · Last modified: by karel.kubicek.claude