User Tools

Site Tools


provenance:design

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
provenance:design [2026/08/27 20:22] – Addendum: the five platform red links are resolved — design:platforms written, four per-company pages closed as not-to-be-written; points at provenance:design:platforms. Authored by Claude karel.kubicek.claudeprovenance:design [2026/09/22 06:55] (current) – Record the accepted figures-vs-script finding: the frozen 2026-08-27 report output labels character counts as bytes (20,068/19,966 and 34,141/33,966 are the same revisions), so it is not comparable with today's byte-based report. Authored by Claude karel.kubicek.claude
Line 1: Line 1:
 ====== Provenance: design ====== ====== Provenance: design ======
  
-Working log behind **[[design]]**, and the joint sitting that also wrote [[programming]], [[privacy]], [[writing]], [[practices]] and [[statistics]]. Corpus-wide caveats: [[literature:corpus]]. Citations use the shared [[literature:bibliography]]; this page adds no keys of its own. No ''~~DISCUSSION~~'' — comments belong on the content pages.+Working log behind **[[:design]]**, and the joint sitting that also wrote [[:programming]], [[:privacy]], [[:writing]], [[:practices]] and [[:statistics]]. Corpus-wide caveats: [[literature:corpus]]. Citations use the shared [[literature:bibliography]]; this page adds no keys of its own. No ''~~DISCUSSION~~'' — comments belong on the content pages.
  
 **Run:** 2026-08-27. Corpus: 5,859 extracted papers, 7 venues, 2010–2026, ''data/extract/run1''. Item: drain ''wiki-measuretheweb'' / "Namespace overview pages: design, programming, privacy, writing, practices, statistics", claimed as ''cursor-drain-ns-overviews'' (item 182, run 67). Author: Cursor Grok 4.6, not Claude Code / ''drain-sandbox.sh''. **Run:** 2026-08-27. Corpus: 5,859 extracted papers, 7 venues, 2010–2026, ''data/extract/run1''. Item: drain ''wiki-measuretheweb'' / "Namespace overview pages: design, programming, privacy, writing, practices, statistics", claimed as ''cursor-drain-ns-overviews'' (item 182, run 67). Author: Cursor Grok 4.6, not Claude Code / ''drain-sandbox.sh''.
Line 10: Line 10:
  
 ^ Decision ^ Why ^ What a reasonable person might have done instead ^ ^ Decision ^ Why ^ What a reasonable person might have done instead ^
-| **Six short outline pages**, not six content pages | [[contributing]]: a namespace page outlines the pages inside it. The children already exist. | Fold the child headlines (Tranco 56.4%, OpenWPM 60, …) into the outlines. Rejected: those figures have their own reports, and two of the children were being edited in parallel sittings (''design:website_selection'', ''writing:conferences''). | +| **Six short outline pages**, not six content pages | [[:contributing]]: a namespace page outlines the pages inside it. The children already exist. | Fold the child headlines (Tranco 56.4%, OpenWPM 60, …) into the outlines. Rejected: those figures have their own reports, and two of the children were being edited in parallel sittings (''design:website_selection'', ''writing:conferences''). | 
-| **No paper citations on the outlines** | Nothing new is claimed about a paper. Routing to a child is a wikilink. | "Start with Holz et al." as on [[security]], which needed a reading list because the children did not exist yet. |+| **No paper citations on the outlines** | Nothing new is claimed about a paper. Routing to a child is a wikilink. | "Start with Holz et al." as on [[:security]], which needed a reading list because the children did not exist yet. |
 | **Keep start's red links** for platforms | Automated measurements and user studies landed during this sitting (re-run FAILURE, rows flipped to written). Platforms plus four named children remain promised. | Omit unwritten pages. Rejected: start already promises them. | | **Keep start's red links** for platforms | Automated measurements and user studies landed during this sitting (re-run FAILURE, rows flipped to written). Platforms plus four named children remain promised. | Omit unwritten pages. Rejected: start already promises them. |
 | **Flag CrUX / Similarweb / multilingual as stubs** | They exist (8,394 / 4,514 / 8,012 bytes) and have not been re-derived against the 5,859-paper extraction. Treating them as siblings of [[programming:crawler]] would overclaim. | Hide them. Rejected: start links them; hiding a live page is a lie. | | **Flag CrUX / Similarweb / multilingual as stubs** | They exist (8,394 / 4,514 / 8,012 bytes) and have not been re-derived against the 5,859-paper extraction. Treating them as siblings of [[programming:crawler]] would overclaim. | Hide them. Rejected: start links them; hiding a live page is a lie. |
-| **Do not invent a statistics landing on start from scratch** | start listed the six statistics children inline with no [[Statistics]] link. Creating the page without wiring it would leave it unreachable. | Leave start as-is (the children are reachable). Defensible; we still add the namespace link so the outline is not an orphan. |+| **Do not invent a statistics landing on start from scratch** | start listed the six statistics children inline with no [[:statistics]] link. Creating the page without wiring it would leave it unreachable. | Leave start as-is (the children are reachable). Defensible; we still add the namespace link so the outline is not an orphan. |
 | **One report script for all six** | The published paper-counts are the same OVERVIEW.md frame; the published wiki-counts are one live inventory. | Six reports. Waste. | | **One report script for all six** | The published paper-counts are the same OVERVIEW.md frame; the published wiki-counts are one live inventory. | Six reports. Waste. |
 | **Joint review, logged here** | Six pages, one sitting. The other five provenance pages point here for the accept/reject log. | Six copies of the same log. | | **Joint review, logged here** | Six pages, one sitting. The other five provenance pages point here for the accept/reject log. | Six copies of the same log. |
Line 40: Line 40:
 ^ # ^ Query ^ Population / denominator ^ Result ^ On the page? ^ ^ # ^ Query ^ Population / denominator ^ Result ^ On the page? ^
 | Q1 | Papers in the extraction | all | **5,859** | yes, every namespace page | | Q1 | Papers in the extraction | all | **5,859** | yes, every namespace page |
-| Q2 | ''isEmpirical === true'' | 5,859 | **5,118** | [[practices]] only |+| Q2 | ''isEmpirical === true'' | 5,859 | **5,118** | [[:practices]] only |
 | Q3 | crawled (''crawlConfig !== null'' or ''studyTypes'' includes ''automated-web-crawl'') | 5,859 | **1,120** | design, programming, writing | | Q3 | crawled (''crawlConfig !== null'' or ''studyTypes'' includes ''automated-web-crawl'') | 5,859 | **1,120** | design, programming, writing |
-| Q4 | ''platforms'' includes ''web'' | 5,859 | **1,622** | [[privacy]] | +| Q4 | ''platforms'' includes ''web'' | 5,859 | **1,622** | [[:privacy]] | 
-| Q5 | any ''statistics[].kind'' other than ''descriptive-only'' | 5,859 | **1,762** | [[statistics]] | +| Q5 | any ''statistics[].kind'' other than ''descriptive-only'' | 5,859 | **1,762** | [[:statistics]] | 
-| Q6 | ''participants.length > 0'' | 5,859 | **1,357** | [[statistics]] | +| Q6 | ''participants.length > 0'' | 5,859 | **1,357** | [[:statistics]] | 
-| Q7 | ''legal.length > 0'' | 5,859 | **402** | [[practices]] | +| Q7 | ''legal.length > 0'' | 5,859 | **402** | [[:practices]] | 
-| Q8 | ''humanAnnotation.length > 0'' | 5,859 | **3,318** | [[statistics]] |+| Q8 | ''humanAnnotation.length > 0'' | 5,859 | **3,318** | [[:statistics]] |
 | Q9 | venue count (hardcoded list, not a query) | — | **7** | yes, every page | | Q9 | venue count (hardcoded list, not a query) | — | **7** | yes, every page |
 | Q10 | live export_raw per inventoried child | 53 ids | **48** exists, **5** missing | yes, as the 10/5/15 and 17/9/2/4/6 | | Q10 | live export_raw per inventoried child | 53 ids | **48** exists, **5** missing | yes, as the 10/5/15 and 17/9/2/4/6 |
-| Q11 | stub byte counts (CrUX, Similarweb, multilingual) | those 3 pages | 8,394 / 4,514 / 8,012 | [[programming]] |+| Q11 | stub byte counts (CrUX, Similarweb, multilingual) | those 3 pages | 8,394 / 4,514 / 8,012 | [[:programming]] |
 | Q12 | the six namespace ids themselves | 6 | missing pre-publish; **exists** after put | status printed; not a fail after publish | | Q12 | the six namespace ids themselves | 6 | missing pre-publish; **exists** after put | status printed; not a fail after publish |
  
Line 86: Line 86:
  
 ^ ID ^ Verdict ^ Note ^ ^ ID ^ Verdict ^ Note ^
-| C1–C6 unqualified ''[[start]]'' / ''[[contributing]]'' / ''[[Artifacts]]'' / ''[[Programming]]'' etc. | **rejected** | The ''programming:crawler'' gotcha applies inside a namespace. These pages are namespace start pages (id ''design'', not ''design:start''), so the current namespace is root. Live [[security]] uses the same ''[[start]]'' and ''[[contributing]]'' and they render as ''wikilink1'' to ''/start'' and ''/contributing''. Qualifying them would be cargo-cult, not a fix. |+| C1–C6 unqualified ''%%[[start]]%%'' / ''%%[[contributing]]%%'' / ''%%[[Artifacts]]%%'' / ''%%[[Programming]]%%'' etc. | **accepted in part — provenance pages were missed** | The content namespace start pages (for example, ''design'' and ''security'') resolve root links, but this page is ''provenance:design''. In its live DOM, ''%%[[start]]%%'' and ''%%[[contributing]]%%'' resolved to ''provenance:start'' and ''provenance:contributing''; the same applies to the other provenance pages. Qualify root links with a leading colon. The links in this sweep were fixed and the rendered DOM re-checked. |
 | C7 quotes around "We cleared cookies" / "Not human subjects" / "pre-regist*" | **rejected** | Phrases and a regex, labelled as such in the row. Not paper quotations. | | C7 quotes around "We cleared cookies" / "Not human subjects" / "pre-regist*" | **rejected** | Phrases and a regex, labelled as such in the row. Not paper quotations. |
  
Line 95: Line 95:
 ^ ID ^ Verdict ^ Note ^ ^ ID ^ Verdict ^ Note ^
 | G1 child headlines on the outlines | **accepted** | Purpose column rewritten as questions/scopes, not findings (IMC crawl-rate, OpenWPM defaults, PanoptiChrome 0-use, "almost never", ePrivacy-as-conclusion, …). | | G1 child headlines on the outlines | **accepted** | Purpose column rewritten as questions/scopes, not findings (IMC crawl-rate, OpenWPM defaults, PanoptiChrome 0-use, "almost never", ePrivacy-as-conclusion, …). |
-| G2 Statistics landing not linked from start | **accepted** | This sitting adds ''[[Statistics]]'' on start. Provenance claimed it before the put; the put is the last step. |+| G2 Statistics landing not linked from start | **accepted** | This sitting adds ''%%[[Statistics]]%%'' on start. Provenance claimed it before the put; the put is the last step. |
 | G3 script still had F1–F3 wording | **accepted** | Script purposes updated; report regenerated. | | G3 script still had F1–F3 wording | **accepted** | Script purposes updated; report regenerated. |
 | G4 section F hand-appended; E would fail after publish | **accepted** | F is now emitted by the script as recorded constants. E prints exists/missing and does not fail after publish. | | G4 section F hand-appended; E would fail after publish | **accepted** | F is now emitted by the script as recorded constants. E prints exists/missing and does not fail after publish. |
Line 103: Line 103:
 | G8 "measured a different web" | **accepted** | Now "the no-interaction condition, not the post-consent web". | | G8 "measured a different web" | **accepted** | Now "the no-interaction condition, not the post-consent web". |
 | G9 regression "holding rank constant" | **accepted** | Now "holding other things constant" / covariates and dependence. | | G9 regression "holding rank constant" | **accepted** | Now "holding other things constant" / covariates and dependence. |
-| C1–C6 re-checked | **rejection stands** | Generic confirmed: namespace start pages are root-namespace pages. |+| C1–C6 re-checked | **rejection does not stand for provenance pages** | The root-namespace rule holds for content namespace start pages, but this page and the other provenance mirrors require a leading colon. |
  
 ===== Published ===== ===== Published =====
Line 109: Line 109:
 2026-08-27. ''dw.mjs put'' (JSON-RPC, summaries include "Authored by Claude"): 2026-08-27. ''dw.mjs put'' (JSON-RPC, summaries include "Authored by Claude"):
  
-  * new pages, no ''--if-rev'': ''design'', ''programming'', ''privacy'', ''writing'', ''practices'', ''statistics'', and the six ''provenance:*'' logs +  * new pages, no ''%%--if-rev%%'': ''design'', ''programming'', ''privacy'', ''writing'', ''practices'', ''statistics'', and the six ''provenance:*'' logs 
-  * ''start'' with ''--if-rev 1787840313'' → rev 1787840590 (''[[Statistics]]'' wired; security children no longer promised as unwritten)+  * ''start'' with ''%%--if-rev%% 1787840313'' → rev 1787840590 (''%%[[Statistics]]%%'' wired; security children no longer promised as unwritten)
  
-Post-publish re-run of the report: all six namespace ids **exist**; inventory still **48 exists / 5 missing** (platforms + facebook/twitter/tiktok/amazon). Rendered HTML: 0 ''bibtex_citekey'', 0 "could not be found" (no citations on the outlines). Red links on [[design]] and [[start]] are exactly those five platform pages. ''?do=export_raw'' on each published id starts with ''======'', not the HTML error page. No bibliography append, no bibtex purge.+Post-publish re-run of the report: all six namespace ids **exist**; inventory still **48 exists / 5 missing** (platforms + facebook/twitter/tiktok/amazon). Rendered HTML: 0 ''bibtex_citekey'', 0 "could not be found" (no citations on the outlines). Red links on [[:design]] and [[:start]] are exactly those five platform pages. ''?do=export_raw'' on each published id starts with ''======'', not the HTML error page. No bibliography append, no bibtex purge.
  
 ===== Addendum 2026-08-27: the five platform red links are resolved ===== ===== Addendum 2026-08-27: the five platform red links are resolved =====
  
-This log's //Scope decision// row "**Keep start's red links** for platforms" has been superseded. [[Design:Platforms]] was written on 2026-08-27; the four per-company sub-pages it promised (Facebook, Twitter, TikTok, Amazon) were **assessed against the corpus and deliberately not written**, and their red links were removed from both [[:start]] and [[design]].+This log's //Scope decision// row "**Keep start's red links** for platforms" has been superseded. [[Design:Platforms]] was written on 2026-08-27; the four per-company sub-pages it promised (Facebook, Twitter, TikTok, Amazon) were **assessed against the corpus and deliberately not written**, and their red links were removed from both [[:start]] and [[:design]].
  
 The evidence is a hand-audited candidate set per platform — TikTok 4 genuine papers of 7 candidates, Amazon 36% precision over 72 candidates, Twitter/X 73% over 142, Meta 67% over 151 — plus the observation that the access route that produced almost all the Twitter/X body no longer exists. Full query log, folds and audits: **[[provenance:design:platforms]]**. The evidence is a hand-audited candidate set per platform — TikTok 4 genuine papers of 7 candidates, Amazon 36% precision over 72 candidates, Twitter/X 73% over 142, Meta 67% over 151 — plus the observation that the access route that produced almost all the Twitter/X body no longer exists. Full query log, folds and audits: **[[provenance:design:platforms]]**.
Line 311: Line 311:
 OK — inventory matches live wiki; corpus frame matches OVERVIEW.md. OK — inventory matches live wiki; corpus frame matches OVERVIEW.md.
 </file> </file>
 +
 +===== 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.
 +
 +===== Link-hygiene sweep, 2026-09-17 =====
 +
 +The fresh rendered-DOM sweep found that the earlier C1–C6 rejection was wrong for provenance pages: bare root links resolved inside the ''provenance:'' namespace. The log now records that distinction, the affected links are root-anchored, and the post-save DOM was re-checked for red links. No figures or citations changed.
 +
 +
 +===== Namespace-table reconciliation, 2026-09-21 =====
 +
 +Item: ''wiki-sweep-figures'' / //reconcile the seven namespace tables and their counts//. This section is the joint log for all seven; [[provenance:programming]], [[provenance:privacy]], [[provenance:security]], [[provenance:statistics]], [[provenance:practices]] and [[provenance:writing]] each carry their own row and point here.
 +
 +==== What was wrong ====
 +
 +Three things, of which only one was a wrong number on a page.
 +
 +  * **programming published two different child counts, and both were wrong.** The WRAP box said "All **19** children below are written"; the //Methodology// sentence three screens below said "The **18** / **2**". The namespace held **22** pages. [[Programming:Crawler detection]] (56,859 bytes), [[Programming:Crawler:LLM agents]] (40,294 bytes) and [[Programming:Deployment]] (60,280 bytes) were live pages in this namespace with **no row in any table on their own namespace page**, so the only route to them was a direct link from a sibling or the search box.
 +  * **Three pages leaned on what [[:start]] promises**, which [[:start]] stopped doing when it was rewritten on 2026-09-07 to route rather than enumerate. design's box counted "**All 11** pages [[:start]] used to promise here"; statistics' box said "[[:start]] used to list them inline without a namespace landing"; security's said the page "exists so a reader landing from [[:start]] is not sent into an empty namespace". None of the three is false, and all three make a namespace page's own inventory depend on a page that no longer holds one.
 +  * **The report script was the defect, not just its output.** ''report_namespace_overviews.mjs'' carried a hand-maintained ''CHILDREN'' array of 43 entries with an ''expected: exists|missing'' bit, and FAILed when the live wiki disagreed with the array. That is the wrong direction — it guarded the array, not the page — and it had been failing on its own stale inventory since [[Design:Platforms]] was written. **No guard on this wiki compared a namespace page's table to its namespace**, which is exactly how design carried a 12-row table next to a 13-page namespace in September and how programming carried a 19-row table next to a 22-page one until today.
 +
 +==== Two claims in the brief that were already fixed ====
 +
 +Rejected as findings, because a cosmetic re-edit is worse than saying so:
 +
 +  * **design: table has 12 rows, namespace has 13, [[Design:Existing datasets]] missing entirely.** Fixed on 2026-09-11; on 2026-09-21 the table has 18 rows and the namespace 18 pages, and existing_datasets is row 10. The //Methodology// section already narrated the correction.
 +  * **security: the box says [[Security:VirusTotal]] remains a red link.** That page was created 2026-08-27 (rev 1787838295) and the box was corrected on 2026-09-09 (rev 1788952164), in the edit that added the sixth child. Verified today: 27,629 bytes, and the rendered DOM of [[:security]] carries no ''wikilink2'' span. The box's **start**-dependent framing was still there and was rewritten; the red-link claim was not.
 +
 +==== The script, rewritten ====
 +
 +''scripts/report_namespace_overviews.mjs'' now has **no inventory**. It enumerates each namespace from ''core.listPages'' at depth 0 (depth 1 silently returns the top two levels — 88 of 160 pages on 2026-09-03), parses each namespace page's own table rows out of its wiki source, and compares the two sets **in both directions**:
 +
 +  * a page in the namespace that no table row links to → ''MISSING_FROM_TABLE''
 +  * a table row whose target is not a page → ''RED_LINK_IN_TABLE''
 +
 +A one-sided or size-only check passes on a table that lost one row and gained one red link. It also refuses a namespace whose table links the same page twice, and asserts that children + landings + named top-level pages sums to the content-page total, so a namespace this report does not know about cannot hide.
 +
 +**Before the edits** (''node scripts/report_namespace_overviews.mjs'', exit 1):
 +
 +<code>
 +FAILURES (3):
 +  programming: MISSING_FROM_TABLE programming:crawler:llm_agents (40294 bytes, live page, no table row)
 +  programming: MISSING_FROM_TABLE programming:crawler_detection (56859 bytes, live page, no table row)
 +  programming: MISSING_FROM_TABLE programming:deployment (60280 bytes, live page, no table row)
 +</code>
 +
 +design, privacy, security, statistics, practices and writing were already ''equal'' in both directions before this sitting touched them. Their counts were re-derived, not changed.
 +
 +==== Mutation test of the guard ====
 +
 +Reading a set comparison is not testing it, and a guard built from one source can compare it to itself. ''sh scripts/report_namespace_overviews_mutations.sh <dir>'' breaks the table side four ways against a ''%%--pages-from%%'' directory of page sources and requires the guard to name each break. M3 is the one that matters: it drops a real row //and// adds a red link, so the row count is unchanged at 8 vs 8 and only a set comparison can see it.
 +
 +<code>
 +=== control: unmutated sources
 +FAILURES (3):
 +  programming: MISSING_FROM_TABLE programming:crawler:llm_agents (40294 bytes, live page, no table row)
 +  programming: MISSING_FROM_TABLE programming:crawler_detection (56859 bytes, live page, no table row)
 +  programming: MISSING_FROM_TABLE programming:deployment (60280 bytes, live page, no table row)
 +
 +PASS  M1 dropped row  -> guard reported: MISSING_FROM_TABLE design:sampling
 +PASS  M2 red link  -> guard reported: RED_LINK_IN_TABLE privacy:supercookies
 +PASS  M3 swap, count unchanged  -> guard reported: MISSING_FROM_TABLE statistics:biases
 +PASS  M3 swap, count unchanged  -> guard reported: RED_LINK_IN_TABLE statistics:effect_sizes
 +PASS  M4 duplicate row  -> guard reported: table links writing:conferences twice
 +
 +all mutations caught
 +</code>
 +
 +==== After: the unedited report output ====
 +
 +''node scripts/report_namespace_overviews.mjs'' against the live wiki after the seven saves, exit 0:
 +
 +<file text report_namespace_overviews-output.txt>
 +========================================================================
 +A. CORPUS FRAME (OVERVIEW.md populations, re-derived)
 +========================================================================
 +PUBLISHED_CORPUS          5859
 +PUBLISHED_EMPIRICAL       5118  87.4%
 +PUBLISHED_CRAWLED         1120  19.1%
 +PUBLISHED_WEB             1622  27.7%
 +PUBLISHED_INFERENTIAL     1762  30.1%
 +PUBLISHED_HUMAN_SUBJECTS  1357  23.2%
 +PUBLISHED_LEGAL           402  6.9%
 +PUBLISHED_ANNOTATED       3318  56.6%
 +
 +Venues: CCS, IMC, NDSS, PETS, USENIX Security, TheWebConf, IEEE S&P.
 +PUBLISHED_VENUE_COUNT     7
 +PUBLISHED_YEAR_START      2010
 +PUBLISHED_YEAR_END        2026
 +2025-2026 are provisional (CCS/IMC 2026 not held; S&P/WWW 2026 thin by construction).
 +These are the only paper-counts the namespace pages are allowed to print.
 +Child-page headline figures belong on the children.
 +
 +========================================================================
 +B. LIVE PAGE INDEX
 +========================================================================
 +PUBLISHED_WIKI_PAGE_TOTAL 188   (core.listPages, depth 0)
 +PUBLISHED_CONTENT_PAGES   97   (excluding provenance: mirrors)
 +PUBLISHED_PROVENANCE_PAGES 91
 +PUBLISHED_NS_COUNT        7
 +
 +========================================================================
 +C. NAMESPACE vs ITS OWN PUBLISHED TABLE
 +========================================================================
 +children = pages whose id starts "<ns>:" in the live index (provenance: excluded).
 +rows     = table rows on the namespace page whose first cell links inside <ns>:.
 +The two must be equal as SETS, not merely in size: a table that dropped one
 +page and gained one red link has the right count and the wrong content.
 +
 +PUBLISHED_DESIGN_CHILDREN 18
 +PUBLISHED_DESIGN_TABLE_ROWS 18
 +PUBLISHED_PROGRAMMING_CHILDREN 22
 +PUBLISHED_PROGRAMMING_TABLE_ROWS 22
 +PUBLISHED_PRIVACY_CHILDREN 18
 +PUBLISHED_PRIVACY_TABLE_ROWS 18
 +PUBLISHED_SECURITY_CHILDREN 7
 +PUBLISHED_SECURITY_TABLE_ROWS 7
 +PUBLISHED_STATISTICS_CHILDREN 8
 +PUBLISHED_STATISTICS_TABLE_ROWS 8
 +PUBLISHED_PRACTICES_CHILDREN 4
 +PUBLISHED_PRACTICES_TABLE_ROWS 4
 +PUBLISHED_WRITING_CHILDREN 2
 +PUBLISHED_WRITING_TABLE_ROWS 2
 +
 +Namespace    Pages in namespace  Rows in its table  Sets
 +-----------  ------------------  -----------------  -----
 +design       18                  18                 equal
 +programming  22                  22                 equal
 +privacy      18                  18                 equal
 +security     7                   7                  equal
 +statistics   8                   8                  equal
 +practices    4                   4                  equal
 +writing      2                   2                  equal
 +
 +PUBLISHED_NS_CHILD_TOTAL  79   (pages inside the seven namespaces)
 +PUBLISHED_TOP_LEVEL       11
 +PUBLISHED_LANDING_PAGES   7
 +
 +========================================================================
 +D. PER-NAMESPACE DETAIL
 +========================================================================
 +
 +--- design --- 18 pages, 18 table rows
 +  design:algorithm_audits                            36033 bytes  in table
 +  design:archives                                    42001 bytes  in table
 +  design:automated_measurements                      22225 bytes  in table
 +  design:blocking_and_geodifference                  52866 bytes  in table
 +  design:connected_tv                                64226 bytes  in table
 +  design:crawling_location                           31740 bytes  in table
 +  design:dns                                         68076 bytes  in table
 +  design:existing_datasets                           42216 bytes  in table
 +  design:ip_classification                           78050 bytes  in table
 +  design:longitudinal                                59486 bytes  in table
 +  design:mobile_and_app_measurement                  58332 bytes  in table
 +  design:ownership_resolution                        71898 bytes  in table
 +  design:platforms                                   54667 bytes  in table
 +  design:platforms:ad_archives                       70351 bytes  in table
 +  design:sampling                                    55740 bytes  in table
 +  design:user_studies                                34922 bytes  in table
 +  design:website_classification                     125188 bytes  in table
 +  design:website_selection                           33899 bytes  in table
 +
 +--- programming --- 22 pages, 22 table rows
 +  programming:cloudflare_radar                       23912 bytes  in table
 +  programming:crawler                                58342 bytes  in table
 +  programming:crawler:foxhound                       69398 bytes  in table
 +  programming:crawler:llm_agents                     40294 bytes  in table
 +  programming:crawler:openwpm                        68843 bytes  in table
 +  programming:crawler:pagegraph                      21594 bytes  in table
 +  programming:crawler:panoptichrome                  33720 bytes  in table
 +  programming:crawler:tracker_radar_collector        47819 bytes  in table
 +  programming:crawler:webxray                        27781 bytes  in table
 +  programming:crawler_detection                      56859 bytes  in table
 +  programming:crux                                    8394 bytes  in table
 +  programming:deployment                             60280 bytes  in table
 +  programming:docker                                 24451 bytes  in table
 +  programming:filter_lists                           69322 bytes  in table
 +  programming:interaction                            56951 bytes  in table
 +  programming:internet_scanning                      50559 bytes  in table
 +  programming:multilingual_support                   35544 bytes  in table
 +  programming:registration                           38174 bytes  in table
 +  programming:similarweb                              4514 bytes  in table
 +  programming:stateful_stateless                     62619 bytes  in table
 +  programming:traffic_files                          45948 bytes  in table
 +  programming:tranco                                 27817 bytes  in table
 +
 +--- privacy --- 18 pages, 18 table rows
 +  privacy:ads_txt                                    45391 bytes  in table
 +  privacy:age_assurance                              49599 bytes  in table
 +  privacy:browser_extensions                         62948 bytes  in table
 +  privacy:browser_protection                         66557 bytes  in table
 +  privacy:browser_storage                            59839 bytes  in table
 +  privacy:consent                                    72901 bytes  in table
 +  privacy:cookie_syncing                             50098 bytes  in table
 +  privacy:cookies                                    71663 bytes  in table
 +  privacy:darkpatterns                               15132 bytes  in table
 +  privacy:data_subject_rights                        62247 bytes  in table
 +  privacy:email_tracking                             66624 bytes  in table
 +  privacy:fingerprinting                             69714 bytes  in table
 +  privacy:javascript                                 65003 bytes  in table
 +  privacy:policies                                   45706 bytes  in table
 +  privacy:privacy_sandbox                            56115 bytes  in table
 +  privacy:requests                                   55932 bytes  in table
 +  privacy:server_side_tracking                       46965 bytes  in table
 +  privacy:tcf_consent_strings                        56068 bytes  in table
 +
 +--- security --- 7 pages, 7 table rows
 +  security:authentication                            60123 bytes  in table
 +  security:email_authentication                      57854 bytes  in table
 +  security:headers                                   24197 bytes  in table
 +  security:phishing                                  26710 bytes  in table
 +  security:tls_certificates                          26604 bytes  in table
 +  security:virustotal                                27629 bytes  in table
 +  security:web_vulnerabilities                       25369 bytes  in table
 +
 +--- statistics --- 8 pages, 8 table rows
 +  statistics:annotation                              57987 bytes  in table
 +  statistics:biases                                  49359 bytes  in table
 +  statistics:how_many_sites                          55508 bytes  in table
 +  statistics:hypothesis_testing                      64191 bytes  in table
 +  statistics:interrater_agreement                    41707 bytes  in table
 +  statistics:pvalue_corrections                      63056 bytes  in table
 +  statistics:regression                              73042 bytes  in table
 +  statistics:study_preregistration                   50988 bytes  in table
 +
 +--- practices --- 4 pages, 4 table rows
 +  practices:ethics                                   72279 bytes  in table
 +  practices:legal_enforcement                        52204 bytes  in table
 +  practices:notifying_websites                       71782 bytes  in table
 +  practices:public_relations                         55975 bytes  in table
 +
 +--- writing --- 2 pages, 2 table rows
 +  writing:conferences                                14640 bytes  in table
 +  writing:literature_review                          28004 bytes  in table
 +
 +========================================================================
 +E. LITERATURE: NO LANDING PAGE (recorded decision)
 +========================================================================
 +PUBLISHED_LITERATURE_PAGES 2
 +  literature:bibliography  485378 bytes
 +  literature:corpus  88068 bytes
 +
 +literature: has no landing page, which is why [[:start]] links its two pages
 +directly rather than through a namespace row. Two pages do not need a
 +landing: a landing page exists to carry an annotated list too long for the
 +index, and a list of two is not. Recorded 2026-09-21; revisit if a third
 +literature: page is written.
 +
 +========================================================================
 +F. WHAT THIS REPORT DOES NOT PUBLISH
 +========================================================================
 +Headline figures from child pages (Tranco 56.4%, OpenWPM 60 papers, ...).
 +Those have their own report scripts. Copying them here would go stale when
 +a parallel sitting refreshes the child.
 +Full-text sweeps: none. No fold, no residue.
 +Whether a page is a stub: that is a judgement, not a measurement. The byte
 +counts in section D are the input to that judgement, not the judgement.
 +
 +OK - every namespace table matches its namespace in both directions;
 +corpus frame matches OVERVIEW.md; content pages sum.
 +</file>
 +
 +==== What each count counts ====
 +
 +Every one of the seven //Methodology and limitations// sections now says the same thing in the same words, because the ambiguity is what let design explain a 12-against-13 mismatch as if it were a fact about the wiki: the published number is **both** the number of rows in the table above **and** the number of pages whose id begins ''<namespace>:'' in the live index, and the script refuses to pass unless those are the same set. They are not the same quantity in general, and a page that states only one of them cannot detect a page that is in neither.
 +
 +^ Namespace ^ Pages in namespace ^ Rows in its table ^ Published count, before ^ After ^
 +| design | 18 | 18 | 18 (box said 11, meaning start's old promise) | 18 |
 +| programming | 22 | 22 | 19 in the box, 18 in methodology | 22 |
 +| privacy | 18 | 18 | 18 | 18 |
 +| security | 7 | 7 | seven | seven |
 +| statistics | 8 | 8 | 8 | 8 |
 +| practices | 4 | 4 | 4 | 4 |
 +| writing | 2 | 2 | 2 ("Both children") | 2 |
 +
 +The **2** on programming — CrUX and Similarweb as short instrument notes — is a judgement about depth, not a measurement, and the page now says so. Their live byte counts (8,394 and 4,514) are unchanged from 2026-08-27 and the column header was re-dated to 2026-09-21 on that basis.
 +
 +==== The six pages that were reachable only through start ====
 +
 +The brief asked these be verified as present in their namespace tables. Section D of the output above shows each as ''in table''; five were named:
 +
 +^ Page ^ In its namespace table ^ Bytes ^
 +| [[Programming:Crawler:Foxhound]] | yes, //Driving the browser// | 69,398 |
 +| [[Programming:Crawler:PanoptiChrome]] | yes, //Driving the browser// | 33,720 |
 +| [[Programming:Crawler:webXray]] | yes, //Driving the browser// | 27,781 |
 +| [[Programming:Stateful stateless]] | yes, //After the page loads// | 62,619 |
 +| [[Privacy:Email tracking]] | yes, //The pages// | 66,624 |
 +| [[Programming:Crawler:LLM agents]] | **no — added by this sitting** | 40,294 |
 +
 +The sixth was the one that was still missing.
 +
 +==== Decision: literature: keeps no landing page ====
 +
 +''literature:'' holds exactly two pages — [[literature:bibliography]] (485,378 bytes) and [[literature:corpus]] (88,068 bytes) — and has no landing page, which is why [[:start]] links both directly instead of through a namespace row. **Recorded decision: it stays that way.** A landing page exists to carry an annotated list too long for the index and a boundary statement about where the namespace stops; a list of two needs neither, and adding one would put a third page in the namespace purely to describe the other two. The seven namespaces are seven because ''literature:'' is not one of them, and [[:start]]'s "Outside the seven" sentence already says so. Revisit if a third ''literature:'' page is written. Section E of the report output prints the enumeration this rests on, so a third page changes the output rather than only the prose.
 +
 +==== Checks run ====
 +
 +  * ''node scripts/report_namespace_overviews.mjs'' — exit 1 before (3 failures), exit 0 after. Output embedded above.
 +  * ''sh scripts/report_namespace_overviews_mutations.sh'' — 5 of 5 mutations caught.
 +  * ''check_wrap.mjs'' and ''check_typography.mjs'' on all seven sources (run again by ''dw.mjs'' on the save path).
 +  * Rendered DOM (''do=export_xhtml'') of all seven after saving: design 1 table / 19 ''tr'', programming 8 / 30, privacy 1 / 19, practices 1 / 5, statistics 1 / 9, security 2 / 12, writing 1 / 3 — and **zero** ''wikilink2'' spans on any of them.
 +  * ''node scripts/sitemap.mjs'' site-wide after saving: 189 pages, "Promised but missing: 0", "UNDECLARED (defects): 0". Positive control: appending ''%%[[Writing:Nonexistent page]]%%'' to the cached source moved it to 1 undeclared defect, so the zero is a measurement and not a silent parser failure. The sitemap page cache was overwritten with the saved sources first — it never expires on its own.
 +
 +==== Reviewers ====
 +
 +One ''model: sonnet'' figures-vs-script pass, per the item's review layer. No citations pass: no ''%%{[citekey]}%%'' and no quoted claim was touched on any of the seven pages.
 +
 +===== Link resolution on this page, 2026-09-22 =====
 +
 +Item: ''wiki-sweep-figures'' / //provenance:design bare links resolve to provenance: siblings//.
 +
 +==== What was wrong ====
 +
 +The //Link-hygiene sweep, 2026-09-17// section above says the affected links
 +were root-anchored. That is true of the links that sweep looked at
 +(''%%[[start]]%%'', ''%%[[contributing]]%%'') and false of seventeen others on
 +this page. In the live rendered DOM of 2026-09-21, ''%%[[design]]%%'' resolved
 +to ''provenance:design'' — this page linking to itself — and
 +''%%[[statistics]]%%'', ''%%[[practices]]%%'', ''%%[[programming]]%%'',
 +''%%[[privacy]]%%'' and ''%%[[writing]]%%'' resolved to the sibling logs in
 +''provenance:'' rather than to the content pages the sentences are about.
 +
 +None of these ever rendered red, because ''provenance:statistics'' and the rest
 +exist. That is the whole failure mode: DokuWiki resolves a colon-free target
 +relative to the current page's namespace **first**, and falls back to the root
 +only when the relative page does not exist. A wrong target is therefore silent
 +in exactly the case where a sibling happens to exist, and visible only where one
 +does not. Checked on the live wiki the same day: ''%%[[start]]%%'' on
 +''provenance:privacy:browser_storage'' renders ''data-wiki-id="start"'', because
 +''provenance:privacy:start'' does not exist.
 +
 +==== What changed ====
 +
 +Seventeen links on this page, decided one at a time. Fifteen were meant to be
 +the content pages and are now root-anchored:
 +
 +^ Where ^ Was ^ Now ^
 +| Intro sentence | ''%%[[design]]%%'' + ''%%[[programming]] [[privacy]] [[writing]] [[practices]] [[statistics]]%%'' | ''%%[[:design]]%%'' and the five ''%%[[:namespace]]%%'' equivalents — the sitting wrote the content pages |
 +| //Scope decision//, statistics-landing row | ''%%[[Statistics]]%%'' | ''%%[[:statistics]]%%'' |
 +| //Queries// table, //On the page?// column (Q2, Q4–Q8, Q11) | ''%%[[practices]] [[privacy]] [[statistics]] [[programming]]%%'' | root-anchored; the column names the content page that prints the figure |
 +| //Addendum 2026-08-27// closing sentence | ''%%[[design]]%%'' | ''%%[[:design]]%%'' |
 +
 +Two were not links at all and are now nowiki, matching how row C1–C6 already
 +writes them: the G2 row and the //Published// bullet both **quote the markup
 +added to ''start''**, so ''%%[[Statistics]]%%'' there is a sample of source, not
 +a route. The explicit ''%%[[provenance:programming]]%%''-style links in the
 +2026-09-21 section and ''%%[[provenance:design:platforms]]%%'' in the addendum
 +are correct as written and were left alone: those sentences do mean the sibling
 +log.
 +
 +No figure, citekey or quoted claim was touched.
 +
 +==== The sweep that reported zero ====
 +
 +''scripts/sitemap.mjs'' ran site-wide on 2026-09-21 and printed "Promised but
 +missing: 0 / UNDECLARED (defects): 0" with all seventeen of these live. It was
 +not wrong; it was blind. Its ''toId'' strips a leading colon, so
 +''%%[[design]]%%'' and ''%%[[:design]]%%'' are the same target to it, and both
 +name a page that exists. The script models **missing** targets, not **wrong**
 +ones.
 +
 +It now also collects every colon-free link written on a page that sits inside a
 +namespace, and splits them:
 +
 +  * **resolves to a namespace sibling** — the link already points somewhere other than the root page of the same name. A defect; the run exits 1 and names the pages.
 +  * **falls back to root today** — reads correctly now, flips the day somebody creates the sibling. Reported, not gated.
 +
 +The sibling test is strict existence, not the script's ''resolves()'' helper:
 +that helper treats ''x:start'' as resolving whenever ''x'' exists, which is
 +right for "does the wiki have this page" and wrong for relative resolution. Its
 +first draft used ''resolves()'' and reported the ''provenance:privacy:browser_storage''
 +link above as a defect when the live DOM says it is not.
 +
 +==== Checks run ====
 +
 +  * ''node scripts/sitemap.mjs'' before the edit: 189 pages, "Promised but missing: 0", "UNDECLARED (defects): 0", and the new counter reading **42** bare colon-free links inside a namespace, **38** of them resolving to a sibling across **7** pages — **17** on this one. Exit 1.
 +  * ''node scripts/sitemap.mjs'' after the edit: **0** on this page. The other six ''provenance:'' pages still fail and are listed below; they are not this item.
 +  * Rendered DOM (''do=export_xhtml'') after saving, counted by ''data-wiki-id'': zero ''provenance:design'' self-links, and ''provenance:statistics'' / ''provenance:practices'' / ''provenance:programming'' / ''provenance:privacy'' / ''provenance:writing'' down to the one explicit link each that the 2026-09-21 section writes out in full.
 +  * ''node scripts/report_namespace_overviews.mjs'' — exit 0, "OK — every namespace table matches its namespace in both directions". Every figure in the //Queries// table whose row was edited still matches section A of that output: 5,859 / 5,118 / 1,120 / 1,622 / 1,762 / 1,357 / 402 / 3,318, and the 7 venues and the 2010–2026 window. The stub bytes on the Q11 row read 8,394 / 4,514 for CrUX and Similarweb, which section D confirms; the third, 8,012 for ''programming:multilingual_support'', is a 2026-08-27 figure and that page is **35,544** bytes today. It is left as written because the row records what the 2026-08-27 sitting measured, and the 2026-09-21 section above already restricts its "unchanged" claim to the first two.
 +
 +==== Left for a later sitting ====
 +
 +The same defect is live on six sibling logs and was found by the same run, but
 +each belongs to that page's own item, not this one: ''provenance:roadmap'' (8
 +self-links written ''%%[[roadmap]]%%'', plus ''%%[[Security]]%%'' →
 +''provenance:security''), ''provenance:design''-style pairs on
 +''provenance:practices'', ''provenance:privacy'', ''provenance:programming'' and
 +''provenance:writing'' (2 each), and ''provenance:statistics'' (4). Until they
 +are fixed ''scripts/sitemap.mjs'' exits 1 site-wide and names them; that is the
 +gate working, not a regression.
 +
 +==== Reviewer finding, accepted: "bytes" in the frozen report output are characters ====
 +
 +The figures-vs-script pass raised a figure this item did not touch. The //Parallel sittings// table says ''design:automated_measurements'' was published at **20,068** bytes and ''design:user_studies'' at **34,141**; the //Unedited report output// section, frozen the same day, lists the same two pages at **19,966** and **33,966**. Nothing on the page reconciled them.
 +
 +Both are right, in different units, and the revision that settles it is still fetchable:
 +
 +  * ''curl "…?id=design:automated_measurements&rev=1787840280&do=export_raw"'' → **20,068** bytes, **19,966** characters.
 +  * ''curl "…?id=design:user_studies&rev=1787840285&do=export_raw"'' → **34,141** bytes, **33,966** characters.
 +
 +The prose figures are DokuWiki's own revision sizes (''dw.mjs history'' prints ''C 20068'' and ''C 34141'' for the creating revisions), which are bytes. The 2026-08-27 report measured the export_raw body with JavaScript ''.length'', which counts UTF-16 code units — so every em-dash and curly quote in those pages costs one "byte" less than it should. The gaps, 102 and 175, are the multibyte-character counts of those two revisions, not drift.
 +
 +**Consequence, and why nothing was edited.** Every "N bytes" in the //Unedited report output// section is a character count wearing a byte label. Today's ''report_namespace_overviews.mjs'' does not have this defect — it reads ''size'' from ''core.listPages'', which is bytes — so the two are not comparable and a difference between them is not evidence of a page changing. The frozen section is left unedited, as it already says it is. The label is wrong; the measurement is not, and re-typing numbers inside a frozen record to fix a unit would destroy the only thing that record is for. The live figure that this does affect is the Q11 stub row: ''programming:crux'' 8,394 and ''programming:similarweb'' 4,514 are the same in both units and match today's script exactly, so the 2026-09-21 section's "unchanged" claim about those two stands.
 +
 +==== Reviewers ====
 +
 +One ''model: sonnet'' figures-vs-script pass, per the item's review layer. No
 +citations pass: no ''%%{[citekey]}%%'' and no quoted claim was touched.
  
provenance/design.1787862146.txt.gz · Last modified: by karel.kubicek.claude