1% ============================================================================2% Part IV — Computational Methodology3% Written by Agent L (Part IV instance), 2026-11-03. Documents what the code in4% ingestion/, systematic_review/, taxonomy/, bibliometrics/, knowledge_graph/,5% econometrics/, embeddings/ and experiments/ actually does. Where the code and6% RESEARCH_PLAN.md differ, the code is described and the difference is stated.7% Corpus numbers only through macros of tables/numbers.tex.8% ============================================================================910\section{Notation and the corpus as a measurable object}11\label{sec:m-notation}1213Every quantity reported in Parts VIII and IX is a function of a finite set of14bibliographic records and of a small number of deterministic transformations15applied to them. This part states those transformations with enough precision16that an independent analyst could recompute the results from the raw snapshots17listed in Part III. The exposition follows the order of the pipeline18(\texttt{reproducibility/RUNBOOK.md}): record linkage, deduplication and19eligibility (Section~\ref{sec:m-linkage}), multi-label classification20(Section~\ref{sec:m-classification}), bibliometric indicators21(Section~\ref{sec:m-bibliometrics}), network measures (Section~\ref{sec:m-networks}),22semantic mapping (Section~\ref{sec:m-semantic}), structural change23(Section~\ref{sec:m-structural}), emerging-topic detection24(Section~\ref{sec:m-emerging}), knowledge-graph extraction25(Section~\ref{sec:m-kg}) and the treatment of uncertainty and reproducibility26(Section~\ref{sec:m-uncertainty}). Throughout, a design choice that departs from27the preregistered plan (\texttt{RESEARCH\_PLAN.md}, \texttt{protocol/PROTOCOL.md})28is stated as such, because the code, not the plan, is what produced the numbers.2930\subsection{Works, dates and periods}3132Let $\mathcal{W}_0$ denote the set of OpenAlex work records loaded from the33snapshot of 14~October 2026 (the records carrying at least one topic of the34Computer Science field, plus the second-pass records recovered through DBLP and35arXiv identifiers, Section~\ref{sec:m-linkage}). Each record $w \in \mathcal{W}_0$36carries an OpenAlex identifier, a type $\tau(w)$ drawn from the OpenAlex37controlled vocabulary, a publication date $d_{\mathrm{pub}}(w)$, a creation date38$d_{\mathrm{cr}}(w)$ (the date at which the record entered OpenAlex), a title, an39optional abstract, authorships, a primary source (venue), OpenAlex topics with40their subfield and field, a list of referenced works, and yearly citation counts.41Linked records from DBLP, arXiv and the ACL Anthology attach to $w$ a DBLP key,42an arXiv identifier with its arXiv creation date $d_{\mathrm{arx}}(w)$ and primary43category, and an ACL identifier.4445The temporal position of a work is its \emph{first date},46\begin{equation}47 d(w) \;=\; \min\bigl\{\, d_{\mathrm{pub}}(w),\; d_{\mathrm{pub}}(\pi(w)),\; d_{\mathrm{arx}}(w) \,\bigr\},48 \label{eq:first-date}49\end{equation}50where $\pi(w)$ is the preprint record merged into $w$ by the deduplication rule of51Section~\ref{sec:m-dedup} when one exists, and each missing term is replaced by52$d_{\mathrm{pub}}(w)$. The first date, not the date of the version of record, is53the quantity that places a work on the time axis, because the research question54concerns when ideas entered the literature rather than when a publisher released55them. The publication year $y(w)$ used for citation normalisation is, in56contrast, the OpenAlex \texttt{publication\_year} of the surviving record,57because citation windows are defined in calendar years of the OpenAlex58\texttt{counts\_by\_year} table (Section~\ref{sec:m-citations}). The two59conventions are deliberately distinct and both are stored on every record.6061The observation window is $[t_0, t_1] = [\text{2018-01-01}, \text{2026-11-02}]$,62split at the reference date $t^{\ast} = \text{2022-11-30}$ into a baseline63period $B = [t_0, t^{\ast})$ and a post period $P = [t^{\ast}, t_1]$:64\begin{equation}65 \mathrm{period}(w) \;=\;66 \begin{cases}67 B & \text{if } t_0 \le d(w) < t^{\ast},\\68 P & \text{if } t^{\ast} \le d(w) \le t_1 .69 \end{cases}70\end{equation}71Monthly series use the month $m(w)$ of the first date. Two facts about dates72constrain everything that follows. First, a substantial share of OpenAlex73records carry a publication date equal to the first of January of their year,74which is the database's convention for year-only precision rather than a real75date. The pipeline therefore attaches to every record a flag76\begin{equation}77 \mathrm{prec}(w) \;=\;78 \begin{cases}79 \text{year} & \text{if } d_{\mathrm{pub}}(w) \text{ falls on 1 January},\\80 \text{month} & \text{otherwise},81 \end{cases}82\end{equation}83and every monthly series in this paper is computed on the month-precision84subset $\mathcal{W}^{\mathrm{m}} = \{w : \mathrm{prec}(w) = \text{month}\}$ only85(amendment A-002). A genuine 1~January publication is thereby misclassified as86year precision and dropped from monthly series; the loss is small and, more87importantly, it does not depend on the period, so it cannot manufacture a break.88Annual series use all eligible records. Second, the right end of the window is89censored: records published in the last months before the snapshot are90under-represented because OpenAlex indexes them with a lag. The treatment of this91right-truncation is specified in Section~\ref{sec:m-truncation}.9293\subsection{Categories, areas and the measurable structure}9495Let $\mathcal{K}$ be the set of the forty leaf categories of the ontology96(\texttt{taxonomy/ontology.yaml}, Part III and Appendix~A) and $\mathcal{A}$ the97set of its eight areas, with the surjection $a : \mathcal{K} \to \mathcal{A}$98assigning each leaf to its area. Seven leaves are additionally declared children99of another leaf (for instance \textit{llm} $\prec$ \textit{foundation\_models},100\textit{compilers} $\prec$ \textit{programming\_languages}); this partial order101$\prec$ is used only to break ties when a primary category is chosen. The102classifier of Section~\ref{sec:m-classification} assigns to each work a label set103$C(w) \subseteq \mathcal{K}$, possibly empty, and, when $C(w) \neq \emptyset$, a104primary category $\kappa^{\ast}(w) \in C(w)$. Multi-label counting and primary105counting give different answers to ``how many works are in category $k$'', and106both are reported: for a set of works $S$,107\begin{equation}108 N_k^{\mathrm{ml}}(S) = \bigl|\{ w \in S : k \in C(w) \}\bigr|, \qquad109 N_k^{\mathrm{pr}}(S) = \bigl|\{ w \in S : \kappa^{\ast}(w) = k \}\bigr| ,110\end{equation}111so that $\sum_k N_k^{\mathrm{pr}}(S) \le |S|$ with equality when every work is112classified, whereas $\sum_k N_k^{\mathrm{ml}}(S)$ exceeds $|S|$ by the number of113secondary labels. Flows between categories (Section~\ref{sec:m-networks}) and114the emerging-topic panel (Section~\ref{sec:m-emerging}) use the primary label;115co-classification statistics use the full label set.116117The eligible corpus $\mathcal{W} \subseteq \mathcal{W}_0$ is the set of records118passing the predicate $E(w)$ of Section~\ref{sec:m-eligibility}. For a month $t$119and a category $k$, the elementary counts are120\begin{equation}121 N_t = \bigl|\{ w \in \mathcal{W}^{\mathrm{m}} : m(w) = t \}\bigr|, \qquad122 N_{k,t} = \bigl|\{ w \in \mathcal{W}^{\mathrm{m}} : m(w) = t,\; \kappa^{\ast}(w) = k \}\bigr|,123 \qquad s_{k,t} = N_{k,t}/N_t .124 \label{eq:counts}125\end{equation}126Every estimand of Parts VIII and IX is a functional of these counts, of the127citation matrix of Section~\ref{sec:m-citations}, of the authorship lists, or of128the embedding vectors of Section~\ref{sec:m-semantic}. The corpus is finite and129fully enumerated, so the descriptive quantities are population quantities rather130than sample estimates; the inferential devices of Sections~\ref{sec:m-structural}131and~\ref{sec:m-emerging} address a different kind of uncertainty, namely whether132an observed temporal pattern is distinguishable from the ordinary fluctuations133of the series, and whether a predictor would have worked out of time.134135\subsection{Storage and computation}136137The pipeline keeps the raw snapshots immutable (per-file SHA-256 ledgers,138Section~\ref{sec:m-uncertainty}) and materialises all derived tables as Parquet139files queried through DuckDB \citep{raasveldt2019duckdb}; the linkage,140deduplication, eligibility, counting and citation-window steps are SQL141statements executed inside one database file, which makes every table in this142part a deterministic function of the raw inputs and of the script that produced143it. Python is used where SQL is inconvenient: the regular-expression classifier,144the structural-change toolkit, the embedding and clustering steps, and the145detector. The slim table of all OpenAlex works (\LinkSlimTotal{} rows: identifier,146DOI, year, type, primary topic hierarchy, citation count) is kept so that the147field of a cited work outside computer science can be resolved148(Section~\ref{sec:m-citgraph}); this is decision D2 of the plan.149150\section{Record linkage, deduplication and eligibility}151\label{sec:m-linkage}152153The four sources describe overlapping but differently delimited populations:154OpenAlex is the backbone, DBLP defines what counts as a computer-science venue,155arXiv contributes preprints and their categories, and the ACL Anthology serves as156a coverage check for natural-language processing. Combining them is a record157linkage problem in the classical sense of \citet{fellegi1969linkage}: two158records from different files must be declared the same work or not, on the159basis of comparison vectors computed from their fields. The pipeline uses a160deterministic cascade rather than a probabilistic model, because the dominant161comparison fields (DOI and arXiv identifier) are persistent identifiers whose162agreement is near-conclusive, and because a probabilistic model would require163labelled training pairs that the project does not possess before the human164checkpoint H-1. The cost of this choice is that the precision of the residual165title-based step must be estimated from a reviewed sample rather than derived166from the model; the design of that estimate is given in167Section~\ref{sec:m-linkprecision}.168169\subsection{Normalised keys and the linkage cascade}170\label{sec:m-cascade}171172For each source the script \texttt{ingestion/link\_sources.py} builds a key173table. A DOI is lower-cased. An arXiv identifier is lower-cased and stripped of174its version suffix (\texttt{v[0-9]+\$}); for DBLP records, which do not carry an175arXiv field, the identifier is extracted from the electronic-edition URLs by the176pattern \texttt{arxiv.org/abs/([\^{} ]+)}. A title is normalised by the map177\begin{equation}178 \eta(\text{title}) \;=\; \mathrm{delete}_{\,\neg[a\text{--}z\,0\text{--}9]}\bigl(\mathrm{lower}(\text{title})\bigr),179 \label{eq:ntitle}180\end{equation}181which lower-cases and deletes every character outside $[a$--$z0$--$9]$, so that182punctuation, whitespace, case and diacritics (which do not survive the ASCII183filter) no longer separate otherwise identical titles. The normalised title is184used only for records whose original title has at least 25 characters, a185threshold that removes the many short generic titles (``Introduction'',186``Editorial'', ``Preface'') for which equality of $\eta$ carries no evidence.187188DBLP records are restricted to the years 2018--2026 and to the record types189\textit{article}, \textit{inproceedings}, \textit{incollection}, \textit{book},190\textit{phdthesis} and \textit{data}. The DBLP--OpenAlex cascade is then191\begin{enumerate}192 \item \textbf{DOI}: join on equal lower-cased DOI; every matching pair is kept193 (a DBLP key may match several OpenAlex records sharing a DOI, and194 conversely; the many-to-many structure is resolved at the195 deduplication stage, not here);196 \item \textbf{arXiv}: among records unmatched on both sides, join on equal197 normalised arXiv identifier;198 \item \textbf{title--year}: among records still unmatched on both sides,199 restrict each side to normalised titles that are \emph{unique} within200 that side, join on equal $\eta$, and keep the pair if the years differ201 by at most one.202\end{enumerate}203The uniqueness restriction in step 3 is the blocking device: it turns the join204into a one-to-one map and prevents a frequent title from generating a clique of205spurious pairs. The price is recall, since a genuine pair whose title appears206twice on either side (a journal version and a workshop version with the same207title, for instance) cannot be linked at this step; such pairs are usually caught208by the DOI step or by the preprint merge of Section~\ref{sec:m-dedup}. The209arXiv--OpenAlex cascade is analogous (arXiv identifier, then DOI, then unique210normalised title with a year tolerance of two, because the arXiv creation year211and the OpenAlex publication year of the version of record can legitimately212differ by more than one). The ACL--OpenAlex cascade uses DOI, then the ACL213identifier parsed from OpenAlex landing-page URLs of the form214\texttt{aclanthology.org/<id>}, then unique normalised title with a year215tolerance of one. Each link carries its method label, which is the stratification216variable of the precision sample.217218The counts of the first run are stored in \texttt{data/metadata/linkage\_report.json}219and reproduced in Part III; here it suffices to note the shape of the result.220Of the \LinkDblpTwoZeroOneEightTwoZeroTwoSix{} DBLP records in window,221\LinkDblpWithDoi{} carry a DOI, \LinkLinkDblpOaDoi{} are linked by DOI and222\LinkLinkDblpOaTitleYear{} by title and year, for \LinkDblpLinkedDistinct{}223distinct DBLP keys linked and \LinkDblpUnlinked{} unlinked. No DBLP record was224linked through the arXiv step (\LinkDblpWithArxiv{} DBLP keys with a parsable225arXiv identifier), which reflects the fact that the DBLP dump used here places226arXiv links in a field the parser did not read rather than a property of the227literature; the arXiv--OpenAlex cascade links \LinkArxivLinkedDistinct{} of the228\LinkArxivCreatedTwoZeroOneEightTwoZeroTwoSix{} arXiv \texttt{cs} records created229in window, almost all of them (\LinkLinkArxivOaArxivId{}) by identifier. The230\LinkDblpUnlinkedWithDoiInSlim{} unlinked DBLP records whose DOI does exist in the231slim table of all OpenAlex works are precisely the records that OpenAlex does232not label with any Computer Science topic; they motivate the second snapshot233pass, in which these identifiers (\LinkNeededOaIdsSecondPassDblpDoi{} from DBLP234and \LinkNeededOaIdsSecondPassArxivDoi{} from arXiv) are fetched in full and the235linkage is rerun with the union of both passes. The corpus is therefore not the236set of works that OpenAlex calls computer science; it is the union of that set237with what DBLP and arXiv call computer science, which is the sense in which the238mandate's requirement to ``cover the complete breadth of computer science''239rather than only the OpenAlex topic model is operationalised.240241\subsection{Preprint--publication deduplication}242\label{sec:m-dedup}243244A work that exists as an arXiv preprint and as a published version is two245OpenAlex records whenever OpenAlex has not merged them. Counting both would246double-count exactly the kind of work (AI preprints) whose growth is at issue247(CLAUDE.md §6.2). The script \texttt{systematic\_review/define\_corpus.py}248identifies such pairs within $\mathcal{W}_0$ by a title rule:249\begin{equation}250 (p, b) \text{ is a candidate pair} \iff251 \eta(p) = \eta(b),\;\; |y(p) - y(b)| \le 2,\;\;252 p \in \mathcal{P},\;\; b \notin \mathcal{P},\;\; |\text{title}| \ge 25,253 \label{eq:duppair}254\end{equation}255where $\mathcal{P} = \{ w : \tau(w) = \text{preprint} \text{ or } \text{DOI}(w)256\text{ starts with } \text{10.48550/arxiv} \}$ is the preprint-like set. A257preprint may match several published records and conversely; the rule keeps,258for each published record, the earliest-dated preprint and, for each preprint,259the earliest-dated published record, and discards any pair that is not the260first in both orderings. The surviving pairs define the map $\pi$ of261equation~\eqref{eq:first-date}: the published record $b$ receives262$\pi(b) = p$, $\text{preprint\_date}(b) = d_{\mathrm{pub}}(p)$ and the earlier of263the two dates as its first date; the preprint $p$ receives the flag264\textit{e5\_duplicate} and leaves the eligible corpus. The version relationship265is therefore kept on the surviving node, as the plan requires, but the match is266by exact normalised title only. Two limitations follow. A preprint whose title267changed between versions is not merged, and the pair survives as two works; a268preprint and an unrelated published paper with an identical normalised title269within two years are wrongly merged. The second error is rare for titles of at270least 25 characters; the first is the more consequential one and biases the271preprint share upward, which is the conservative direction for hypothesis H7.272Deduplication across the OpenAlex--DBLP boundary is not needed because DBLP273records are never counted as works: a DBLP record either links to an OpenAlex274record, in which case the OpenAlex record carries the flag \textit{in\_dblp}, or275it does not, in which case it is counted in the separate DBLP-only table used276for coverage assessment.277278\subsection{Eligibility predicate}279\label{sec:m-eligibility}280281Each record receives seven exclusion flags and two membership flags, computed282once and stored, so that every PRISMA count is a filter on the same table. With283$T_{\mathrm{keep}}$ = \{article, conference-paper, preprint, book-chapter, book,284dissertation, report, review, software-paper\}, $T_{\mathrm{hard}}$ = \{editorial,285erratum, retraction, peer-review, paratext, conference-abstract,286reference-entry, dataset, software, supplementary-materials, libguides, letter,287grant, standard\}, and $\mathcal{G}$ the list of generic deposit platforms288(Zenodo, Figshare, IRDB, LA Referencia, Dialnet, DOAJ-as-source, OSTI), the289flags are290\begin{align}291 e_1(w) &: d_{\mathrm{pub}}(w) \text{ missing or outside } [t_0, t_1];\\292 e_2(w) &: \tau(w) \notin T_{\mathrm{keep}} \;\wedge\; \neg\bigl(\text{in\_dblp}(w) \wedge \tau(w) \notin T_{\mathrm{hard}}\bigr);\\293 e_3(w) &: \text{is\_xpac}(w) \wedge \neg \text{in\_dblp}(w);\\294 e_4(w) &: \text{title empty};\\295 e_5(w) &: w \text{ is the preprint member of a pair of \eqref{eq:duppair}};\\296 e_6(w) &: \text{is\_retracted}(w);\\297 e_7(w) &: \text{source}(w) \in \mathcal{G} \wedge \neg\text{in\_dblp}(w) \wedge \text{no linked arXiv record}.298\end{align}299The membership flags encode the computer-science rule of the protocol:300\begin{align}301 \text{core}(w) &= \text{in\_dblp}(w) \;\vee\; \text{cs\_primary}(w) \;\vee\;302 \bigl(\text{cs\_any}(w) \wedge \text{arxiv\_cs\_primary}(w)\bigr),\\303 \text{penumbra}(w) &= \text{cs\_any}(w) \wedge \neg\,\text{core}(w),304\end{align}305where \text{cs\_primary} means that the primary OpenAlex topic belongs to field30617, \text{cs\_any} that some topic does, and \text{arxiv\_cs\_primary} that the307linked arXiv record's primary category starts with \texttt{cs.}. The eligibility308predicate is309\begin{equation}310 E(w) \;=\; \neg e_1 \wedge \neg e_2 \wedge \neg e_3 \wedge \neg e_4 \wedge \neg e_5 \wedge \neg e_7 \wedge \text{core}(w).311 \label{eq:eligible}312\end{equation}313Three features of this predicate deserve comment. Retraction ($e_6$) is314\emph{not} part of $E$: retracted works stay in the mapping corpus with their315flag and are excluded only from impact-based selections316(Section~\ref{sec:m-kg}), as the protocol specifies (E6). The type rule $e_2$ is317asymmetric by amendment A-001: a DBLP-indexed record is kept whatever its318OpenAlex type unless that type is in the hard-exclusion list, because the319first run showed that OpenAlex typed more than a million DBLP conference papers320in ways the original list rejected; XPAC records (OpenAlex's expansion of321coverage from secondary sources) are likewise kept when DBLP-indexed and flagged322\textit{xpac\_kept\_dblp}. The deposit-platform rule $e_7$ was added by323amendment A-002 after Zenodo alone was found to contribute a six-figure number324of 2026 records typed as articles with almost no references; the protocol's325original E7 (penumbra) is now the membership flag rather than an exclusion, so326the reason code E7 in the protocol and the flag $e_7$ in the code denote327different things. This is a documentation discrepancy, not an analytical one,328but readers comparing the protocol and the PRISMA table should be aware of it.329The penumbra set---works with a secondary computer-science topic but neither330DBLP nor arXiv support---is counted separately and enters only sensitivity331analyses; the strict core used for the sensitivity analyses in the other332direction is $\{w : E(w) \wedge \text{in\_dblp}(w) \wedge \text{cs\_primary}(w)\}$.333334The PRISMA counts are computed both marginally (how many records carry each335flag) and sequentially (how many are removed by each flag after the previous336ones have been applied, in the order $e_1, e_2, e_3, e_4, e_5, e_7$), because337the flags overlap heavily and only the sequential version sums to the final338count. The order is a reporting convention; the final eligible set does not339depend on it.340341\subsection{Design of the linkage-precision estimate}342\label{sec:m-linkprecision}343344Precision of the deterministic cascade is estimated on a stratified sample of345500 DBLP--OpenAlex pairs drawn by \texttt{systematic\_review/linkage\_sample.py}:346250 pairs linked by DOI, 200 by title--year and 50 by arXiv identifier (the347last stratum is empty in the current run, for the reason given in348Section~\ref{sec:m-cascade}), selected by ordering each stratum on a hash of the349DBLP key salted with the seed 44 and taking the first records, which is a350reproducible simple random sample within stratum. For each pair the script351computes an automatic agreement vector: a string similarity between the two raw352titles (Python's \texttt{difflib} ratio, twice the number of matched characters353in the longest-matching-block alignment divided by the total length), the absolute year difference, and whether the last tokens of the two354first-author names coincide; a pair is \textit{auto\_ok} if the similarity is at355least 0.9, the years differ by at most one and the surnames agree whenever both356are present. Two of every five pairs are reserved for the principal357investigator (\textit{pi\_review}), whose verdicts constitute the human358checkpoint H-1. Let $n_s$ be the stratum sizes and $\hat p_s$ the share of pairs359judged correct in stratum $s$; the overall precision of the link table is the360weighted estimate361\begin{equation}362 \hat p \;=\; \sum_s \frac{L_s}{L}\,\hat p_s, \qquad363 \widehat{\mathrm{Var}}(\hat p) = \sum_s \Bigl(\frac{L_s}{L}\Bigr)^2 \frac{\hat p_s(1-\hat p_s)}{n_s},364 \label{eq:linkprec}365\end{equation}366where $L_s$ is the number of links of method $s$ in the full table and $L$367their sum, so that the title--year stratum, which is the only one where errors368are plausible, is weighted by its small share of the links. The estimate369\pending{linkage precision from the H-1 sample, data/metadata/linkage\_sample\_summary.json}370is reported in Part III once the checkpoint is signed; until then the automatic371agreement rate is the only available figure and is labelled as such. Recall is372not estimated by this design: a DBLP record without an OpenAlex counterpart may373be a true absence from OpenAlex or a missed link, and distinguishing the two374would require searching OpenAlex by title for a sample of unlinked DBLP records,375which is left to the robustness appendix.376377\section{Multi-label classification into the ontology}378\label{sec:m-classification}379380The ontology assigns works to forty categories by rules over four kinds of381metadata signals and one textual signal. A rule-based classifier was preferred382to a trained one for three reasons that are worth stating because they are383also its limitations. The rules are inspectable: every assignment can be traced384to the signals that produced it, and the mapping from OpenAlex topics, arXiv385categories and DBLP venues to categories is a document386(\texttt{taxonomy/ontology.yaml}, with provenance notes per category) that a387reader can contest line by line. The rules need no labelled training set, which388the project did not have before checkpoint H-2, and so cannot inherit the biases389of one. And the rules are cheap enough to run on every eligible work, whereas an390LLM rater at the quality used for validation would cost orders of magnitude391more. The corresponding limitations are that rules do not generalise beyond the392vocabulary they encode, that the weights are expert judgements rather than393estimates, and that validation against independent raters is therefore the only394evidence of their accuracy.395396\subsection{Signals and the score}397\label{sec:m-score}398399For a work $w$, let $T(w)$ be its set of OpenAlex topic identifiers (up to400three per work), $F(w)$ its set of subfield identifiers, $X(w)$ the set of arXiv401categories of its linked arXiv record (primary and cross-lists), $D(w)$ the set402of DBLP venue streams of its linked DBLP records, and $\text{title}(w)$,403$\text{abs}(w)$ its title and abstract. Each category $k$ specifies weight maps404$\omega^{\mathrm{T}}_k : T \to [0,1]$, $\omega^{\mathrm{F}}_k$,405$\omega^{\mathrm{X}}_k$, $\omega^{\mathrm{D}}_k$ over the respective406vocabularies (zero outside the listed entries), a list of keyword rules407$(r, \omega, \phi)$ consisting of a regular expression $r$, a weight $\omega$408and a field $\phi \in \{\text{title}, \text{abstract}, \text{both}\}$, and a list409of exclusion regular expressions $Z_k$. The score of $w$ for $k$ is410\begin{equation}411 s_k(w) \;=\; \sum_{\sigma \in \{\mathrm{T},\mathrm{F},\mathrm{X},\mathrm{D}\}}412 \min\Bigl\{1,\; \sum_{x \in \sigma(w)} \omega^{\sigma}_k(x)\Bigr\}413 \;+\; \min\Bigl\{1,\; \sum_{(r,\omega,\phi) \in R_k} \omega \cdot \mathbf{1}\bigl[r \text{ matches } \phi(w)\bigr]\Bigr\},414 \label{eq:score}415\end{equation}416where $\phi(w)$ is the title, the abstract, or their concatenation according to417the field of the rule. Each of the five signal types is thus capped at one418before the types are summed, so $s_k(w) \in [0, 5]$, and the assignment rule is419\begin{equation}420 k \in C(w) \iff s_k(w) \ge \theta \;\wedge\; \neg\, \exists\, z \in Z_k :\ z \text{ matches } \text{title}(w) \| \text{abs}(w),421 \qquad \theta = 1 .422 \label{eq:assign}423\end{equation}424The cap is what gives the weights their meaning. A single signal with weight425one (a topic that \emph{is} the category, a venue that publishes nothing else, a426keyword that names the object of study) suffices on its own; a signal with427weight below one is a partial indication that must be corroborated by a signal428of another type, because repetitions of the same type cannot push the capped sum429above one. The ontology uses this device deliberately: the six AI categories430that the OpenAlex topic model does not separate (large language models,431foundation models, multimodal AI, generative AI, agents, AI safety) rely on432keyword rules of weight one that fire on the name of the object, while their433topic and venue signals are fractional. The exclusion list is a veto applied434after the threshold: a category that would otherwise be assigned is removed if435any exclusion pattern matches the title or abstract (for instance a436cryptocurrency pattern vetoing applied cryptography). The veto is not a negative437weight; it cannot be outvoted.438439One discrepancy between the ontology document and the implementation must be440recorded. The notes of the \texttt{assignment\_rule} block state that the441classifier takes the \emph{maximum} over matched topics before capping, whereas442\texttt{taxonomy/classify.py} takes the \emph{sum} and then caps, as443equation~\eqref{eq:score} states. The two agree whenever at most one listed444topic matches or the matched weights already sum to at least one; they differ445when two fractional topics of the same category co-occur, in which case the446implemented rule is the more permissive. The unit tests in447\texttt{tests/test\_classify\_rules.py} fix the implemented behaviour (a topic448listed three times contributes its weight once, because the topic set is449deduplicated, and a 0.6 topic plus a 0.4 arXiv category reach exactly 1.0). The450manuscript describes the implemented rule.451452\subsection{Primary category}453454When $C(w) \neq \emptyset$ the primary category is455\begin{equation}456 \kappa^{\ast}(w) \;=\; \operatorname*{arg\,max}_{k \in C(w)} \bigl( s_k(w),\; -\mathbf{1}[k \text{ is a parent of some } k' \in C(w)],\; -\mathrm{number}(k) \bigr)457\end{equation}458in lexicographic order: the highest score wins; among equal scores a category459that is the declared parent of another assigned category loses to its child460(so that a work scoring equally on \textit{llm} and \textit{foundation\_models}461is primarily an LLM paper); among remaining ties the lower ontology number462wins. The last rule is arbitrary and is stated so that the reader can see that463it is. The number of assigned categories $|C(w)|$ and the primary score are464stored with every work; works with $C(w) = \emptyset$ (eligible works none of465whose signals reach the threshold) are counted and characterised in Part IX, and466their share is one of the quality indicators of the classification. The467classifier is run on the eligible corpus and on the penumbra, so that468sensitivity analyses on the wider set do not require a second run.469470\subsection{Validation design and metrics}471\label{sec:m-validation}472473The rules are validated against two independent LLM raters on a stratified474sample (\texttt{taxonomy/VALIDATION.md}, \texttt{taxonomy/validate\_sample.py}):475fifty eligible works with an abstract per rule-assigned primary category (forty476strata) plus two hundred works with no category, drawn by ordering each stratum477on a salted hash with seed 44; two hundred of the resulting works are reserved478for the principal investigator (checkpoint H-2). Each rater receives the forty479category definitions, and for each work the title, abstract, venue and year,480and returns under a JSON schema a label set of at most five categories, a481primary category or null, a confidence and a short rationale. The raters never482see the rule-based assignment, so there is no leakage from the rules to the483reference labels, and the rule revision policy (a category with consensus484$F_1 < 0.60$ triggers a mapping revision, logged as an amendment, and a re-run)485can be applied without re-rating. The two raters are different models of the486same family (\texttt{claude-haiku-5-5}, \texttt{claude-sonnet-5-5}); their487agreement therefore does not measure the agreement that two human experts would488reach, and the 200-work human subsample is the only anchor for that.489490With $\hat C(w)$ the rule label set, $C^{r}(w)$ the label set of rater $r$ and491$C^{\cap}(w) = C^{A}(w) \cap C^{B}(w)$ the consensus set, the per-category492confusion counts against a reference $C^{\mathrm{ref}}$ are493$\mathrm{TP}_k = |\{w : k \in \hat C(w) \wedge k \in C^{\mathrm{ref}}(w)\}|$,494$\mathrm{FP}_k = |\{w : k \in \hat C(w) \wedge k \notin C^{\mathrm{ref}}(w)\}|$,495$\mathrm{FN}_k = |\{w : k \notin \hat C(w) \wedge k \in C^{\mathrm{ref}}(w)\}|$,496with precision $P_k = \mathrm{TP}_k/(\mathrm{TP}_k+\mathrm{FP}_k)$, recall497$R_k = \mathrm{TP}_k/(\mathrm{TP}_k+\mathrm{FN}_k)$ and498$F_{1,k} = 2P_kR_k/(P_k+R_k)$, the standard label-wise decomposition of499multi-label evaluation \citep{zhang2014multilabel}. Micro-averages pool the500counts over categories before forming the ratios; the macro-$F_1$ is the501unweighted mean of $F_{1,k}$ over categories with at least one positive or502predicted label. Because the sample is stratified by rule-assigned primary503category, the per-category precision is estimated on roughly equal support for504every category, whereas recall is estimated only among works that the rules505placed somewhere; a category that the rules systematically miss (true members506scattered among other strata or among the unassigned) will show inflated recall507in this design. The 200 unassigned works partly address this, but a proper508recall estimate would require sampling from the whole corpus with weights, and509the per-category recall figures should be read with that caveat.510511Agreement on the primary category is measured by Cohen's $\kappa$512\citep{cohen1960kappa},513\begin{equation}514 \kappa \;=\; \frac{p_o - p_e}{1 - p_e}, \qquad515 p_o = \frac{1}{n}\sum_w \mathbf{1}[\kappa^{A}(w) = \kappa^{B}(w)], \qquad516 p_e = \sum_{k \in \mathcal{K} \cup \{\varnothing\}} \frac{n^{A}_k}{n}\,\frac{n^{B}_k}{n},517\end{equation}518where ``no category'' is treated as a forty-first label and $n^{r}_k$ counts519the works to which rater $r$ assigned primary $k$; $\kappa$ is computed between520the two raters and between the rules and each rater. Agreement on the label521sets is measured by the mean Jaccard index522$\bar J = n^{-1}\sum_w |C^{A}(w) \cap C^{B}(w)| / |C^{A}(w) \cup C^{B}(w)|$523(with the convention $0/0 = 0$). The validation note announces Krippendorff's524$\alpha$ with the MASI distance for the multi-label agreement; the metrics525script computes the mean Jaccard index instead, and the manuscript reports526what is computed. A work is exported as a disagreement for human review when527the rules, rater~A and rater~B have no category in common although at least528one of them assigned one.529530\subsection{Known failure modes}531532The design makes some errors predictable, and they are listed here so that the533results of the validation can be read against expectations rather than as534surprises. Keyword rules on abstracts fire on mentions as well as on535contributions: a systems paper that evaluates its scheduler on a large language536model workload matches the LLM keyword and, since that keyword alone reaches537the threshold, acquires the \textit{llm} label; the exclusion lists remove the538most frequent such cases but cannot enumerate them. Venue signals are coarse:539general machine-learning venues carry fractional weights for several AI540categories at once, so a work with no abstract and a generic title can be541assigned to a parent-level category on venue evidence alone, or to none.542OpenAlex topics are themselves the output of a classifier with documented543error, and a work whose topics are wrong inherits that error with weight; the544protocol lists this among the limitations declared before analysis.545Multi-label assignment with a cap of one per type and a threshold of one tends546to over-assign categories to long abstracts that mention many objects, which547inflates $|C(w)|$ in the post period, when abstracts increasingly cite models548and benchmarks by name; the co-classification statistics of549Section~\ref{sec:m-networks} are affected by this in a direction that would550mimic convergence (hypothesis H4) and must be read together with the primary-label551flow statistics, which are not. Finally, works without an abstract (a known552share of the corpus) are classified from the title and the metadata only and553have lower recall for the keyword-dependent categories; the share of such554works is reported by year because it is not constant.555556\section{Bibliometric indicators}557\label{sec:m-bibliometrics}558559The indicators of this section are the estimands of research questions RQ1,560RQ3 and RQ6. They are standard in the scientometric literature, and the561definitions follow the review of \citet{waltman2016review} where a choice had562to be made; what is specific to this study is the citation-window discipline563imposed by the eight-year span of the corpus and the explicit treatment of the564two counting conventions. The scripts are \texttt{bibliometrics/01\_volume\_series.py},565\texttt{02\_collaboration.py} and \texttt{03\_citation\_impact.py}.566567\subsection{Volume, composition and growth}568569The monthly count $N_t$ and the category counts $N_{k,t}$ of570equation~\eqref{eq:counts} are tabulated by first month, period, date precision,571type and source membership (DBLP-indexed, OpenAlex-primary, arXiv-linked), with572the numbers of works having an abstract, having at least one resolvable573reference, and being open access; the annual table adds the mean number of574authors, references and countries per work. Composition is the share575$s_{k,t}$; its annual counterpart uses the primary label on all eligible works.576Growth between two dates separated by $\Delta$ years is summarised by the577compound annual growth rate578\begin{equation}579 \mathrm{CAGR}(t_a, t_b) \;=\; \Bigl( \frac{N_{t_b}}{N_{t_a}} \Bigr)^{1/\Delta} - 1,580 \qquad \Delta = (t_b - t_a)\ \text{in years},581 \label{eq:cagr}582\end{equation}583applied to annual totals and to annual category totals; it is a descriptive584summary of two end points and says nothing about the path between them, which585is why the structural-change analysis of Section~\ref{sec:m-structural} works586on the full monthly series instead. The CAGR is computed at table-making time587from the annual counts rather than by a dedicated script; the plan lists it588among the Phase-4 indicators and it is reported for complete years only, since5892026 is right-censored (Section~\ref{sec:m-truncation}).590591\subsection{Fixed citation windows}592\label{sec:m-citations}593594OpenAlex provides, for each work, the number of citations received in each595calendar year (\texttt{counts\_by\_year}). Let $c_{w}(u)$ be the citations596received by $w$ in calendar year $u$ and $y(w)$ its publication year. The597fixed-window counts are598\begin{equation}599 c^{(12)}_w = \sum_{u \le y(w)+1} c_w(u), \qquad600 c^{(36)}_w = \sum_{u \le y(w)+2} c_w(u), \qquad601 c^{(48)}_w = \sum_{u \le y(w)+3} c_w(u),602 \label{eq:windows}603\end{equation}604so that $c^{(12)}$ counts citations in the publication year and the following605calendar year, $c^{(36)}$ in the publication year and the two following years,606and so on. The superscripts are the names used in the code and in the tables607and must be read as calendar-year windows rather than as exact month counts: a608work published in January and one published in December of the same year609receive windows that differ by eleven months in effective length. This610granularity is imposed by the data (OpenAlex does not provide citation dates611below the year) and is the same for the baseline and the post period, so it612blurs comparisons within a year but does not bias comparisons between years.613The window is the device that neutralises citation-age bias: comparing the614total citation count of a 2019 work with that of a 2025 work compares seven615years of exposure with one, whereas comparing $c^{(36)}$ compares equal616exposures. The cost is that the last window-length of the corpus cannot be617evaluated; $c^{(36)}$ is complete for publication years up to 2023 given a618snapshot taken late in 2026, and $c^{(12)}$ up to 2024. Tables flag the years619for which a window is incomplete, and the choice of window length follows the620evidence in \citet{wang2013window} that short windows rank works materially621differently from long ones in slow-moving fields, which is why two lengths are622reported rather than one.623624\subsection{Field normalisation}625626Raw citation counts differ across subfields and document types by factors that627have nothing to do with influence. The normalised citation score of a work is628its window count divided by the mean window count of its reference class629\citep{waltman2016review, waltman2019fieldnorm}:630\begin{equation}631 \mathrm{NCS}^{(h)}_w \;=\; \frac{c^{(h)}_w}{\bar c^{(h)}\bigl(y(w), \tau(w), f(w)\bigr)}, \qquad632 \bar c^{(h)}(y, \tau, f) = \frac{1}{|\mathcal{W}_{y,\tau,f}|}\sum_{v \in \mathcal{W}_{y,\tau,f}} c^{(h)}_v ,633 \label{eq:ncs}634\end{equation}635where $f(w)$ is the primary OpenAlex subfield of $w$ and $\mathcal{W}_{y,\tau,f}$636the set of eligible works sharing year, type and subfield. The reference class637is computed on the eligible corpus, not on all of OpenAlex, so the638normalisation is relative to computer science as delimited here: an NCS of 2639means twice the mean of comparable computer-science works, not twice the world640mean. The score is undefined when the class mean is zero (very small classes in641the most recent years) and is then left missing rather than set to zero.642Normalisation by the mean of a heavy-tailed distribution is sensitive to a few643very highly cited works in the class; the median-based alternatives discussed644by \citet{waltman2016review} are not used because the median of $c^{(36)}$ is645zero in many classes of this corpus, which would make them uninformative.646647OpenAlex's own field-weighted citation impact (FWCI) is kept as a secondary648indicator. Its documentation defines it as ``citations received divided by649citations expected for works of the same type, year, and subfield'', with a650world average of one \citep{openalex2026fwci}. It differs from651equation~\eqref{eq:ncs} in three respects: the expected count is computed over652all of OpenAlex rather than over this corpus; the citation count is the total653to date rather than a fixed window, so that FWCI values of recent works are654based on a short and unequal exposure; and the computation is OpenAlex's,655recomputed nightly, so that the value depends on the snapshot date. For these656reasons FWCI is reported for comparison and never used to select works.657658\subsection{Inequality and concentration}659660Citation inequality within a publication year is measured by the Gini661coefficient of $c^{(36)}$ among the $n$ eligible works of that year. With the662works sorted so that $c_{(1)} \le c_{(2)} \le \dots \le c_{(n)}$, the estimator663implemented in SQL is the rank form664\begin{equation}665 G \;=\; \frac{2\sum_{i=1}^{n} i\, c_{(i)}}{n \sum_{i=1}^{n} c_{(i)}} - \frac{n+1}{n},666 \label{eq:gini}667\end{equation}668which equals one minus twice the area under the Lorenz curve and lies in669$[0, 1 - 1/n]$; the coefficient is named after \citet{ceriani2012gini}'s670account of its origin. Uncited works (a large share within a three-year671window) contribute zero to the numerator and pull $G$ upward, so the share of672uncited works is reported next to it. The protocol (H5) refers to the Gini of67324-month citations; the implemented statistic uses the three-calendar-year674window $c^{(36)}$, which is complete for one more publication year than the675longer alternatives and less dominated by zeros than $c^{(12)}$. This is a676deviation from the protocol wording and is recorded as such.677678Venue concentration within a year is the Herfindahl--Hirschman index of the679distribution of works over sources,680\begin{equation}681 \mathrm{HHI}_y \;=\; \sum_{v} \sigma_{v,y}^2, \qquad682 \sigma_{v,y} = \frac{N_{v,y}}{\sum_{v'} N_{v',y}},683 \label{eq:hhi}684\end{equation}685where $N_{v,y}$ is the number of eligible works of year $y$ whose primary686source is $v$ \citep{hirschman1964paternity}; works without a source are687excluded from the denominator, and the number of distinct sources and the688largest single share are reported with the index. Because arXiv is a single689OpenAlex source, growth in preprints mechanically raises $\mathrm{HHI}_y$ even690when the journal and conference landscape becomes more dispersed; this is the691reason the protocol's H5 predicts a stable or falling HHI only ``because of692preprint growth'' with the preprint source treated separately, and the tables693report the index with and without the preprint type.694695\subsection{Collaboration, countries and institutions}696697Team size is summarised by the mean and median number of authors per work and698by the shares of single-author works and of works with at least five or ten699authors. Two counting conventions are used for countries and institutions,700because they answer different questions \citep{waltman2016review}. Under full701counting a work contributes one unit to every country among its authors'702affiliations; under fractional counting it contributes $1/|K(w)|$ to each of703its $|K(w)|$ distinct countries, so that the fractional totals sum to the704number of works with at least one country. The same pair of conventions is705applied to institutions, with the fraction taken over the distinct institutions706of the work. The international collaboration share of year $y$ is707\begin{equation}708 \mathrm{ICS}_y \;=\; \frac{|\{w : y(w)=y,\ |K(w)| \ge 2\}|}{|\{w : y(w)=y,\ |K(w)| \ge 1\}|},709\end{equation}710that is, among works with at least one resolved country, the share with authors711from two or more countries; works without affiliation data are excluded from712the denominator and their share is reported, because affiliation completeness713in OpenAlex varies by source and year and a change in completeness would714otherwise masquerade as a change in collaboration. The industry share is the715share of works with at least one affiliation of OpenAlex institution type716\textit{company} among works with at least one typed affiliation. Country-pair717and institution-level tables apply minimum-support thresholds (fifty joint718works for a country pair, two hundred works for an institution within a period)719that keep the released tables to the robustly estimated part of the720distribution; these thresholds are reporting choices and are stated in the721table notes.722723\subsection{Diversity indices}724\label{sec:m-diversity}725726Interdisciplinarity is measured on the distribution of a work's references, or727of a category's citations, over the categories of the ontology. Let728$p = (p_1, \dots, p_K)$ be such a distribution and $\delta_{ij} \in [0,1]$ a729dissimilarity between categories $i$ and $j$. The Rao--Stirling index730\citep{rao1982diversity, stirling2007diversity}731\begin{equation}732 \Delta_{\mathrm{RS}}(p) \;=\; \sum_{i \ne j} p_i\, p_j\, \delta_{ij}733 \label{eq:rao-stirling}734\end{equation}735is the expected dissimilarity between two categories drawn at random from $p$;736it is zero when all mass sits on one category and increases with variety (the737number of categories present), balance (the evenness of $p$) and disparity (the738dissimilarity of the categories involved), the three components that739\citeauthor{stirling2007diversity} argues any diversity measure should respond740to. Its use in scientometrics follows \citet{rafols2010diversity}. Its known741weakness is that it saturates: for very even distributions over many742categories it approaches the mean dissimilarity and no longer discriminates743\citep{zhang2016diversity}. The Leinster--Cobbold family744\citep{leinster2012diversity} repairs this by defining, for a similarity matrix745$Z = (z_{ij})$ with $z_{ij} = 1 - \delta_{ij}$ and an order $q \ge 0$,746\begin{equation}747 {}^{q}D^{Z}(p) \;=\; \Bigl( \sum_{i : p_i > 0} p_i\, (Zp)_i^{\,q-1} \Bigr)^{1/(1-q)},748 \qquad (Zp)_i = \sum_j z_{ij}\, p_j ,749 \label{eq:leinster-cobbold}750\end{equation}751with the limit ${}^{1}D^{Z}(p) = \prod_i (Zp)_i^{-p_i}$ at $q = 1$. The quantity752$(Zp)_i$ is the ``ordinariness'' of category $i$ under $p$: how much of the753distribution is similar to $i$. The index is an effective number of754categories---it equals $K$ for the uniform distribution over $K$ mutually755dissimilar categories---and the order $q$ sets the weight given to rare756categories (large $q$ counts only the dominant ones). Following757\citet{zhang2016diversity} the manuscript reports $q = 2$, which has the758closed form ${}^{2}D^{Z}(p) = 1 / \sum_{i,j} p_i z_{ij} p_j = 1/(1 - \Delta_{\mathrm{RS}}(p))$759when $z_{ii} = 1$, so that the two families are monotone transforms of each760other at this order and differ only in scale and in their behaviour at the761saturation end. The dissimilarity $\delta_{ij}$ between categories is one762minus the cosine similarity of the category centroids of763Section~\ref{sec:m-semantic} in the baseline period, so that the disparity764component is estimated from the corpus rather than imposed. The current765pipeline computes the category flow matrices from which $p$ is formed766(Section~\ref{sec:m-networks}) and the centroid similarities, but the two767diversity indices are not yet produced by a script; they are defined here768because the protocol commits to them, and their values in Part IX are769\pending{Rao--Stirling and Leinster--Cobbold indices per category and period, not yet computed}770until the computation is added and audited.771772\section{Citation and collaboration networks}773\label{sec:m-networks}774775\subsection{The citation graph and its boundary}776\label{sec:m-citgraph}777778Citation edges come from the OpenAlex \texttt{referenced\_works} lists, which779are verified by construction in the sense that each edge is an assertion of the780source database rather than an inference of this study. The script781\texttt{knowledge\_graph/01\_citation\_graph.py} splits the references of782eligible works into two edge sets:783\begin{align}784 \mathcal{E}_{\mathrm{int}} &= \{ (w, v) : w \in \mathcal{W},\ v \in \mathcal{W},\ v \in \mathrm{refs}(w) \},\\785 \mathcal{E}_{\mathrm{ext}} &= \{ (w, v) : w \in \mathcal{W},\ v \notin \mathcal{W},\ v \in \mathrm{refs}(w),\ v \in \text{slim table} \},786\end{align}787the internal edges forming the citation graph of computer science proper and788the external edges recording what the corpus cites outside itself, with the789cited work's publication year, type and primary OpenAlex field resolved from the790slim table of all works. References that resolve to no OpenAlex record are791counted (the declared reference count of each work is stored) but cannot be792typed. The yearly tables derived from these sets are the inflows by cited793field (how much of each citing year's references go to mathematics, medicine,794the social sciences, and so on), the distribution of citation age795$y(w) - y(v)$ by citing year, and the reference coverage (declared, internal,796external) by year. Coverage matters for every network statistic that follows:797if the share of resolvable references rises over time, as it does in OpenAlex798because recent works are better matched, then internal edge counts rise for799reasons unrelated to citation behaviour, and all flow statistics are therefore800expressed as shares of resolved edges within the citing year.801802\subsection{Category flow matrices}803804For each citing year $t$ the script \texttt{knowledge\_graph/02\_category\_flows.py}805forms the $K \times K$ matrix806\begin{equation}807 F_t[i, j] \;=\; \bigl|\{ (w, v) \in \mathcal{E}_{\mathrm{int}} : y(w) = t,\ \kappa^{\ast}(w) = i,\ \kappa^{\ast}(v) = j \}\bigr| ,808 \label{eq:flow}809\end{equation}810the number of citations made in year $t$ by works whose primary category is $i$811to works whose primary category is $j$, together with the row-normalised812shares $F_t[i,j] / \sum_{j'} F_t[i,j']$. Works without a primary category813contribute no edges to $F_t$; their references are retained in814$\mathcal{E}_{\mathrm{int}}$ but fall outside the matrix. Aggregating rows and815columns by area through $a(\cdot)$ gives the $8 \times 8$ area flow matrix, and816the cross-area share of citing area $\alpha$ in year $t$ is817\begin{equation}818 X_{\alpha, t} \;=\; \frac{\sum_{i : a(i)=\alpha}\ \sum_{j : a(j) \ne \alpha} F_t[i,j]}{\sum_{i : a(i)=\alpha}\ \sum_{j} F_t[i,j]},819 \label{eq:cross-area}820\end{equation}821the fraction of an area's internal references that leave the area. This is the822statistic behind hypothesis H4. It is not a measure of interdisciplinarity in823the sense of Section~\ref{sec:m-diversity}, because it treats all other areas824as equally distant; it is a boundary-crossing rate, and its interpretation825depends on the stability of the boundaries, which the classifier fixes once826for all years. A co-classification matrix counts, for each year, the works827carrying both category $i$ and category $j$ in their full label set $C(w)$; it828is reported alongside the flows but, as noted in829Section~\ref{sec:m-classification}, it is sensitive to abstract length and830vocabulary in a way the primary-label flows are not.831832\subsection{Modularity of the yearly flow network}833834The degree to which citations stay within categories, or within areas, is835summarised by the modularity of the weighted directed graph with adjacency836$W = F_t$, evaluated at the fixed partition given by the categories themselves837(each category its own community) and at the coarser partition given by the838areas. The implemented statistic is839\begin{equation}840 Q(W, g) \;=\; \frac{1}{m} \sum_{i,j} \Bigl( W_{ij} - \frac{k^{\mathrm{out}}_i\, k^{\mathrm{in}}_j}{m} \Bigr)\, \mathbf{1}[g_i = g_j],841 \qquad m = \sum_{i,j} W_{ij},\quad k^{\mathrm{out}}_i = \sum_j W_{ij},\quad k^{\mathrm{in}}_j = \sum_i W_{ij},842 \label{eq:modularity}843\end{equation}844which is the directed generalisation by \citet{leicht2008directed} of the845Newman--Girvan modularity \citep{newman2004community}: the observed weight846within communities minus the weight expected if each citation were rewired at847random while preserving every node's out-strength and in-strength. Because the848partition is given rather than optimised, $Q$ is used here as a descriptive849index of assortativity by category, not as the objective of a community850detection algorithm; the resolution limit that affects optimised modularity851\citep{fortunato2007resolution, fortunato2010community} therefore does not852arise, but the index inherits the dependence of the flow matrix on the853classifier. Two values are reported per year, $Q_{\mathrm{cat}}$ with854$g_i = i$ and $Q_{\mathrm{area}}$ with $g_i = a(i)$, together with the self-share855$\operatorname{tr}(F_t)/m$, which is the uncorrected fraction of citations856staying within the citing category. Hypothesis H4 predicts a decrease in857$Q_{\mathrm{area}}$ in the post period. A fall in $Q$ can also arise if the858composition of citing works shifts toward categories that were always859boundary-crossing (large language models citing natural-language processing860and machine-learning theory), so Part IX reports $Q$ together with the861composition-adjusted cross-area shares obtained by fixing the row weights at862their baseline values.863864\subsection{Co-authorship, institution and country networks}865866The plan lists author, institution and country collaboration networks built867with \texttt{igraph}. The implemented collaboration layer is tabular rather than868graph-analytic: country pairs with at least fifty joint works per period869(edges of the country network, with their weights), institution counts by870period under full and fractional counting, and institution-type shares. The871country network is thus available as an edge list from which the figures of872Part VIII are drawn, and degree, strength and density can be computed from it;873author-level co-authorship networks are not constructed in the current874pipeline, because author disambiguation in OpenAlex is of uneven quality over875the period and an author graph of this size would be dominated by that noise.876This is a narrowing of the plan, recorded here; the country and institution877tables are the collaboration estimands actually reported.878879\section{Semantic mapping}880\label{sec:m-semantic}881882\subsection{Document embeddings}883884Each eligible work with an abstract is represented by a dense vector computed885by a scientific sentence-embedding model from the string886``$\text{title}$. $\text{abstract}[1{:}2000]$'' (the abstract truncated to8872,000 characters), tokenised to at most 256 word pieces, and L2-normalised, so888that the inner product of two vectors is their cosine similarity889(\texttt{embeddings/embed\_corpus.py}). The primary model is SPECTER2 base890\citep{singh2023scirepeval}, the successor of SPECTER891\citep{cohan2020specter}, a transformer trained with a citation-informed892triplet objective so that papers that cite one another are close in the893embedding space; this inductive bias is the appropriate one for mapping a894literature by its intellectual proximity rather than by lexical overlap. The895protocol requires a second embedding family for comparison; the benchmark896script evaluates SciNCL \citep{ostendorff2022scincl}, a general-purpose897BGE model and a MiniLM sentence-transformer \citep{reimers2019sbert} for898throughput and dimensionality on the same hardware, and the atlas script899accepts any of them through its model argument, so the comparison is a900re-run with a different tag. The embeddings are stored as float16 shards with901their work identifiers and a per-host manifest (model name, maximum sequence902length, device, timings), computed on several nodes of the cluster in903parallel; float16 storage changes cosine similarities by less than904$10^{-3}$, which is below any threshold used downstream.905906Three assumptions underlie everything built on these vectors. The abstract is907assumed to be a faithful summary of the work's content, which it is for most908research articles and is not for extended abstracts and some proceedings909papers. The embedding geometry is assumed stable across the period: a model910trained on literature up to its release date represents 2026 work in a space911shaped by earlier work, so genuinely new vocabulary is embedded by analogy to912what the model knows, and the novelty statistic below measures distance in913that space, not in some ideal space of ideas. And cosine similarity is assumed914to be a sufficient proxy for topical proximity; this is the standard915assumption of the field and is supported by the retrieval benchmarks on which916these models are evaluated, with the caveat that all such benchmarks are917dominated by pre-2023 literature.918919\subsection{Atlas: projection and clustering}920921The two-dimensional atlas and the cluster structure are computed on a uniform922random sample of 200,000 eligible works with embeddings (seed 44), because923density-based clustering of the full corpus in the native space is neither924computationally practical nor, given the noise level of abstracts, more925informative. UMAP \citep{mcinnes2018umap} with the cosine metric, 30 nearest926neighbours and a minimum distance of zero projects the sample to 50927dimensions; HDBSCAN \citep{campello2013hdbscan, mcinnes2017hdbscan} with a928minimum cluster size of 200 and a minimum sample count of 20 is run on the92950-dimensional projection; a second UMAP to two dimensions (minimum distance9300.1) is used for display only. The 50-dimensional intermediate step is what931makes density-based clustering workable on 768-dimensional normalised vectors,932whose pairwise distances concentrate; it is also a source of distortion, since933UMAP preserves local neighbourhoods and not global distances, so cluster934\emph{membership} is meaningful and the distances between clusters on the935two-dimensional map are not. HDBSCAN labels points in low-density regions as936noise ($-1$), and the noise share is reported with the cluster count. Each937cluster is described by the twelve title terms with the highest mean TF--IDF938weight (unigrams and bigrams, English stop words removed, minimum document939frequency five), by its modal primary category and that category's share,940and by the share of its members in the post period; these descriptors are941how clusters are related to the ontology, and the comparison of the two942partitions (bottom-up clusters against top-down categories) is one of the943checks on the ontology reported in Part IX.944945\subsection{Stability}946947Cluster stability is measured by a split-half design. Five times, the sample948is randomly permuted and divided into two halves; HDBSCAN (minimum cluster949size 100, since each half has half the points) is run separately on the two950halves of the \emph{same} 50-dimensional projection; a 5-nearest-neighbour951classifier trained on the first half's labels predicts labels for the second952half; and the adjusted Rand index \citep{hubert1985comparing}953\begin{equation}954 \mathrm{ARI} \;=\; \frac{\sum_{ij}\binom{n_{ij}}{2} - \bigl[\sum_i \binom{a_i}{2}\sum_j \binom{b_j}{2}\bigr]/\binom{n}{2}}955 {\tfrac12\bigl[\sum_i \binom{a_i}{2} + \sum_j \binom{b_j}{2}\bigr] - \bigl[\sum_i \binom{a_i}{2}\sum_j \binom{b_j}{2}\bigr]/\binom{n}{2}}956\end{equation}957between the transferred labels and the second half's own labels is recorded958(here $n_{ij}$ is the contingency table of the two labellings and $a_i$, $b_j$959its margins). The mean of the five values is the reported stability. Two960caveats bound what this measures. The projection is fitted once on the full961sample, so the design tests the stability of the clustering conditional on the962projection and not the stability of UMAP itself, whose stochastic optimisation963is fixed by the seed; the protocol's phrase ``bootstrap ARI'' describes this964split-half procedure, which resamples without replacement. And the965nearest-neighbour transfer is itself a smoothing step: it maps noise points of966the first half to the majority label of their neighbours, which raises the967index relative to a direct comparison of two independent clusterings of the968same points.969970\subsection{Category centroids, drift and novelty}971\label{sec:m-novelty}972973In the native embedding space, the centroid of category $k$ in year $y$ is974the normalised mean vector975\begin{equation}976 \mu_{k,y} \;=\; \frac{\sum_{w : \kappa^{\ast}(w)=k,\ y(w)=y} e_w}{\bigl\|\sum_{w : \kappa^{\ast}(w)=k,\ y(w)=y} e_w\bigr\|},977\end{equation}978computed only for cells with at least 100 works, and the year-over-year drift979of a category is the cosine distance $1 - \mu_{k,y}^{\top}\mu_{k,y-1}$. Period980centroids average the yearly centroids over calendar years 2018--2022981(baseline) and 2023--2026 (post), and the inter-category cosine similarity982matrices of the two periods are the semantic counterpart of hypotheses H4 and983H5: convergence between two categories appears as an increase in the cosine984similarity of their centroids. The period boundary used here is the calendar985year, not the 30~November 2022 date of Section~\ref{sec:m-notation}; the986eleven months of 2022 that belong to the baseline are kept in the baseline987and December 2022 is attached to it rather than to the post period, a988deliberate simplification at the level of yearly centroids that moves a989single month across the boundary.990991The novelty of a work is its distance to the recent past of its own category:992\begin{equation}993 \nu(w) \;=\; 1 - e_w^{\top}\,\bar\mu_{\kappa^{\ast}(w),\ m(w)-24\,:\,m(w)-1}, \qquad994 \bar\mu_{k,\,a:b} = \frac{\sum_{t=a}^{b} \sum_{v : \kappa^{\ast}(v)=k,\ m(v)=t} e_v}{\bigl\|\,\cdot\,\bigr\|},995 \label{eq:novelty}996\end{equation}997the cosine distance between the work's vector and the normalised sum of the998vectors of all works of the same primary category whose first month lies in999the 24 months strictly before the work's own month. A work in the first months1000of a category, with no trailing window, has no novelty value. The1001definition uses only information dated before the work, which is what allows1002it to serve as a signal in the out-of-time detector of1003Section~\ref{sec:m-emerging}; but the centroid is computed with the1004\emph{final} primary categories of the earlier works, assigned by rules fixed1005in 2026, so the category boundaries themselves are not out-of-time. This is a1006limitation shared by every category-conditional statistic in the paper and1007is discussed in Section~\ref{sec:m-emerging}. Novelty defined as distance to a1008category centroid rewards works that sit between categories as much as works1009that are new; the interpretation of high novelty as ``new'' rather than1010``interdisciplinary'' requires the clusters and the flow statistics as1011corroboration, and the literature on novelty indicators warns that1012citation-based and text-based novelty measures do not agree well1013\citep{uzzi2013atypical, wang2017novelty}.10141015\section{Structural change in monthly series}1016\label{sec:m-structural}10171018The question behind RQ2 and hypotheses H1 and H3 is whether the monthly1019series of computer-science output, in total and by category, changed level or1020slope around the reference date, and whether any such change stands out1021against the ordinary variability of the series. Four methods are applied to1022every series by \texttt{econometrics/run\_structural\_change.py}, using the1023pure functions of \texttt{econometrics/structural\_change.py} (unit-tested on a1024simulated series with a known break). None of them identifies a cause. An1025interrupted time series with a single pre-specified date answers ``did the1026series change at that date, net of trend and season?''; the placebo1027distribution answers ``is that date special?''; the multiple-break and1028changepoint methods answer ``where does the series change, if one does not1029specify a date?''; and the Bayesian online detector answers ``when would an1030observer following the series month by month have concluded that it had1031changed?''. The reference date is a historical marker, and the manuscript1032uses no causal vocabulary about it (CLAUDE.md §6.5).10331034\subsection{Series construction and truncation}1035\label{sec:m-truncation}10361037Each series is a vector of monthly counts $N_t$ on the month-precision1038subset, from February 2018 to the last complete month $t_{\mathrm{L}}$, by1039default June 2026, with sensitivity runs at March and August 2026. The first1040month of the window is dropped because January 2018 is contaminated by the1041year-precision convention of Section~\ref{sec:m-notation} in the other1042direction (year-precision works with a genuine January date are not1043recoverable). Category series $N_{k,t}$ use the multi-label count restricted to1044month-precision works, and a series is analysed only if it has at least 481045non-zero months and at least 500 works in total; smaller series yield1046unstable fits and are reported descriptively. All methods operate on1047$y_t = \log(N_t + 1)$, the shift making the transform defined for empty months1048and immaterial for counts in the hundreds or thousands.10491050Right-truncation is handled by truncation, not by correction. The plan1051proposed to correct recent months by the indexing-delay profile estimated from1052the creation dates; the implemented pipeline estimates that profile1053(\texttt{indexing\_lag.csv}: for each publication month, the median and 90th1054percentile of $d_{\mathrm{cr}}(w) - d_{\mathrm{pub}}(w)$ and the shares indexed1055within 90 and after 180 days) and reports it, but the structural-change runs1056simply stop the series at $t_{\mathrm{L}}$ and vary $t_{\mathrm{L}}$. The1057reason is that an inflation correction based on the lag profile of earlier1058years assumes that the profile is stationary, and the profile is itself1059affected by the events under study (OpenAlex's own ingestion changed over the1060period); a correction would import that assumption into every test. Truncating1061to the last month at which the lag profile indicates near-complete indexing1062loses a few months of data but introduces no model. Donut windows (dropping1063the months adjacent to the event) are not implemented; the alternative event1064dates of Section~\ref{sec:m-altdates} serve the related purpose of showing1065whether the estimated change is tied to a particular month.10661067\subsection{Interrupted time series with seasonality and HAC errors}1068\label{sec:m-its}10691070With $t = 0, 1, \dots, n-1$ indexing the months and $t_e$ the index of the1071event month, the segmented regression is1072\begin{equation}1073 y_t \;=\; \beta_0 + \beta_1\, t + \beta_2\, \mathbf{1}[t \ge t_e] + \beta_3\, (t - t_e)\,\mathbf{1}[t \ge t_e]1074 + \sum_{j=2}^{12} \gamma_j\, \mathbf{1}[\mathrm{month}(t) = j] + \varepsilon_t ,1075 \label{eq:its}1076\end{equation}1077the standard interrupted-time-series specification \citep{bernal2017its} with1078eleven month-of-year dummies (January as reference). The coefficient1079$\beta_2$ is the change in log level at the event, $\beta_3$ the change in1080monthly log slope, and $\beta_1$ the pre-event slope; since $y$ is a log count,1081$e^{\beta_2} - 1$ is the proportional level shift and $\beta_1$ and $\beta_3$1082are monthly growth rates. The event month is coded as the first full month1083after the reference date, December 2022 for the 30~November 2022 marker, and1084likewise for the alternative dates. Ordinary least squares estimates the1085coefficients; the covariance matrix is the heteroskedasticity- and1086autocorrelation-consistent estimator of \citet{newey1987hac} with a Bartlett1087kernel and bandwidth six months,1088\begin{equation}1089 \hat V = (X^{\top}X)^{-1} \Bigl( \hat\Gamma_0 + \sum_{\ell=1}^{6} \bigl(1 - \tfrac{\ell}{7}\bigr)(\hat\Gamma_\ell + \hat\Gamma_\ell^{\top}) \Bigr) (X^{\top}X)^{-1},1090 \qquad \hat\Gamma_\ell = \sum_{t} \hat\varepsilon_t \hat\varepsilon_{t-\ell}\, x_t x_{t-\ell}^{\top},1091\end{equation}1092which makes the reported standard errors robust to serial correlation of the1093residuals up to half a year. The bandwidth is fixed rather than chosen by the1094data-dependent rule of \citet{andrews1991hac}; with roughly one hundred1095observations the difference is immaterial and a fixed choice is easier to1096preregister. The fitted values are back-transformed as $e^{\hat y_t} - 1$ for1097the figures. The specification's known weaknesses are those of any single-break1098segmented regression: it assumes the change is immediate and permanent, it1099attributes to $\beta_2$ any curvature of the pre-trend that a linear1100$\beta_1 t$ cannot absorb, and with a reference date placed near the centre of1101the sample it is well identified only because the post period is long. The1102placebo analysis is the main guard against the second weakness.11031104\subsection{Placebo distribution}1105\label{sec:m-placebo}11061107The ITS of equation~\eqref{eq:its} is re-estimated with the event placed at1108every month $t'$ from the 25th month of the series to the 12th month before1109its end, yielding the $t$-statistics $\{ t^{(2)}_{t'} \}$ and $\{ t^{(3)}_{t'} \}$1110of the level and slope changes as a function of the hypothetical event date.1111The placebo $p$-value of the true event is its rank among these:1112\begin{equation}1113 p^{\mathrm{plac}}_{\beta_2} \;=\; \frac{1}{|\mathcal{T}'|}\sum_{t' \in \mathcal{T}'} \mathbf{1}\bigl[\, |t^{(2)}_{t'}| \ge |t^{(2)}_{t_e}| \,\bigr],1114 \label{eq:placebo}1115\end{equation}1116and likewise for $\beta_3$. The set $\mathcal{T}'$ contains the true event, so1117the smallest attainable value is $1/|\mathcal{T}'|$. This statistic is the1118``placebo in time'' diagnostic recommended for interrupted time series1119\citep{bernal2018controls}: if a level shift of comparable $t$-statistic is1120found at a quarter of all candidate dates, a conventional $p$-value from the1121HAC standard error of $\beta_2$ overstates the evidence, because the series1122has enough curvature and persistence that any date looks like a break. The1123value is not a $p$-value under a null hypothesis in the usual sense (the1124candidate dates are not exchangeable draws from a null distribution, and the1125regressions share the same data), and the manuscript calls it a placebo rank.1126Two implementation details depart from the plan's wording. The plan speaks of1127placebo breaks ``at every month of the baseline''; the implementation ranges1128over the baseline \emph{and} the post period, so that a change in 2023 or11292024 that is larger than the one at the reference date lowers the rank of the1130reference date, which is the conservative direction for hypothesis H1 and is1131why the wider range was kept. And the minimum of 24 pre-months and 121132post-months means that candidate dates near the ends of the series, where the1133level-change coefficient is poorly identified, are excluded from the1134comparison.11351136\subsection{Multiple breaks: dynamic programming with information criteria}1137\label{sec:m-bp}11381139The Bai--Perron framework \citep{bai1998breaks, bai2003computation} estimates1140$m$ unknown break dates $\tau_1 < \dots < \tau_m$ as the global minimiser of1141the sum of squared residuals of a segment-wise regression. The implementation1142is the pure dynamic programme of \citet{bai2003computation} on the log series1143with a segment-wise linear trend: for a segment $[i, j)$ of at least $h$1144observations,1145\begin{equation}1146 S(i, j) \;=\; \min_{a, b}\ \sum_{t=i}^{j-1} \bigl( y_t - a - b\,t \bigr)^2,1147\end{equation}1148and the optimal partition of the first $j$ observations into $m+1$ segments1149is obtained recursively,1150\begin{equation}1151 C_m(j) \;=\; \min_{\,m h \le i \le j - h}\ \bigl\{ C_{m-1}(i) + S(i, j) \bigr\}, \qquad C_0(j) = S(0, j),1152 \label{eq:bp-dp}1153\end{equation}1154with the break positions recovered by back-tracking. The minimum segment1155length is $h = \max\{8, \lfloor 0.15\, n \rfloor\}$ months, a trimming of 15 per1156cent that is the usual choice in this literature; it forbids breaks in the1157first and last $h$ months, which for the default window means that no break1158can be placed after the autumn of 2024, and it also forbids two breaks closer1159than $h$ months. The number of breaks, up to three, is selected by two1160criteria computed on the global minima $\mathrm{SSR}_m = C_m(n)$,1161\begin{align}1162 \mathrm{BIC}(m) &= n \log\bigl(\mathrm{SSR}_m / n\bigr) + p_m \log n, \\1163 \mathrm{LWZ}(m) &= n \log\bigl(\mathrm{SSR}_m / (n - p_m)\bigr) + p_m\, c_0\, (\log n)^{2.1}, \qquad c_0 = 0.299,1164\end{align}1165with $p_m = 2(m+1) + m$ parameters (an intercept and a slope per segment plus1166the $m$ break dates). The BIC is Schwarz's criterion \citep{schwarz1978bic};1167the LWZ criterion of \citet{liu1997segmented}, in the form used by1168\citet{bai2003computation}, penalises additional breaks more heavily and is1169known to select fewer spurious breaks when the errors are serially correlated,1170which they are in these series (the monthly residual autocorrelation is what1171the HAC errors of the ITS correct for). Both selections are reported. The1172sequential sup-$F$ tests of \citeauthor{bai1998breaks} are not implemented; in1173their absence the break dates carry no $p$-value, and their stability is1174assessed instead through the agreement of the two criteria, the sensitivity to1175$t_{\mathrm{L}}$, and the agreement with the two methods below. The regression1176in each segment contains no seasonal terms, so a seasonal pattern can only be1177absorbed by the error; with a trimming of eight or more months per segment1178this cannot create a break by itself but it inflates $\mathrm{SSR}_m$ uniformly.11791180\subsection{PELT}11811182The pruned exact linear time algorithm \citep{killick2012pelt} finds the1183changepoint set $\mathcal{C}$ minimising a penalised cost,1184\begin{equation}1185 \min_{\mathcal{C}}\ \sum_{\text{segments } [i,j) \text{ induced by } \mathcal{C}}\ \sum_{t=i}^{j-1} (y_t - \bar y_{i:j})^2 \;+\; \lambda\, |\mathcal{C}| ,1186 \qquad \lambda = 2\, \widehat{\mathrm{Var}}(y)\, \log n ,1187 \label{eq:pelt}1188\end{equation}1189with the $\ell_2$ cost (piecewise constant mean) and a minimum segment length1190of six months, as implemented in the \texttt{ruptures} library1191\citep{truong2020ruptures}. The penalty is of the Schwarz type studied by1192\citet{yao1988schwarz} for the piecewise-constant Gaussian model, scaled by1193the sample variance of the series; it is a conservative choice in a trending1194series, because a piecewise-constant mean must spend changepoints to follow a1195trend, so the reported PELT dates should be read as the points where the level1196moves most, not as the Bai--Perron break dates of a trend model. The two1197methods are complementary for that reason: a date flagged by both is a change1198in level that is not explained by a change in slope, and a date flagged only1199by the trend model is a kink.12001201\subsection{Bayesian online changepoint detection}1202\label{sec:m-bocpd}12031204The online detector of \citet{adams2007bocpd} maintains, after each1205observation, a posterior distribution over the \emph{run length} $r_t$, the1206number of months since the last changepoint. Let $H$ be the constant hazard1207(the prior probability that a change occurs at any month, here $1/60$, a prior1208mean run length of five years), and let the observations within a run be1209modelled as $y \sim \mathcal{N}(\mu, \sigma^2)$ with the conjugate1210Normal--Inverse-Gamma prior1211$\mu \mid \sigma^2 \sim \mathcal{N}(\mu_0, \sigma^2/\kappa_0)$,1212$\sigma^2 \sim \mathrm{IG}(\alpha_0, \beta_0)$. After $r$ observations1213$y_1, \dots, y_r$ of the current run the hyperparameters update as1214\begin{equation}1215 \kappa_r = \kappa_0 + r, \quad1216 \mu_r = \frac{\kappa_0 \mu_0 + \sum_{i \le r} y_i}{\kappa_r}, \quad1217 \alpha_r = \alpha_0 + \frac{r}{2}, \quad1218 \beta_r = \beta_0 + \tfrac12 \sum_{i \le r}(y_i - \bar y)^2 + \frac{\kappa_0\, r\, (\bar y - \mu_0)^2}{2\,\kappa_r},1219\end{equation}1220which the code computes recursively, one observation at a time, as1221$\mu' = (\kappa\mu + y)/(\kappa+1)$, $\kappa' = \kappa + 1$, $\alpha' = \alpha + \tfrac12$,1222$\beta' = \beta + \kappa (y - \mu)^2 / (2(\kappa+1))$. The predictive1223distribution of the next observation given a run of length $r$ is the1224Student-$t$1225\begin{equation}1226 y_{t+1} \mid r_t = r \;\sim\; t_{2\alpha_r}\Bigl( \mu_r,\ \frac{\beta_r (\kappa_r + 1)}{\alpha_r \kappa_r} \Bigr),1227 \label{eq:predictive}1228\end{equation}1229and the run-length recursion is1230\begin{align}1231 P(r_{t+1} = r + 1,\ y_{1:t+1}) &= P(r_t = r,\ y_{1:t})\ p(y_{t+1} \mid r_t = r)\ (1 - H), \label{eq:rl-growth}\\1232 P(r_{t+1} = 0,\ y_{1:t+1}) &= \sum_{r} P(r_t = r,\ y_{1:t})\ p(y_{t+1} \mid r_t = r)\ H, \label{eq:rl-change}1233\end{align}1234normalised at each step to give the posterior $R_{t+1}(r) = P(r_{t+1} = r \mid y_{1:t+1})$.1235The hyperparameters are initialised from the first six months of the series1236($\mu_0$ their mean, $\beta_0$ their variance, $\kappa_0 = 1$, $\alpha_0 = 1$),1237an empirical-Bayes choice that uses the start of the series twice and whose1238effect vanishes after a few dozen observations. Two detection statistics are1239derived. Because a constant hazard places mass $H$ on $r = 0$ at every step by1240construction, the probability of a change ``at $t$'' is uninformative on its1241own; the code reports instead $P(r_t \le 3 \mid y_{1:t})$, the posterior1242probability that a change occurred within the last four months, and the1243maximum of this quantity over December 2022 to March 2023 is the statistic1244reported for the reference date. The second statistic is the sequence of1245maximum-a-posteriori run lengths $\hat r_t = \arg\max_r R_t(r)$; a1246\emph{reset} is declared at month $t$ when $\hat r_t \le 2$ after1247$\hat r_{t-1} > 12$, that is, when the most probable explanation of the data1248switches from a run of more than a year to a run that has just begun, and the1249list of reset months is the online detector's set of changepoints. The1250exact offline analogue \citep{fearnhead2006exact} would give the smoothed1251rather than the filtered posterior; the filtered version is used because the1252question it answers---when would a contemporaneous observer have detected the1253change---is the one relevant to the lead-time evaluation of1254Section~\ref{sec:m-emerging}.12551256\subsection{Alternative event dates}1257\label{sec:m-altdates}12581259The ITS is re-estimated for four alternative markers (June 2020 for GPT-3,1260May 2022 for DALL$\cdot$E~2, April 2023 for GPT-4, October 2024 for o1), each1261coded as the first full month after the public release, and an event is1262skipped when fewer than twelve months precede or follow it in the series. The1263exercise is not a horse race among causes. Its purpose is to show whether the1264estimated level and slope changes are specific to the November 2022 marker or1265whether the series exhibits similar changes at other dates associated with1266the same technological sequence, in which case the honest description is of a1267multi-year acceleration rather than a single break; the Bai--Perron dates are1268the data-driven complement to this pre-specified list. For the total series1269the sensitivity of the reference-date ITS and of the Bai--Perron dates to the1270truncation month $t_{\mathrm{L}}$ is also tabulated.12711272