| Both sides previous revisionPrevious revisionNext revision | Previous revision |
| provenance:design:website_selection [2026/09/03 20:43] – Add section 13: site-wide audit that no page dates Alexa's retirement to 2023 (160 pages, 0 suspect), the mutation-tested audit script and its output, primary-source re-verification, the design:longitudinal precision fix, and the four-pass review log. Aut karel.kubicek.claude | provenance:design:website_selection [2026/09/17 08:14] (current) – Record root Artifacts link repair; Authored by Claude karel.kubicek.claude |
|---|
| ^ Finding ^ Verdict ^ | ^ Finding ^ Verdict ^ |
| | Page said "Tranco's **methodology** still says CC BY-SA 4.0". Live methodology HTML has no CC BY/CC BY-SA string. | **Accepted.** The licence line is on Tranco's **homepage**, not the methodology page. Content, [[programming:tranco]] and [[design:website_classification]] now say homepage vs methodology vs Google CC BY 4.0. | | | Page said "Tranco's **methodology** still says CC BY-SA 4.0". Live methodology HTML has no CC BY/CC BY-SA string. | **Accepted.** The licence line is on Tranco's **homepage**, not the methodology page. Content, [[programming:tranco]] and [[design:website_classification]] now say homepage vs methodology vs Google CC BY 4.0. | |
| | Tranco 46W9X, Farsight paragraph, Alexa Wayback, Umbrella hostnames + TLD file 10,905, Majestic, CrUX CC BY 4.0, Radar 403, Quantcast redirect, SecRank, Farsight not in providers enum, ''gstatic.com'' rank 3, ''compare_ranks.py --wiki'' | Confirmed 2026-08-27. | | | Tranco 46W9X, Farsight paragraph, Alexa Wayback, Umbrella hostnames + TLD file 10,905, Majestic, CrUX CC BY 4.0, Radar 403, Quantcast redirect, SecRank, Farsight not in providers enum, ''gstatic.com'' rank 3, ''compare_ranks.py %%--wiki%%'' | Confirmed 2026-08-27. | |
| |
| === Pass 4 — generic, no checklist === | === Pass 4 — generic, no checklist === |
| | SimilarWeb "paywalled" does not say whether you can pin an export | **Accepted.** Status row now requires a keepable contract export; no public id. | | | SimilarWeb "paywalled" does not say whether you can pin an export | **Accepted.** Status row now requires a keepable contract export; no public id. | |
| | Repeated sampling cross-references | **Rejected.** The opening split and one What-to-report pointer are the boundary with [[design:sampling]]; cutting them would bury it. | | | Repeated sampling cross-references | **Rejected.** The opening split and one What-to-report pointer are the boundary with [[design:sampling]]; cutting them would bury it. | |
| |
| |
| |
| ===== 13. 2026-09-03: site-wide Alexa date audit ===== | ===== 13. 2026-09-03: site-wide Alexa date audit ===== |
| | Population | **160 wiki pages** — the whole wiki (87 content, 73 ''provenance:''), as the union of ''?do=sitemap'' (148), ''core.listPages'' at depth 0 (160) and ''core.searchPages'' for Alexa / alexa.com / discontinued / retired / retiring (83 distinct) | | | Population | **160 wiki pages** — the whole wiki (87 content, 73 ''provenance:''), as the union of ''?do=sitemap'' (148), ''core.listPages'' at depth 0 (160) and ''core.searchPages'' for Alexa / alexa.com / discontinued / retired / retiring (83 distinct) | |
| | Unit of analysis | not the page and not the line but the **unit**: a line's body with ''%%((footnote))%%'' bodies removed, plus each footnote body separately | | | Unit of analysis | not the page and not the line but the **unit**: a line's body with ''%%((footnote))%%'' bodies removed, plus each footnote body separately | |
| | Hits | **18 units** pair a death verb with a 2023 token inside one unit on a line mentioning Alexa | | | Hits, before this page was written | **18 units** pair a death verb with a 2023 token inside one unit on a line mentioning Alexa. **0 SUSPECT.** This is the run that cleared the wiki | |
| | Verdict | **0 SUSPECT.** 13 excused, 5 reported as ''beyond-window'' residue. **All 18 were read by hand**, not taken from the verdict column | | | Hits, after this page was published | **37 units. 0 SUSPECT on content pages**, 11 ''provenance-note'', 1 ''corpus-slug'', 9 ''beyond-window'' — see §13.3.1 | |
| | The 13 excused, honestly | 11 ''ok-tranco-swap'' + 2 ''ok-history''. But //only about five of the 11 actually describe the swap//: the rest are publication-year sentences ("66 papers from 2023–2026 still name it", "Tranco overtook Alexa in 2023") or correction records that the ''TRANCO'' rule excused because "Tranco" happened to sit in the ±90 window. The verdict label is a triage bucket, not a claim about each line | | | Read by hand | **all of them**, both runs, not taken from the verdict column | |
| | | The excused, honestly | ''ok-tranco-swap'' is 14 on the current run, but //only about five actually describe the swap//: the rest are publication-year sentences ("66 papers from 2023–2026 still name it", "Tranco overtook Alexa in 2023") or correction records that the ''TRANCO'' rule excused because "Tranco" happened to sit in the ±90 window. The verdict label is a triage bucket, not a claim about each line | |
| | Unexercised rules | ''ok-literature-year'' (0) and ''corpus-slug'' (0). Both stay in the script and are printed with their zeros. ''ok-literature-year'' reads as 0 partly because ''TRANCO'' is tested first and gets there before it — an ordering artefact, not evidence the shape is absent | | | Unexercised rules | ''ok-literature-year'' (0) and ''corpus-slug'' (0). Both stay in the script and are printed with their zeros. ''ok-literature-year'' reads as 0 partly because ''TRANCO'' is tested first and gets there before it — an ordering artefact, not evidence the shape is absent | |
| | Result | Nothing on the wiki dates Alexa's retirement to 2023. **No content page was edited for this defect.** | | | Result | Nothing on the wiki dates Alexa's retirement to 2023. **No content page was edited for this defect.** | |
| **Why footnotes are separate units.** The first version of this script analysed whole lines and **passed a mutation it should have caught**: replacing the body text of [[design:website_selection]]'s Alexa bullet with "Discontinued as of August 1, 2023" still exited 0, because the //footnote// attached to the same line contains the correct "May 1, 2022" and the rule accepted that as vouching for the sentence. On this wiki the claim is in the body and the source is in the footnote, so a footnote's correctness must never excuse a body claim. Splitting the units fixed it; the mutation output below is the proof. | **Why footnotes are separate units.** The first version of this script analysed whole lines and **passed a mutation it should have caught**: replacing the body text of [[design:website_selection]]'s Alexa bullet with "Discontinued as of August 1, 2023" still exited 0, because the //footnote// attached to the same line contains the correct "May 1, 2022" and the rule accepted that as vouching for the sentence. On this wiki the claim is in the body and the source is in the footnote, so a footnote's correctness must never excuse a body claim. Splitting the units fixed it; the mutation output below is the proof. |
| |
| **Why a proximity rule rather than a keyword rule.** "Alexa" and "2023" co-occur on **45 lines** of the **71 pages** that mention Alexa at all (''%%grep -i alexa *.txt | grep -c 2023%%'' over the exported sources), nearly all of them legitimate (66 papers published 2023–2026 still name Alexa; ''IMC/2023/tracking-profiling-…-alexa-echo-…'' is a corpus slug; Tranco's swap is a 2023 event). Flagging co-occurrence produces a list nobody reads. The defect is specifically a **death verb next to a 2023 date**, so that is what is matched, with a ±90-character window around the year checked for Tranco/CrUX/Radar/provider/default-list wording that would make it correct. | **Why a proximity rule rather than a keyword rule.** "Alexa" and "2023" co-occur on **102 lines** of the **71 pages** that mention Alexa at all (''%%grep -i alexa *.txt | grep -c 2023%%'' over the exported sources), nearly all of them legitimate (66 papers published 2023–2026 still name Alexa; ''IMC/2023/tracking-profiling-…-alexa-echo-…'' is a corpus slug; Tranco's swap is a 2023 event). Flagging co-occurrence produces a list nobody reads. The defect is specifically a **death verb next to a 2023 date**, so that is what is matched, with a ±90-character window around the year checked for Tranco/CrUX/Radar/provider/default-list wording that would make it correct. |
| |
| **Both halves of that rule were wrong in the first draft, and reviewers broke them.** The window was 60 characters and the death vocabulary was six verbs, so //"Alexa was decommissioned in 2023"// passed (the verb was not in the list), an ordinary verbose sentence putting "discontinued" ~76 characters from the year passed, and //"switched the service off"// — a split phrasal verb that [[design:website_classification]]'s own footnote uses — was invisible. Now: **29 death-verb alternatives** including split phrasal forms, and ''PROX = 200''. All three phrasings are in the mutation suite (M6, M7, M10) so a future edit to those regexes cannot silently undo the fix. | **Both halves of that rule were wrong in the first draft, and reviewers broke them.** The window was 60 characters and the death vocabulary was six verbs, so //"Alexa was decommissioned in 2023"// passed (the verb was not in the list), an ordinary verbose sentence putting "discontinued" ~76 characters from the year passed, and //"switched the service off"// — a split phrasal verb that [[design:website_classification]]'s own footnote uses — was invisible. Now: **29 death-verb alternatives** including split phrasal forms, and ''PROX = 200''. All three phrasings are in the mutation suite (M6, M7, M10) so a future edit to those regexes cannot silently undo the fix. |
| |
| The general lesson outlives this script: **a keyword list and a magic constant are the weakest parts of any audit, and the only way to size either is to have someone attack it.** | The general lesson outlives this script: **a keyword list and a magic constant are the weakest parts of any audit, and the only way to size either is to have someone attack it.** |
| | |
| | === 13.3.1 Publishing this audit changed what it measures === |
| | |
| | The first run of the audit swept 160 pages and found 18 units, 0 SUSPECT. Then §13 was published — and §13 is, by construction, a page densely covered in sentences that pair "Alexa" with 2023 and a death verb: the work item quoted, the old error quoted to correct it, ten mutation strings including a literal //"Alexa was shut down on 1 August 2023"//, and a review log full of what reviewers found. Re-run against the published wiki, the audit reported **16 SUSPECT — every one of them its own documentation.** |
| | |
| | That is not a nuisance to suppress. It is the shape of the problem, and it forced two changes that make the script better rather than merely quieter: |
| | |
| | * **Fenced blocks are stripped.** ''%%<code>%%'' and ''%%<file>%%'' contents are not prose claims; the audit's own published listing and its mutation fixtures are the proof. ''sitemap.mjs'' strips the same constructs before hunting red links, for the same reason. Blocks are blanked line-for-line so reported line numbers still point at the right source line. |
| | * **''provenance:'' hits are listed, not failed.** A provenance page's job includes recording the error verbatim, so on those pages the pattern is expected. They go to a ''provenance-note'' bucket which is printed in full and does **not** set the exit code. ''SUSPECT'' is reserved for content pages, which is where a wrong date actually misleads a reader — and where the original bug was. |
| | |
| | **What this costs, stated plainly:** the audit no longer polices provenance prose. If a future run writes a wrong Alexa date into a ''provenance:'' page, this script will print it in the ''provenance-note'' list and exit 0. The mitigation is that the list is short (11 units) and the script's own summary line says //"read them, do not trust the label"//. A stronger version would keep failing on provenance pages and maintain an explicit allow-list of the sentences that are meant to quote the error — which is a maintenance burden this item did not justify, and is the honest reason it was not built. |
| |
| ==== 13.4 The script ==== | ==== 13.4 The script ==== |
| .replace(/\[\[([^\]]*)\]\]/g, ' $1 ') | .replace(/\[\[([^\]]*)\]\]/g, ' $1 ') |
| .replace(/https?:\/\/\S+/g, ' URL '); | .replace(/https?:\/\/\S+/g, ' URL '); |
| | |
| | // Fenced blocks are not prose claims. This script's own <file> listing and its |
| | // mutation fixtures ("Alexa was shut down on 1 August 2023") are published on |
| | // provenance:design:website_selection, and without this the audit reads its own |
| | // test data as 16 wiki defects. sitemap.mjs strips the same constructs before |
| | // looking for links, for the same reason. Blanked line-for-line so reported |
| | // line numbers still point at the right line of the source. |
| | const stripBlocks = (text) => text.replace( |
| | /<(code|file)\b[^>]*>[\s\S]*?<\/\1>/gi, |
| | (m) => m.replace(/[^\n]/g, ' ')); |
| |
| const rows = []; | const rows = []; |
| const ids = await allPageIds(); | const ids = await allPageIds(); |
| for (const id of ids) { | for (const id of ids) { |
| const lines = (await source(id)).split('\n'); | const lines = stripBlocks(await source(id)).split('\n'); |
| for (let i = 0; i < lines.length; i++) { | for (let i = 0; i < lines.length; i++) { |
| if (!/alexa/i.test(lines[i])) continue; | if (!/alexa/i.test(lines[i])) continue; |
| else if (HISTORY.test(window)) verdict = 'ok-history'; | else if (HISTORY.test(window)) verdict = 'ok-history'; |
| else if (LITERATURE.test(window)) verdict = 'ok-literature-year'; | else if (LITERATURE.test(window)) verdict = 'ok-literature-year'; |
| else verdict = 'SUSPECT'; | // A provenance: page's job includes recording the error, quoting the work |
| | // item, and logging what a reviewer found - all of which look exactly |
| | // like the defect. Those are listed for reading, not failed, and they do |
| | // not set the exit code. SUSPECT is reserved for content pages, which is |
| | // where a wrong date actually misleads a reader. |
| | else verdict = id.startsWith('provenance:') ? 'provenance-note' : 'SUSPECT'; |
| rows.push({ id, line: i + 1, unit: u.kind, verdict, | rows.push({ id, line: i + 1, unit: u.kind, verdict, |
| snippet: window.replace(/\s+/g, ' ').trim() }); | snippet: window.replace(/\s+/g, ' ').trim() }); |
| } | } |
| |
| const order = ['SUSPECT', 'ok-tranco-swap', 'ok-history', 'ok-literature-year', 'corpus-slug', 'beyond-window']; | const order = ['SUSPECT', 'ok-tranco-swap', 'ok-history', 'ok-literature-year', |
| | 'corpus-slug', 'provenance-note', 'beyond-window']; |
| console.log(`\npages scanned: ${ids.length}; death verb within ${PROX} chars of a 2023 token, ` + | console.log(`\npages scanned: ${ids.length}; death verb within ${PROX} chars of a 2023 token, ` + |
| `on a line mentioning Alexa: ${rows.length} unit(s)\n`); | `on a line mentioning Alexa: ${rows.length} unit(s)\n`); |
| } | } |
| const bad = rows.filter((r) => r.verdict === 'SUSPECT').length; | const bad = rows.filter((r) => r.verdict === 'SUSPECT').length; |
| | const notes = rows.filter((r) => r.verdict === 'provenance-note').length; |
| console.log(bad === 0 | console.log(bad === 0 |
| ? "PASS: no unit puts a death verb next to a 2023 date without Tranco context." | ? `PASS: no CONTENT page puts a death verb next to a 2023 date without Tranco ` + |
| : `FAIL: ${bad} unit(s) date Alexa's end to 2023 with no Tranco attribution.`); | `context. ${notes} provenance-note unit(s) listed above are not failed - ` + |
| | `read them, do not trust the label.` |
| | : `FAIL: ${bad} content unit(s) date Alexa's end to 2023 with no Tranco attribution.`); |
| process.exit(bad === 0 ? 0 : 1); | process.exit(bad === 0 ? 0 : 1); |
| </file> | </file> |
| |
| ==== 13.5 Its unedited output ==== | ==== 13.5 Its unedited output ==== |
| | |
| | **Read the unit count as "as of a revision", and the ''SUSPECT'' count as the claim.** This is the real, unedited run against the wiki as it stood immediately before this section was last saved. Re-run it now and the unit count will be **higher**, because this section is itself part of the input and every save adds sentences that pair Alexa with 2023 (§13.3.1). That is a fixed point nobody can publish their way out of: the output block can never be a run that includes the page carrying it. |
| | |
| | So the published claim is the **invariant, not the tally**: ''SUSPECT'' is **0 on content pages** in every run of this sitting — before the section existed (18 units), after it was first published (37), and after the revision that added §13.3.1 (39). The committed ''scripts/alexa_date_audit-output.txt'' is regenerated after each save and will disagree with the block below in its counts, by design. |
| |
| <code> | <code> |
| page ids: sitemap 148, core.listPages 160, search(Alexa/alexa.com/discontinued/retired/retiring) 83 distinct -> union 160 | page ids: sitemap 148, core.listPages 160, search(Alexa/alexa.com/discontinued/retired/retiring) 83 distinct -> union 160 |
| |
| pages scanned: 160; death verb within 200 chars of a 2023 token, on a line mentioning Alexa: 18 unit(s) | pages scanned: 160; death verb within 200 chars of a 2023 token, on a line mentioning Alexa: 37 unit(s) |
| |
| == SUSPECT: 0 | == SUSPECT: 0 |
| |
| == ok-tranco-swap: 11 | == ok-tranco-swap: 14 |
| design:longitudinal:73 [footnote1] ntegrated into the default Tranco list, starting from the daily updated list of August 1, 2023"// (fetched 2026-09-03). It is **Tranco's** date, not Amazon's — ''alexa.com'' was retire | design:longitudinal:73 [footnote1] ntegrated into the default Tranco list, starting from the daily updated list of August 1, 2023"// (fetched 2026-09-03). It is **Tranco's** date, not Amazon's — ''alexa.com'' was retire |
| design:website_classification:228 [footnote1] age, URL — retrieved 2026-08-07. An earlier revision of Design:Website Selection gave 1 August 2023; that date is when Tranco dropped Alexa from the default list, not when Amazon switched t | design:website_classification:228 [footnote1] age, URL — retrieved 2026-08-07. An earlier revision of Design:Website Selection gave 1 August 2023; that date is when Tranco dropped Alexa from the default list, not when Amazon switched t |
| provenance:design:website_selection:16 [body] orrection | design:website_classification Alexa footnote no longer says this page gives 1 August 2023 as Alexa's death. CrUX licence one-liners on that page and programming:tranco now match | provenance:design:website_selection:16 [body] orrection | design:website_classification Alexa footnote no longer says this page gives 1 August 2023 as Alexa's death. CrUX licence one-liners on that page and programming:tranco now match |
| provenance:design:website_selection:131 [body] | No Alexa retirement on 1 August 2023 | That date is Tranco's provider swap (CrUX+Radar in, Alexa out). AWS shutdown listing do | provenance:design:website_selection:131 [body] | No Alexa retirement on 1 August 2023 | That date is Tranco's provider swap (CrUX+Radar in, Alexa out). AWS shutdown listing do |
| | provenance:design:website_selection:264 [body] anything — added Tranco's input dates and the explicit //"Alexa was not 'discontinued in 2023'"// disclaimer. | |
| | provenance:design:website_selection:276 [body] | **1 August 2023** is Tranco's provider swap, not Amazon's shutdown | ''%% URL front page, HTTP 200 | //" |
| | provenance:design:website_selection:593 [body] r-set table samples 1 January of each year, and the sentence under it read //"and then in 2023–24 Alexa was replaced by CrUX and Cloudflare Radar"// — the interval between two sampled |
| statistics:biases:62 [body] ntegrated into the default Tranco list, starting from the daily updated list of August 1, 2023."// | statistics:biases:62 [body] ntegrated into the default Tranco list, starting from the daily updated list of August 1, 2023."// |
| |
| == ok-literature-year: 0 | == ok-literature-year: 0 |
| |
| == corpus-slug: 0 | == corpus-slug: 1 |
| | provenance:design:website_selection:299 [body] es), nearly all of them legitimate (66 papers published 2023–2026 still name Alexa; ''IMC/2023/tracking-profiling-…-alexa-echo-…'' is a corpus slug; Tranco's swap is a 2023 event). Fla |
| | |
| | == provenance-note: 11 |
| | provenance:design:longitudinal:1485 [body] "2023–24" is the gap between two sampled rows, not the date of the change. The footnote then ga |
| | provenance:design:website_selection:258 [body] The item read: //"design:website_selection says Alexa was discontinued 1 August 2023 … Fix the date on design:website_selection (and check whether the same date appears elsew |
| | provenance:design:website_selection:263 [body] 86570786** | **Removed it.** "Alexa was retired 1 May 2022 (APIs 15 Dec 2022), not August 2023 …" | |
| | provenance:design:website_selection:278 [body] e used by design:website_classification . **No primary source for an Alexa retirement in 2023 was found**, by this sitting or by the sampling sitting searching from the other direct |
| | provenance:design:website_selection:287 [body] | Hits | **18 units** pair a death verb with a 2023 token inside one unit on a line mentioning Alexa | |
| | provenance:design:website_selection:291 [body] | Result | Nothing on the wiki dates Alexa's retirement to 2023. **No content page was edited for this defect.** | |
| | provenance:design:website_selection:297 [body] body text of design:website_selection 's Alexa bullet with "Discontinued as of August 1, 2023" still exited 0, because the //footnote// attached to the same line contains the correct |
| | provenance:design:website_selection:301 [body] s 60 characters and the death vocabulary was six verbs, so //"Alexa was decommissioned in 2023"// passed (the verb was not in the list), an ordinary verbose sentence putting "discontin |
| | provenance:design:website_selection:627 [body] * **Whether an Alexa-adjacent Amazon service was in fact retired in 2023.** Not exhaustively excluded — the sampling sitting checked AWS's own full-shutdown listi |
| | provenance:design:website_selection:639 [body] | **Mutation the script missed:** ''**Alexa was decommissioned in 2023.**'' → exit 0, PASS. The ''DEATH'' vocabulary had no entry for decommission / cease / go |
| | provenance:design:website_selection:657 [body] | **No primary source for a 2023 Alexa retirement exists.** Searched Wikipedia's article and its cited sources (which give |
| |
| == beyond-window: 5 | == beyond-window: 9 |
| design:longitudinal:73 [body] gap 508 chars: Farsight came in on 1 May 2022, and Alexa was replaced by CrUX and Cloudflare Radar on **1 August 2023**. That last change is the sharpest form of the problem. ''W9ZN9'' and ''25299'' are **co | design:longitudinal:73 [body] gap 508 chars: Farsight came in on 1 May 2022, and Alexa was replaced by CrUX and Cloudflare Radar on **1 August 2023**. That last change is the sharpest form of the problem. ''W9ZN9'' and ''25299'' are **co |
| design:longitudinal:73 [footnote1] gap 571 chars: day's list id and its ''configuration'': the other five rows on 2026-08-27, the 31 July / 1 August 2023 pair on 2026-09-03. ''date/20230731'' gives ''W9ZN9'', ''providers: [alexa, umbrella, maj | design:longitudinal:73 [footnote1] gap 571 chars: day's list id and its ''configuration'': the other five rows on 2026-08-27, the 31 July / 1 August 2023 pair on 2026-09-03. ''date/20230731'' gives ''W9ZN9'', ''providers: [alexa, umbrella, maj |
| design:longitudinal:73 [footnote1] gap 419 chars: ZN9'', ''providers: [alexa, umbrella, majestic, farsight]'', ''listPrefix: full''; ''date/20230801'' gives ''25299'', ''providers: [crux, farsight, majestic, radar, umbrella]'', ''listPref | design:longitudinal:73 [footnote1] gap 419 chars: ZN9'', ''providers: [alexa, umbrella, majestic, farsight]'', ''listPrefix: full''; ''date/20230801'' gives ''25299'', ''providers: [crux, farsight, majestic, radar, umbrella]'', ''listPref |
| design:sampling:188 [body] gap 327 chars: a mirror, a cached CSV, or a list inherited from an earlier paper. **66 papers published 2023–2026 in this corpus still draw from Alexa, and 34 of them (51.5%) give no version or date | design:sampling:188 [body] gap 327 chars: a mirror, a cached CSV, or a list inherited from an earlier paper. **66 papers published 2023–2026 in this corpus still draw from Alexa, and 34 of them (51.5%) give no version or date |
| | provenance:design:website_selection:278 [body] gap 211 chars: ture ''web/20221126115049/…'' used by design:website_selection , the year-wildcard ''web/2023/…'' used by design:sampling , the bare-article ''web/2022/…4410503838999'' used by stat |
| | provenance:design:website_selection:299 [body] gap 409 chars: **Why a proximity rule rather than a keyword rule.** "Alexa" and "2023" co-occur on **45 lines** of the **71 pages** that mention Alexa at all (''%%grep -i alex |
| | provenance:design:website_selection:299 [body] gap 297 chars: lines** of the **71 pages** that mention Alexa at all (''%%grep -i alexa *.txt | grep -c 2023%%'' over the exported sources), nearly all of them legitimate (66 papers published 2023–2 |
| | provenance:design:website_selection:299 [body] gap 209 chars: c 2023%%'' over the exported sources), nearly all of them legitimate (66 papers published 2023–2026 still name Alexa; ''IMC/2023/tracking-profiling-…-alexa-echo-…'' is a corpus slug; T |
| provenance:programming:deployment:1731 [body] gap 312 chars: on and does not claim: Redis relicensed in 2024 and again in 2025, Nomad moved to BUSL in 2023. | provenance:programming:deployment:1731 [body] gap 312 chars: on and does not claim: Redis relicensed in 2024 and again in 2025, Nomad moved to BUSL in 2023. |
| |
| PASS: no unit puts a death verb next to a 2023 date without Tranco context. | PASS: no CONTENT page puts a death verb next to a 2023 date without Tranco context. 11 provenance-note unit(s) listed above are not failed - read them, do not trust the label. |
| </code> | </code> |
| |
| Fixed in **three saves**, the second and third prompted by reviewers: | Fixed in **three saves**, the second and third prompted by reviewers: |
| |
| ^ Rev ^ ''--if-rev'' ^ What changed ^ | ^ Rev ^ ''%%--if-rev%%'' ^ What changed ^ |
| | 1788465991 | 1787798449 | Sentence names **1 August 2023**. Footnote states that the table's 1-January rows bracket the swap rather than dating it, quotes Tranco's front page for the date, and separates Tranco's date from Amazon's — ''alexa.com'' 1 May 2022, APIs 15 December 2022, eight months earlier. | | | 1788465991 | 1787798449 | Sentence names **1 August 2023**. Footnote states that the table's 1-January rows bracket the swap rather than dating it, quotes Tranco's front page for the date, and separates Tranco's date from Amazon's — ''alexa.com'' 1 May 2022, APIs 15 December 2022, eight months earlier. | |
| | 1788467004 | 1788465991 | The external-currency reviewer queried an endpoint nobody had: ''api/lists/date/20230731'' returns list **''W9ZN9''**, ''providers: [alexa, umbrella, majestic, farsight]'', ''listPrefix: full''. The next day's ''25299'' is ''[crux, farsight, majestic, radar, umbrella]'' at ''listPrefix: 1000000''. Both rows added to the table, so the swap is now **two consecutive list ids one day apart** rather than a bracket — a sharper version of the point the section exists to make. Re-verified before saving, with 30 July (''99P42'', pre-swap) and 2 August (''8289V'', post-swap) as controls. | | | 1788467004 | 1788465991 | The external-currency reviewer queried an endpoint nobody had: ''api/lists/date/20230731'' returns list **''W9ZN9''**, ''providers: [alexa, umbrella, majestic, farsight]'', ''listPrefix: full''. The next day's ''25299'' is ''[crux, farsight, majestic, radar, umbrella]'' at ''listPrefix: 1000000''. Both rows added to the table, so the swap is now **two consecutive list ids one day apart** rather than a bracket — a sharper version of the point the section exists to make. Re-verified before saving, with 30 July (''99P42'', pre-swap) and 2 August (''8289V'', post-swap) as controls. | |
| | "34 headings" off by one or two depending on where the content region is cut. | **Accepted, and answered differently than asked.** Rather than pick a rendered-region convention, §13.7 now publishes the **source** count (32) as the primary number, because it is reproducible without agreeing where DokuWiki's chrome ends. | | | "34 headings" off by one or two depending on where the content region is cut. | **Accepted, and answered differently than asked.** Rather than pick a rendered-region convention, §13.7 now publishes the **source** count (32) as the primary number, because it is reproducible without agreeing where DokuWiki's chrome ends. | |
| | Tranco currency: five-provider default list live (''api/lists/date/latest''), per-provider licences on the methodology page unchanged, "averaging all four rankings" still stale on the front page, ''GVWK'' and ''XVWN'' still resolve with the provider sets [[design:longitudinal]] claims, ''alexa.com'' → ''alexa.amazon.com/about'' in 2 hops, ''support.alexa.com'' NXDOMAIN. | Confirmed 2026-09-03, no change. The stale "four rankings" phrase is already footnoted on [[programming:tranco]] and was left alone. | | | Tranco currency: five-provider default list live (''api/lists/date/latest''), per-provider licences on the methodology page unchanged, "averaging all four rankings" still stale on the front page, ''GVWK'' and ''XVWN'' still resolve with the provider sets [[design:longitudinal]] claims, ''alexa.com'' → ''alexa.amazon.com/about'' in 2 hops, ''support.alexa.com'' NXDOMAIN. | Confirmed 2026-09-03, no change. The stale "four rankings" phrase is already footnoted on [[programming:tranco]] and was left alone. | |
| | |
| | === Post-publication self-check (no reviewer; me) === |
| | |
| | ^ What ^ Outcome ^ |
| | | Re-ran the audit against the **published** wiki, including this page. It reported **16 SUSPECT**, all of them this section's own mutation fixtures, quoted work item and review log. | **Real defect in the script's scope, not in the wiki.** Fixed by stripping ''%%<code>%%''/''%%<file>%%'' blocks and routing ''provenance:'' hits to a printed-but-not-failed bucket. Both changes and what they cost are in §13.3.1. Found by re-running after publishing rather than before — which is the only order in which it //can// be found. | |
| | | Re-read all 37 units of the post-publication run by hand, including the 11 ''provenance-note'', 9 ''beyond-window'' and 1 ''corpus-slug''. | All correct; no content page dates Alexa's retirement to 2023. | |
| | | Re-ran the 10-mutation suite after the scope change. | All 10 behave; the fixtures live in a shell script, and the mutation is written into the page //body//, so block-stripping does not blunt the test. | |
| | | Re-ran the audit once more after saving §13.3.1: **39 units, 0 SUSPECT**, 12 ''provenance-note'', 1 ''corpus-slug'', 9 ''beyond-window''. Every unit added since the previous run is this section's own prose. | Confirmed. The count moves with each save and the invariant does not — which is why §13.5 publishes the invariant and labels the tally. | |
| | | Verified the four published listings against the committed files by extracting them from the **rendered** page. | ''alexa_date_audit_mutations.sh'', both ''*-output.txt'' byte-identical; ''alexa_date_audit.mjs'' identical after stripping trailing whitespace (DokuWiki pads blank lines inside a ''%%<file>%%'' block with one space). 186 lines, 0 non-whitespace differences. | |
| |
| === Pass 4 — generic, no checklist (Claude Fable) === | === Pass 4 — generic, no checklist (Claude Fable) === |
| | **"published" used to mean "draft handed to reviewers"** — on this wiki "published" means live, so a reader would conclude a broken audit went live. It did not. | **Accepted.** "first draft" throughout. | | | **"published" used to mean "draft handed to reviewers"** — on this wiki "published" means live, so a reader would conclude a broken audit went live. It did not. | **Accepted.** "first draft" throughout. | |
| | "Claude Code (Opus 5)" vs the neighbours' "Claude Opus 5". | **Accepted.** | | | "Claude Code (Opus 5)" vs the neighbours' "Claude Opus 5". | **Accepted.** | |
| | | //Not a reviewer finding, but it belongs next to them:// re-running the audit **after** publishing §13 turned up 16 SUSPECT, all self-inflicted. | Recorded in §13.3.1 and in the post-publication self-check below. Worth noting that none of the four reviewers could have caught this, because the page they reviewed was not yet part of the audit's input. | |
| |
| ==== 13.11 The run, and three mistakes inside it ==== | ==== 13.11 The run, and three mistakes inside it ==== |
| | A patch to the ''DEATH'' vocabulary **silently did nothing**: it used a Python ''str.replace()'' whose search string did not match the file, and ''replace'' returns the string unchanged with no error. The script was widened in the draft's prose while still narrow in fact, and the mutation suite printed ''BAD'' on exactly the mutations the patch was meant to fix. | **A silent no-op is indistinguishable from success**, so an in-place edit needs ''assert old in s'' before it writes. Every later edit in this sitting did; one of them fired and saved a second wrong header. | | | A patch to the ''DEATH'' vocabulary **silently did nothing**: it used a Python ''str.replace()'' whose search string did not match the file, and ''replace'' returns the string unchanged with no error. The script was widened in the draft's prose while still narrow in fact, and the mutation suite printed ''BAD'' on exactly the mutations the patch was meant to fix. | **A silent no-op is indistinguishable from success**, so an in-place edit needs ''assert old in s'' before it writes. Every later edit in this sitting did; one of them fired and saved a second wrong header. | |
| | The sweep called ''core.listPages'' with no arguments and got **88 of 160 pages**, then described itself as covering "every page id". The default depth is 1. | **A page list you did not count is not a page list.** Print the size of every enumeration next to the union, and check the wrapper's defaults before trusting a remote API's idea of "all".| | | The sweep called ''core.listPages'' with no arguments and got **88 of 160 pages**, then described itself as covering "every page id". The default depth is 1. | **A page list you did not count is not a page list.** Print the size of every enumeration next to the union, and check the wrapper's defaults before trusting a remote API's idea of "all".| |
| | |
| | [[design:website_selection|← back to the content page]] · [[provenance:design:longitudinal|the longitudinal amendment this prompted]] · [[literature:corpus|corpus-level provenance]] |
| | |
| | ===== 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 paired content page's two bare ''Artifacts'' links are now root-anchored after the fresh rendered-DOM sweep confirmed they had resolved to ''design:artifacts''. The post-save DOM was re-checked for red links. No figures or citations changed. |
| |