War Atlas · Method series · Paper 02

Eight formulations in one column

A diagnostic of the acknowledgement field across eighteen proxy conflicts, and of the count already published over it

Measure class
1 — corpus diagnostic
Registered
2026-09-09
Status
counts verified · corpus unsourced
figures pending source verification
Falsifier
§7

Abstract. A proxy conflict is a war in which an outside state arms, funds or directs one of the combatants without being the principal belligerent itself. One spreadsheet on this machine records eighteen such conflicts, and gives each one a single cell saying whether the outside sponsor admitted what it was doing. This paper measures that column and nothing else. Across eighteen rows the column holds eight different forms of words: avowed and denied_then_admitted cover six rows each, and the remaining six rows are each phrased in a way used nowhere else in the column. A control settles what that means. The column immediately to its left, written by the same compiler in the same file, divides the same eighteen rows into five clean terms with no drift at all — so the spread is a property of the idea being recorded, not of a careless hand. The workbook already publishes a three-way breakdown over the loose column; that breakdown counts one row twice, misses another entirely, and still sums to eighteen because the two errors cancel exactly. The paper's claim is that this column, as it stands, cannot carry a count. It makes no claim whatever about how often sponsors in history admitted sponsorship, and the distribution reported below is a distribution of strings in a spreadsheet, not of behaviour in the world.

1Background

Datasets of armed conflict are plentiful and they agree on roughly what they record: dates, belligerents, battle deaths, sometimes a conflict type. Almost none of them carry a field for whether an external sponsor admitted the sponsorship. That absence is not an oversight so much as a difficulty, because admission is not a fact about a war — it is a fact about a state's public posture, and public postures change, differ between the sponsors in one war, and are argued about for decades afterwards.

The workbook examined here does carry such a field. That is what makes it worth a paper: an original column is worth more scrutiny than a duplicated one, because there is no second dataset to check it against. It also means the first honest question is not what does the column say but can this column hold a count at all. A column can be full, tidy-looking, and still incapable of being tallied, and the way that failure normally surfaces is that someone tallies it anyway.

The strongest argument against this paper should be stated before any number appears, because it is a good argument and it is not fully answerable. It runs: you have diagnosed the wrong defect. You are counting strings, and the problem is not the strings — it is the grain. The grain, or unit of analysis, is the thing one row stands for. Here one row stands for a conflict, but sponsorship is done by sponsors, and a conflict can have four of them pursuing different aims and admitting at different times. On that reading the eight formulations are not vocabulary drift at all; they are the visible pressure of one cell being asked to describe two sponsors at once. If that is right, then imposing a tidy vocabulary at the conflict grain would produce a clean, countable and permanently wrong column — a worse outcome than the untidy one, because tidy columns stop attracting scrutiny. That criticism is taken up in §5, where it is conceded rather than rebutted.

2Claim, class and preregistration

Registered claim

The acknowledgement column of proxy_conflicts is not, in its present state, fit to carry a count: any tally over it requires a bucketing rule that is not written down in the workbook, and the tally the workbook already publishes mis-assigns rows.

Measure class

Class 1 — corpus diagnostic. The object of study is a column in a named file, not the past. Every quantity below is a count of cells, recomputable in one line. It is explicitly not class 2, because no comparison is made between named historical cases; and explicitly not class 3, because eighteen conflicts gathered with no admission rule — a written statement, fixed in advance, of what qualifies a case for inclusion — cannot support any claim about proxy conflicts as a population. Class 1 is not a lesser result here. It is the only class the evidence permits, and a diagnostic of a corpus is entitled to take that corpus as given, because the corpus is the specimen.

Decision rule, stated as a rule before the count is read

The column is declared unfit to carry a count if either condition holds.

  1. R1 — no controlled vocabulary. A controlled vocabulary is a fixed, closed list of permitted terms. R1 fires if, after stripping surrounding spaces and lowercasing, at least one value in the column is a modified form of another value — a qualifier fused onto a base term — rather than a separate term in its own right.
  2. R2 — a published count mis-assigns. R2 fires if a tally already published over the column assigns at least one row to a number of buckets other than exactly one: two or more, or none.

The column is fit if neither fires. One further test governs the interpretation, and it is a positive control — a case where the instrument is known in advance what it should say. If a comparison column, written by the same compiler in the same sheet, also fires R1, then the finding is about the compiler's habits and the paper is worthless as a statement about the concept. Only if the control column passes cleanly can the spread be attributed to the idea being recorded.

Scale type of every variable

Both acknowledgement and the control column form are nominal: their values are names with no order and no spacing between them, so counting members of a category is the only arithmetic licensed. No mean, no median, no rank. This is enforced structurally elsewhere in the estate — the measure table in ops/truth.db declares scale_type against a closed list and refuses a mean over an ordinal by CHECK constraint — and it is stated here so that no reader treats the six-and-six below as a midpoint of anything. began and ended are years, and are interval-scaled; their difference is reported as a span in years and nothing further is done with it.

The order of work was not ideal and is recorded rather than hidden. The distribution of the column was measured on 2026-09-09 and logged as entry P5 in ops/domain_logic.py before the decision rule above was written down. The rule was written to be decidable by someone who had not seen the data, but it was not written first. This is carried as threat 1 in §6.

3Admission rule

Two admission rules are in play, and keeping them apart is what allows this paper to exist at all.

The rule for this paper's unit, stated and applied

The unit of analysis here is a cell, not a war.

  1. The cell lies in column G, acknowledgement, of the sheet proxy_conflicts in propaganda-and-proxy-states.xlsx.
  2. Its row carries a non-empty conflict_key in column A.
  3. No cell satisfying (1) and (2) is excluded on any ground — not for being blank, odd, or inconvenient.

Eighteen cells satisfy the rule. Eighteen are admitted. Nothing was dropped, and there is no discretion in the criteria, which is the whole reason a class 1 diagnostic can be stated at full confidence when the corpus underneath it cannot.

The rule for the eighteen conflicts, which does not exist

There is no written statement anywhere on this machine of why these eighteen conflicts and not others. The set is visibly bounded by the Cold War — every onset falls between 1946 and 1979, with eight of the eighteen beginning in the 1970s alone — and conflicts of exactly the same form after 1990 are simply absent. The atlas database keeps a table of admission rules, nine of them, and none covers this set. Its own legacy entry describes precisely this condition for a different body of rows: “Admitted by no stated rule… measured the frame after the fact and ruled the set a convenience sample, permanently.” The word that matters there is permanently: a frame measured after the data were collected caps every claim drawn from it at description, and no amount of extra data lifts the cap.

The honest sentence is that the eighteen were assembled by interest. That bounds what a successor paper may claim — no class 3 population claim is available until an admission rule is written — and it does not bound this one, because this paper's claim is about the column, and the column is fully present.

4Data

Every quantity used anywhere in this paper appears in Table 1 with the operation that produced it and a confidence. Certain (structural) means the number is a count of cells in a file that anyone can reopen; it is not a claim about history and cannot be wrong unless the file changes. Where the same file carries two different numbers for one quantity, a band is published rather than a point.

Table 1. Every quantity in this paper. All cell reads are from ops/reference/propaganda-and-proxy-states.xlsx, sheet proxy_conflicts unless another sheet is named. The recompute line is given in §8.
QuantityValueBasisConfidence
Data rows in proxy_conflicts18Rows with a non-empty conflict_key, read directlycertain (structural)
Columns in the sheet7Header row read directlycertain (structural)
Empty acknowledgement cells0 of 18Null and whitespace-only test over the admitted cellscertain (structural)
Distinct values, exactly as typed8Frequency count over raw cell valuescertain (structural)
Distinct values after trimming spaces and lowercasing8Same count over normalised values. This is the negative-space check: it asks whether near-duplicates exist that would explain the spread away, and finds nonecertain (structural)
Rows reading denied_then_admitted6Exact string matchcertain (structural)
Rows reading avowed, exactly and alone6Exact string matchcertain (structural)
Rows whose value occurs once in the column6Values of frequency 1, countedcertain (structural)
“Avowed”, as the file itself counts it6–8Band, not a point. Lower bound: 6 rows match the string exactly. Upper bound: 8 rows match the prefix pattern the workbook's own summary uses. One file, one quantity, two published figurescertain at both endpoints
Distinct values in the control column form5Frequency count over raw cell valuescertain (structural)
Block sizes of form over the same 18 rows6, 4, 3, 3, 2Frequency count; the five blocks are disjoint and exhaust the eighteen rowscertain (structural)
Breakdown published on the summary sheet8 / 6 / 4Cached values at summary!B16:B18, read with formulas resolvedcertain (structural)
Cells counted exactly once by those three formulas16 of 18Spreadsheet wildcard semantics reimplemented in Python and run per row; the reimplementation reproduces the workbook's three cached totals exactly, 3 of 3high (reconstruction, validated against cached totals; not executed in Excel)
Cells counted twice1 — congo-crisisAs abovehigh (reconstruction)
Cells counted zero times1 — mozambiqueAs abovehigh (reconstruction)
Onset years spanned1946–1979Minimum and maximum of begancertain (structural)
End years spanned1949–2002Minimum and maximum of endedcertain (structural)
Onsets by decade1 / 6 / 3 / 81940s, 1950s, 1960s, 1970s, from begancertain (structural)
Span from began to ended0–27 yearsArithmetic on two stated year columns. It is the span the file asserts, not a measured duration of fightingcertain (structural)
Rows whose parties_and_sponsors text contains a semicolon10 of 18Substring test. A structural proxy for “two sponsored sides are named”, not a semantic count of sponsorsmoderate — must be quoted as a semicolon count, never as a sponsor count
Rows carrying a date of admission0 — no such columnColumn list of the sheetcertain (absence)
Rows carrying an evidential_status0 — no such columnColumn list. The sibling sheet propaganda_campaigns does carry the field, 16 of 16 populatedcertain (absence)
Rows carrying a named source, region or theatre0 — no such columnsColumn listcertain (absence)
Admission rules in the atlas covering these 18 conflicts0 of 9select rule_id from admission_rule in war-atlas/db/atlas.db, read-onlycertain (absence)
Total rows across the workbook's seven data sheets111Live COUNTA formulas on the summary sheet, cached valuescertain (structural)
Two nominal columns from the same sheet, each partitioning the same 18 rows The form column divides 18 rows into five blocks of 6, 4, 3, 3 and 2. The acknowledgement column divides the same 18 rows into two blocks of 6 and six single-row slivers. 18 rows form acknowledgement 5 values 8 values 6 4 3 3 2 6 6 six one-off formulations, one row each

form   insurgency_sponsorship 6 · covert_regime_change 4 · direct_intervention 3 · client_conventional 3 · bloc_suppression 2
acknowledgement   denied_then_admitted 6 · avowed 6 · then, one row each: “avowed on the Western side”, “partly documented, still contested”, “partly avowed”, “partly documented”, “avowed by 1980s”, “documented”

Figure 1. The same eighteen rows, divided by two columns of the same sheet. Block widths are proportional to the number of rows. form is the positive control: five terms, five disjoint blocks, nothing left over, no qualifier fused into any term. acknowledgement is the column under test: two blocks of six, then six slivers of one. No line is fitted and no axis is drawn, because both variables are nominal — categories with no order — so there is nothing for a line to run along. A class 1 diagnostic would forbid a fitted line in any case.
Table 2. The eighteen admitted cells, in sheet order, with the value each holds verbatim. The final column is how many of the three formulas on the summary sheet count that row; it is a property of those formulas, not of the conflict. This table adds no quantity not already in Table 1.
conflict_keyyearsformacknowledgement, verbatimcounted
greece-civil1946–1949insurgency_sponsorshipavowed on the Western side1
korea1950–1953direct_interventiondenied_then_admitted1
iran-coup1953–1953covert_regime_changedenied_then_admitted1
guatemala-19541954–1954covert_regime_changedenied_then_admitted1
congo-crisis1960–1965covert_regime_changepartly documented, still contested2
yemen-19621962–1970client_conventionalavowed1
vietnam1955–1975direct_interventionpartly avowed1
laos-cambodia1959–1975insurgency_sponsorshipdenied_then_admitted1
chile-19731970–1973covert_regime_changepartly documented1
angola-war1975–2002insurgency_sponsorshipavowed by 1980s1
mozambique1977–1992insurgency_sponsorshipdocumented0
ogaden1977–1978client_conventionalavowed1
afghanistan-791979–1989direct_interventiondenied_then_admitted1
nicaragua-contra1979–1990insurgency_sponsorshipdenied_then_admitted1
el-salvador1979–1992insurgency_sponsorshipavowed1
chad-libya1978–1987client_conventionalavowed1
hungary-561956–1956bloc_suppressionavowed1
czechoslovakia-681968–1968bloc_suppressionavowed1

The workbook does not leave the column untallied. Its summary sheet publishes a three-way breakdown of acknowledgement — avowed 8, denied_then_admitted 6, contested-or-partial 4 — and those three cells are not typed numbers but live formulas. Read with the formulas rather than their results, they are:

B16  =COUNTIF(proxy_conflicts!$G$2:$G$400,"avowed*")
B17  =COUNTIF(proxy_conflicts!$G$2:$G$400,"denied_then_admitted")
B18  =COUNTIF(proxy_conflicts!$G$2:$G$400,"*contested*")
   + COUNTIF(proxy_conflicts!$G$2:$G$400,"partly*")

In a spreadsheet's matching language, * stands for any run of characters, so "avowed*" matches any value beginning with the word and "*contested*" matches any value containing it anywhere. Running those three patterns over the eighteen cells one row at a time gives Figure 2.

Coverage of the workbook’s three published COUNTIF formulas over the 18 cells Three rows of marks over eighteen cells. Sixteen cells are marked exactly once. The congo-crisis cell is marked twice. The mozambique cell is marked not at all. The three row totals are 8, 6 and 4, summing to 18. the 18 cells of proxy_conflicts.acknowledgement, in sheet order COUNTIF "avowed*" = 8 COUNTIF "denied_then_admitted" = 6 COUNTIF "*contested*" + "partly*" 2 = 4 times counted 1 1 1 1 2 1 1 1 1 1 0 1 1 1 1 1 1 1 = 18 congo-crisis — twice mozambique — never
Figure 2. How many times each of the eighteen cells is counted by the three formulas the workbook publishes. Sixteen cells are counted once, which is what a partition requires. congo-crisis, reading “partly documented, still contested”, matches both halves of the third formula and is counted twice. mozambique, reading “documented”, begins with no matched prefix and contains no matched word, and is counted not at all. The row totals are 8, 6 and 4, and they sum to 18 — the correct number of rows — because the surplus of one and the shortfall of one cancel. No fitted line and no trend: the horizontal axis is a list of cells in file order, which carries no magnitude and no sequence to fit.

5Results

The decision rule fires on both conditions, and the column is declared unfit to carry a count.

R1 fires. Three of the eight values are a base term with a qualifier fused onto it rather than terms in their own right: “avowed on the Western side”, “avowed by 1980s” and “partly avowed” are all modifications of avowed, and “partly documented, still contested” is a modification of “partly documented”. The spread is not an artefact of typing: normalising spaces and case leaves all eight distinct, so there are no near-duplicates to explain it away.

R2 fires. The tally the workbook already publishes assigns one row to two buckets and one row to none. That is the condition R2 names, and it was found by asking the question a positive tally never asks — not do the buckets sum correctly, which they do, but is every row counted exactly once, which they are not. The two errors are equal and opposite, so the total audits clean at eighteen. A check that would have caught this had to be a check on coverage, not on the sum.

The control passes. The form column, in the same sheet, by the same hand, on the same eighteen rows, holds five terms that partition the set exactly: no fused qualifiers, no one-off phrasings, nothing left over. The compiler therefore demonstrably could produce a controlled vocabulary, and did, six inches to the left. That is what promotes this from a complaint about tidiness into a statement about the concept: acknowledgement resisted the treatment that form accepted.

The honest reading, which is weaker than the obvious one

The tempting summary of this data is that sponsors avowed their sponsorship in a third of these conflicts and denied it before admitting it in another third. That summary is not available, and this paper does not make it. The six and the six are counts of two strings in a spreadsheet column. They are not a distribution of acknowledgement in the world, and they cannot be converted into one, because the rule for assigning a war to a bucket has never been written and the six remaining rows show exactly what happens where no rule exists: the compiler wrote a sentence instead.

Nor does the finding say the column should not exist. It is an original field — no conflict dataset in general use carries one — and originality is precisely why the vocabulary problem had to be solved from scratch and was not.

The row that fits worst, and the concession it forces

greece-civil is the row that fits worst, and it fits worst in a way that undermines this paper's own framing. Its cell reads “avowed on the Western side”. That is not a value of an acknowledgement variable at all. It is the compiler stating, in the cell, which sponsor the cell is about — a confession that one cell was asked to describe the postures of two sponsors and could only describe one of them. angola-war is the second such row, in the other direction: “avowed by 1980s” is a date of admission written into a field with no date, for a war in which four external sponsors were involved and one cell had to cover them all. vietnam's “partly avowed” is the same admission in fewer words.

The concession follows and it should be made plainly. Three of the eight formulations — the three just named — are better explained by the grain objection in §1 than by this paper's headline. They are not vocabulary drift; they are a unit-of-analysis error leaking into free text at exactly the three rows where one cell had to cover two sponsors or two dates. A hostile reader is entitled to say that the diagnosis names the symptom and not the disease, and that if someone acts on this paper by imposing a four-term vocabulary at the conflict grain, they will produce a clean, countable, permanently wrong column, and this paper will have caused it.

That is right, and it sharpens rather than replaces the result. Fixing the vocabulary without fixing the grain is the worse of the two available errors, because a tidy column stops being questioned while an untidy one keeps announcing its own defect. The registered claim is therefore stated as a refusal — the column cannot carry a count — and not as a repair.

Two lesser objections, answered

Eighteen rows is too few to diagnose anything. The control answers this: form achieves a clean partition at the same eighteen rows in the same sheet, so the number of rows is not what separates the two columns.

This is a complaint about a spreadsheet, not a finding. The summary-sheet defect answers this. An uncontrolled column already produced a published breakdown that double-counts one row, omits another, and passes its own arithmetic check. That is a reproducible failure with the offending formulas quoted, not an aesthetic objection.

6Threats to validity

  1. The data were seen before the rule was written. The eight-value distribution was measured and logged as entry P5 in ops/domain_logic.py earlier the same day, before the decision rule in §2 was drafted. The rule was written to be decidable by a stranger, and both its conditions turn on facts a stranger can check independently, but it was not preregistered in the strict sense and the paper does not claim it was.
  2. One witness, measured twice. The count was recomputed from the file with a fresh read before the prior result was consulted, and it replicated exactly. That independence is extractional — a second path through the same file — and not genealogical: both readings descend from one spreadsheet. It rules out a transcription error on my part. It does not rule out the file being wrong, and nothing available here could.
  3. Selection. The eighteen conflicts were assembled by interest, not by rule, and are bounded 1946–1979 with eight onsets in the 1970s. Selection is the default condition of any historical corpus, and the appropriate response is to name it rather than to correct for it. It bounds successors, not this paper — but a reader who wanted to know whether the vocabulary would have held up over a broader set cannot find out from here.
  4. The unit of analysis is wrong for the phenomenon, and the true denominator does not exist. Sponsorship is done by sponsors, and the sheet counts conflicts. The number of sponsor-conflict pairs is not derivable, because parties_and_sponsors is free prose and enumerating it would require a judgement on every row. The only structural handle is that ten of eighteen rows contain a semicolon, which is a fact about punctuation. Eighteen is the denominator of the corpus, not of the phenomenon, and no estimate of the latter is offered.
  5. The spreadsheet's matching semantics were reconstructed, not executed. The per-row coverage in Figure 2 comes from reimplementing wildcard matching in Python rather than from running the formulas in a spreadsheet application. The reconstruction was checked against the three totals the workbook itself has cached — 8, 6 and 4 — and reproduced all three exactly, which is the reason the confidence is high rather than certain. An edge case in matching that happens not to bite any of these eighteen strings would be invisible to that check.
  6. No row in this sheet has a source. There is no source column and no evidential_status column, so every historical characterisation in the sheet is unverified recall. This does not touch the paper's claims, which are about a column, but it means no value in Table 2 may be quoted as a historical fact about any war. The sheet's own workbook makes this worse rather than better: its read-me insists that evidential status “should never be dropped when a row is quoted elsewhere”, and its assessment rule 8 says to record it in the row — and the sheet this paper examines carries no such column.
  7. The scaffold disclaimer is missing from the file that most needs it. Sibling workbooks in the same directory carry an explicit precision clause saying their figures come from general knowledge and need a named source before publication. This workbook's read-me has no such section. Its provisional status is attested only externally, in ops/domain_logic.py. A reader who opened the file alone would find nothing warning them off.

7What would refute this

Each condition is checkable by someone who has the file and none of my working.

Should any of these obtain, the registered claim is retired to not_supported, with a dated record naming what replaced it rather than a quiet rewording. The reinstatement condition is a re-read of the column under an unchanged decision rule that fires R1 or R2 again.

A falsifier that cannot currently be evaluated

The prior register entry P5 carries its own falsifier: two rows in one bucket whose dates of admission differ. That condition cannot be checked from this workbook, because there is no date-of-admission column and none of the six denied_then_admitted rows records when the admission happened. Supplying those six dates from memory would be inventing figures and is refused. The consequence must be stated in the strong form: a registered falsifier the data cannot evaluate has not passed. It is untested, and an untested falsifier is a claim about a claim.

This is also the largest true gap in the column. “Denied then admitted” describes a dated change of state compressed into a timeless label, so the bucket silently equates a denial admitted after two years with one admitted after forty. Six rows sit in it and it cannot be ordered.

What a repair would look like — proposed, not applied

A four-term vocabulary would cover the eight formulations: avowed from the outset; denied_then_admitted; partial, where one sponsor avowed and another did not; and contested, where the historical record itself is unsettled. The row-by-row mapping is shown below as a worked proposal only.

No count is derived from this mapping, and no total is given for it, deliberately. Applying a vocabulary invented after seeing the data is the exact defect this paper diagnoses, and publishing a tidy tally from it would be that defect committed inside the paper about it — which is, in miniature, what the summary sheet already did. The mapping is offered so that a successor can argue with it before anything is counted, and it is unregistered.

Table 3. A proposed mapping, unapplied and unregistered. The right-hand column names why each assignment is arguable. Nothing is summed.
Value as foundProposed termWhy the assignment is arguable
avowedavowedUnambiguous only if the row has one sponsor, which is not recorded
denied_then_admitteddenied_then_admittedLoses the date of the change, which no column carries
avowed on the Western sidepartialNames one side explicitly; the other side's posture is simply absent, not partial
partly avowedpartial“Partly” may mean partly by one sponsor or partly over time
avowed by 1980sdenied_then_admittedReads as a dated transition, but the pre-transition state is not stated
partly documentedcontestedDescribes the historian's evidence, not the sponsor's posture — a different variable
partly documented, still contestedcontestedSame category error, plus the phrase the double count came from
documented—Unassignable. “Documented” says the historian has evidence; it says nothing about whether the sponsor admitted anything. Any assignment would be a guess

Three of the eight values describe the state of the historical record rather than the conduct of the sponsor. That is a second variable living in the same column, and it is a further reason the repair cannot be a rename. A successor should split the column before it renames anything, and split the row before it splits the column.

8Data availability and status

All eighteen rows live in ~/ops/reference/propaganda-and-proxy-states.xlsx, sheet proxy_conflicts, columns A–G. The published breakdown lives at summary!B16:B18 of the same file and must be read with formulas unresolved to see the defect; read with results only, it looks correct. The absence of an admission rule is checkable in ~/war-atlas/db/atlas.db, table admission_rule, nine rows, opened read-only. The prior measurement is entry P5 in ~/ops/domain_logic.py, and that entry links forward to this paper.

The headline distribution recomputes in one line:

python -c "import openpyxl,collections;w=openpyxl.load_workbook(
 r'~/ops\reference\propaganda-and-proxy-states.xlsx',
 data_only=True)['proxy_conflicts'];r=[x for x in w.iter_rows(
 values_only=True)][1:];print(len([x for x in r if x[0]]),
 collections.Counter(x[6] for x in r if x[0]))"

Status: counts verified; corpus unsourced — figures pending source verification. The two halves of that line mean different things and both are load-bearing. Every quantity in Table 1 is a count of cells in a named file and has been recomputed; those are not pending anything. What is pending is the corpus: not one of the eighteen rows names a source, the sheet carries no evidential-status field, and the workbook is a scaffold assembled from recall whose own read-me omits to say so. Before this paper is cited, that state must travel with it.

Two restrictions follow and they are not stylistic. First, no acknowledgement value in Table 2 may be quoted as a historical fact about any war; the table is a listing of what a file says, and the file has no sources. Second, the six-and-six may not be quoted as a distribution of acknowledgement, only as a distribution of strings. If a later document quotes either without its qualifier, the defect is in that document, and this paragraph is the record that the qualifier was attached at the point of publication.

War Atlas method series, paper 02 · dylanvir.com/war/papers · Registered 2026-09-09 · Measure class 1, corpus diagnostic · This paper makes no population claim about proxy conflicts and no historical claim about any conflict named in it. A class 3 successor requires an admission rule for the eighteen-conflict set, which does not exist; a class 2 successor requires the sponsor-conflict pair to be enumerable, which it is not.