sccdx-engine · Vi Nhật Sơn

An engine that tells you which of its own numbers you may not trust

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.

Run it in three lines

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

The hole it was built to fill

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:

blockpapertimescale
D · DEGROWThe Wheel of Fate: from the ancient "prosperity trap" to the modern fertility crisisdemographic
A · DISPLThe 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

Two languages, genuinely separate

There is no bilingual mode and no half-translated state. This is enforced by the test suite, not promised in a README.

  • 406 templates must have both sides, or the suite fails
  • 160 UI strings must have both sides
  • a missing i18n key raises rather than silently rendering English
  • web/index.html must contain zero Vietnamese characters
  • switching language re-runs the diagnosis server-side rather than translating in the browser
  • the trajectory, the numbers and the fragility verdict are asserted identical across languages

The Vietnamese is written, not translated. That applies to the ~20,000 words of prose in the ASEAN run too.

Ten components — and three of them are unmeasurable

A polity is ten capacity components on [0, 1]. The source paper defines no usable proxy for three of them.

keycomponentdata status
s1Fiscal Extraction CapacityPAPER proxy
s2Coercive Monopoly IndexPAPER proxy
s3Legitimacy CapitalBLOCKED
s4Administrative Penetration DepthBLOCKED
s5Temporal LeveragePAPER proxy
c1Private Capital ConcentrationPAPER proxy
c2Civil Organisation DensityPAPER proxy
c3Information AutonomyPAPER proxy
c4Exit Option AvailabilityPAPER proxy
c5Preference FragmentationBLOCKED

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.

Eight feedback loops

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.

The 2027 ASEAN run

A complete worked application: all eleven ASEAN polities through the engine, data retrieved 2026-10-09, 44 pre-built PDFs in two sets.

pdf/ — the instrument

The instrument's output: tables, per-component provenance tags, OAT rows, gate projections, the trajectory. 5–6 pages each, 11 polities × 2 languages.

browse →

pdf_prose/ — the argument

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.

Honest limits

The v2 outputs are ORDINAL. They are a ranking and a threshold-crossing map, not a level. The engine states this itself at the end of every validation run: 36 of 83 v1 parameters carry a value from the source paper; 46 do not. All 46 v2 parameters are ANALYST or DERIVED2, because the two new papers are qualitative and state no coefficients.
Three CRITICAL inconsistencies in the source model are reproduced faithfully rather than fixed silently. 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.

Documentation

Full guide

Every endpoint and command, and what you may claim from each.

read →

Engine notes

The four structural results, in depth.

read →

The Wheel of Fate

Block D's source paper.

PDF →

The Displacement Hypothesis

Block A's source paper, 2nd ed.

PDF →

Một engine tự nói cho bạn biết con số nào của chính nó thì bạn không nên tin

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.

Chạy nó trong ba dòng

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

Cái lỗ mà nó được dựng để lấp

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ốibài báothang thời gian
D · DEGROWThe Wheel of Fate: từ "bẫy thịnh vượng" cổ đại tới khủng hoảng sinh sản hiện đạinhân khẩu
A · DISPLThe Displacement Hypothesis, tái bản lần 2tố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

Hai ngôn ngữ, tách biệt thật sự

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.

  • 406 template phải có cả hai mặt, nếu không bộ test fail
  • 160 chuỗi UI phải có cả hai mặt
  • thiếu một khoá i18n thì ném lỗi, không âm thầm render tiếng Anh
  • web/index.html phải chứa không một ký tự tiếng Việt
  • đổi ngôn ngữ thì chạy lại chẩn đoán ở server, không dịch trong trình duyệt
  • quỹ đạo, các con số và phán quyết độ mong manh được khẳng định giống hệt nhau giữa hai ngôn ngữ

Phầ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ười thành phần — và ba trong số đó không đo được

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ầntình trạng dữ liệu
s1Năng lực trích xuất tài khoáPAPER proxy
s2Chỉ số độc quyền cưỡng chếPAPER proxy
s3Vốn chính danhBLOCKED
s4Độ sâu thâm nhập hành chínhBLOCKED
s5Đòn bẩy thời gianPAPER proxy
c1Mức tập trung vốn tư nhânPAPER proxy
c2Mật độ tổ chức dân sựPAPER proxy
c3Tự chủ thông tinPAPER proxy
c4Độ sẵn có của lối raPAPER proxy
c5Phân mảnh ưa thíchBLOCKED

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.

Tám vòng phản hồi

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 đó.

Đợt chạy ASEAN 2027

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ộ.

pdf/ — dụng cụ đo

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 →

pdf_prose/ — lập luận

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.

Giới hạn, nói thẳng

Các output của v2 là THỨ TỰ. Chúng là một bảng xếp hạng và một bản đồ vượt ngưỡng, không phải một mức. Chính engine nêu điều này ở cuối mỗi đợt kiểm tra: 36 trong 83 tham số v1 mang giá trị từ bài báo gốc; 46 cái thì không. Toàn bộ 46 tham số v2 đều là ANALYST hoặc DERIVED2, vì hai bài báo mới là định tính và không nêu hệ số nào.
Ba bất nhất CRITICAL trong mô hình nguồn được tái tạo trung thực thay vì sửa ngầm. 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ả.

Tài liệu

Hướng dẫn đầy đủ

Từng endpoint và từng lệnh, kèm điều bạn được khẳng định từ mỗi cái.

đọc →

Ghi chú engine

Bốn kết quả cấu trúc, phân tích sâu.

đọc →

The Wheel of Fate

Bài báo nguồn của Khối D.

PDF →

The Displacement Hypothesis

Bài báo nguồn của Khối A, tái bản lần 2.

PDF →