A qualitative structural engine for world politics: ten capacity components, eight feedback loops, two forcing blocks — and a provenance tag on every derived field, because 46 of its parameters have no value from any paper and it says so rather than implying otherwise.
Python 3.9+. numpy is the only hard requirement.
git clone https://github.com/vinhatson/sccdx-engine.git cd sccdx-engine && pip install numpy python serve.py # → http://127.0.0.1:8777
The engine runs locally rather than as a hosted page, because the diagnosis is computed server-side on purpose: every string you see in the browser arrives from the API, and the page itself holds no prose of its own.
python validate2.py # 119 checks python validate_v1.py # the source model's own inconsistencies python sea2027/run.py --lang en # the eleven ASEAN polities
sccd v1.00 left two terms of its own ODE system
purely exogenous — and they are the two that control everything else.
dS₃/dt = S₃_natural − ρ_b(1−λ/λmax)² − ζ·C₅^ψ·(S₃−S₃floor) dC₅/dt = C₅_structural + ε_p·C₅(1−C₅)·RevPol + η·C₅²·C₃ + ξ·Ĉ₄Ĉ₁(1−C₅)
S₃ drives λ, and λ multiplies all of S. C₅ is the C denominator and the (1−C₅) factor in Ψ. v1.00 has nothing to say about either drift. v2.00 supplies both, from two further papers on two different timescales:
| block | paper | timescale |
|---|---|---|
| D · DEGROW | The Wheel of Fate: from the ancient "prosperity trap" to the modern fertility crisis | demographic |
| A · DISPL | The Displacement Hypothesis, 2nd ed. | AI adoption |
Block D is a router, not another pressure. Load generates a quantity of adjustment pressure; what the paper varies is which channel carries it, and the split variable is the availability of voluntary instruments:
violent_share = (1 − d₃)^route_sharpness
There is no bilingual mode and no half-translated state. This is enforced by the test suite, not promised in a README.
web/index.html must contain zero Vietnamese charactersThe Vietnamese is written, not translated. That applies to the ~20,000 words of prose in the ASEAN run too.
A polity is ten capacity components on [0, 1]. The source paper defines no usable proxy for three of them.
| key | component | data status |
|---|---|---|
| s1 | Fiscal Extraction Capacity | PAPER proxy |
| s2 | Coercive Monopoly Index | PAPER proxy |
| s3 | Legitimacy Capital | BLOCKED |
| s4 | Administrative Penetration Depth | BLOCKED |
| s5 | Temporal Leverage | PAPER proxy |
| c1 | Private Capital Concentration | PAPER proxy |
| c2 | Civil Organisation Density | PAPER proxy |
| c3 | Information Autonomy | PAPER proxy |
| c4 | Exit Option Availability | PAPER proxy |
| c5 | Preference Fragmentation | BLOCKED |
The three blocked components are disproportionately the ones the whole non-linear core turns on. You supply them, and whatever you supply is a judgment. The engine labels it as one.
L1 Regulatory Capture Accelerator · L2 Legitimacy Death Spiral · L3 Polarisation Trap · L4 Exit-Fragmentation Coupling · L5 Agency-Legitimacy Spiral · L6 Legibility-Extraction Spiral · L7 Demographic Inversion Trap · L8 Youth-Surplus Discharge
A loop activating is usually more informative than the headline number moving, because the loop tells you which mechanism is doing the work.
A complete worked application: all eleven ASEAN polities through the engine, data retrieved 2026-10-09, 44 pre-built PDFs in two sets.
The instrument's output: tables, per-component provenance tags, OAT rows, gate projections, the trajectory. 5–6 pages each, 11 polities × 2 languages.
browse →The argument about what that output means. 2 pages each, ~20,000 words across the 22, with a strip of figures so every claim can be checked against the run behind it.
browse →The split is the same discipline the engine keeps internally: the engine emits codes and never a sentence, and prose lives in one place where it can be audited. The prose files are INTERPRETATION and say so on every document.
INC-7: in dC₅/dt all three endogenous terms are positive and
there is no depolarisation term, so C₅ rises monotonically toward 1 on every
trajectory and Ψ → 0 regardless of scenario. INC-8: in dS₃/dt
both endogenous terms are negative, so the model cannot generate the
legitimacy reconstitution Part V documents for 1980–86. INC-9:
§2.1 writes a dC₁/dt equation but §7.1 omits C₁ from the state vector, so
there is no closed feedback loop in the non-linear system at all.
validate_v1.py prints all of them; c1_dynamic=True
closes the last one.What you may claim: that one polity ranks above another;
that a threshold is crossed, or the order in which gates fall; which loops
activate; whether a conclusion is robust to router_mode.
What you may not: a v2-derived number as a level, magnitude or probability; a date as a forecast; the ten built-in presets as measurements — the payload's own disclaimer notes that only four values in the whole file are paper-stated and none carries a confidence interval.
If a conclusion survives both router modes, both
c1_dynamic settings, and a sweep of the BLOCKED components, then
you have something structural. That is worth more than a number with false
precision.
Engine cấu trúc định tính cho chính trị thế giới: mười thành phần năng lực, tám vòng phản hồi, hai khối cưỡng bức — và một nhãn nguồn gốc trên mọi trường dẫn xuất, vì 46 tham số của nó không mang giá trị từ bất kỳ bài báo nào, và nó nói ra điều đó thay vì để người đọc hiểu lầm.
Python 3.9+. numpy là thứ duy nhất bắt buộc.
git clone https://github.com/vinhatson/sccdx-engine.git cd sccdx-engine && pip install numpy python serve.py # → http://127.0.0.1:8777
Engine chạy ở local chứ không phải một trang được host, vì phần chẩn đoán được tính ở server một cách có chủ đích: mọi chuỗi bạn thấy trong trình duyệt đều đến từ API, và bản thân trang không chứa văn xuôi nào của riêng nó.
python validate2.py # 119 kiểm tra python validate_v1.py # các bất nhất của chính mô hình nguồn python sea2027/run.py # mười một quốc gia ASEAN
sccd v1.00 để hai số hạng của chính hệ ODE của nó
hoàn toàn ngoại sinh — và đó đúng là hai cái điều khiển mọi thứ còn lại.
dS₃/dt = S₃_natural − ρ_b(1−λ/λmax)² − ζ·C₅^ψ·(S₃−S₃floor) dC₅/dt = C₅_structural + ε_p·C₅(1−C₅)·RevPol + η·C₅²·C₃ + ξ·Ĉ₄Ĉ₁(1−C₅)
S₃ dẫn λ, và λ nhân vào toàn bộ S. C₅ vừa là mẫu số của C vừa là thừa số (1−C₅) trong Ψ. v1.00 không nói gì về cả hai độ trôi đó. v2.00 cấp cả hai, từ hai bài báo nữa trên hai thang thời gian khác nhau:
| khối | bài báo | thang thời gian |
|---|---|---|
| D · DEGROW | The Wheel of Fate: từ "bẫy thịnh vượng" cổ đại tới khủng hoảng sinh sản hiện đại | nhân khẩu |
| A · DISPL | The Displacement Hypothesis, tái bản lần 2 | tốc độ nhận AI |
Khối D là một bộ định tuyến, không phải thêm một áp lực. Tải sinh ra một lượng áp lực điều chỉnh; cái mà bài báo thay đổi là kênh nào gánh nó, và biến phân luồng là độ sẵn có của các công cụ tự nguyện:
violent_share = (1 − d₃)^route_sharpness
Không có chế độ song ngữ, và không có trạng thái dịch nửa vời. Điều này được bộ test cưỡng chế, không phải chỉ hứa trong README.
web/index.html phải chứa không một ký tự tiếng ViệtPhần tiếng Việt được viết, không phải dịch. Điều đó áp dụng cả cho ~20.000 từ văn xuôi trong đợt chạy ASEAN.
Một quốc gia là mười thành phần năng lực trên [0, 1]. Bài báo gốc không định nghĩa proxy dùng được nào cho ba cái.
| khoá | thành phần | tình trạng dữ liệu |
|---|---|---|
| s1 | Năng lực trích xuất tài khoá | PAPER proxy |
| s2 | Chỉ số độc quyền cưỡng chế | PAPER proxy |
| s3 | Vốn chính danh | BLOCKED |
| s4 | Độ sâu thâm nhập hành chính | BLOCKED |
| s5 | Đòn bẩy thời gian | PAPER proxy |
| c1 | Mức tập trung vốn tư nhân | PAPER proxy |
| c2 | Mật độ tổ chức dân sự | PAPER proxy |
| c3 | Tự chủ thông tin | PAPER proxy |
| c4 | Độ sẵn có của lối ra | PAPER proxy |
| c5 | Phân mảnh ưa thích | BLOCKED |
Ba thành phần bị BLOCKED lại chính là những thành phần mà toàn bộ phần lõi phi tuyến xoay quanh. Bạn tự cấp chúng, và cái bạn cấp là một phán đoán. Engine dán nhãn nó đúng như vậy.
L1 Bộ gia tốc thâu tóm quy định · L2 Vòng xoáy chết của tính chính danh · L3 Bẫy phân cực · L4 Ghép nối lối-ra ↔ phân mảnh · L5 Vòng xoáy năng-lực-hành-động ↔ chính danh · L6 Vòng xoáy khả-đọc ↔ trích xuất · L7 Bẫy đảo ngược nhân khẩu · L8 Xả nhóm thanh niên dư thừa
Một vòng bật lên thường mang nhiều thông tin hơn là con số chính dịch chuyển, vì cái vòng cho bạn biết cơ chế nào đang làm việc đó.
Một ứng dụng hoàn chỉnh: cả mười một quốc gia ASEAN đi qua engine, dữ liệu lấy 2026-10-09, 44 PDF dựng trước chia hai bộ.
Output của dụng cụ: bảng, nhãn nguồn gốc từng thành phần, các dòng OAT, phóng chiếu cổng, quỹ đạo. Mỗi bản 5–6 trang, 11 quốc gia × 2 ngôn ngữ.
xem →Lập luận về việc output đó nghĩa là gì. Mỗi bản 2 trang, ~20.000 từ cho cả 22 bản, có dải hình để mọi khẳng định đối chiếu được với đợt chạy đứng sau nó.
xem →Cách chia này là đúng cái kỷ luật mà engine giữ ở bên trong: engine phát ra mã và không bao giờ phát ra một câu văn, còn văn xuôi sống ở một chỗ duy nhất nơi nó kiểm toán được. Các file văn xuôi là DIỄN GIẢI và nói rõ điều đó trên mọi tài liệu.
INC-7: trong dC₅/dt cả ba số hạng nội sinh đều dương và không có
số hạng giảm phân cực, nên C₅ tăng đơn điệu về 1 trên mọi quỹ đạo và Ψ → 0 bất
kể kịch bản. INC-8: trong dS₃/dt cả hai số hạng nội sinh đều âm,
nên mô hình không thể sinh ra sự tái lập tính chính danh mà Phần V ghi lại cho
1980–86. INC-9: §2.1 viết hẳn một phương trình dC₁/dt nhưng §7.1
lại bỏ C₁ khỏi vector trạng thái, nên trong hệ phi tuyến không có vòng phản hồi
kín nào cả. validate_v1.py in ra tất cả;
c1_dynamic=True khép kín cái cuối.Bạn ĐƯỢC khẳng định: rằng quốc gia này xếp trên quốc gia
kia; rằng một ngưỡng bị vượt, hoặc thứ tự các cổng sụp; vòng lặp nào bật; một
kết luận có vững hay không khi đổi router_mode.
Bạn KHÔNG ĐƯỢC: trích một con số dẫn xuất từ v2 như một mức, một độ lớn hay một xác suất; báo một mốc thời gian như một dự báo; coi mười preset sẵn là số đo — chính disclaimer trong payload ghi rằng trong cả file chỉ có bốn giá trị là do bài báo nêu, và không giá trị nào mang khoảng tin cậy.
Nếu một kết luận sống sót qua cả hai router mode, cả hai cài đặt
c1_dynamic, và một đợt quét các thành phần BLOCKED, thì bạn có một
thứ mang tính cấu trúc. Thứ đó đáng giá hơn một con số có độ chính xác giả.