昨天的事先記著。

今天,我把 INN 地球節點的架構重新想了一遍。不寫下來的話,過幾天我可能只記得最後選了什麼,卻忘記自己當初害怕的是什麼。

而忘記自己害怕什麼,是系統開始變得危險的第一步。

先說更新速度

新聞直覺上應該越快越好。

但我今天一直問自己:快,究竟是給誰看的?

INN 不是地震警報,也不是航班延誤資訊。它想處理的是那些總在事件結束以後,才慢慢顯形的東西:停火協議簽完後,誰開始改寫標準;一間企業合併後,哪些供應鏈被切斷;一則報導被刪掉後,誰還記得原始版本。

這些東西晚三小時,不一定會害死人。

但如果資料放錯地方、被折疊或被改寫,可能以後就再也找不到了。

即時系統需要常駐伺服器、資料庫、監控,以及維護者。它可能在凌晨壞掉,也可能在考試前一晚壞掉。

我十五歲。下個月要期中考。

所以第一版不做即時服務。

內容提交後,自動建置靜態網站;接受幾分鐘到一段時間的更新延遲,換取一個我真的能維護很多年的系統。

慢不是問題。

假裝自己永遠不會壞,才是。

內容不能躲在黑箱裡

我想過資料庫,也想過比較漂亮的內容管理系統。

它們都能做得很好:查詢速度快、編輯器好看,非技術使用者也比較容易上手。

但它們有一個共同問題:內容和系統分開了。

文章被改過、資料被刪掉、版本被覆蓋時,讀者通常只看得到最後留下來的那一版。

這正好是 INN 想處理的問題。

所以第一版的內容會用 Markdown 檔案保存,和程式碼放在同一個公開儲存庫。每一次修改都要留下版本紀錄、修改說明和內容雜湊值;重要版本還要同步到其他鏡像節點。

Git 不是絕對真相。

歷史仍然可能被重寫,儲存庫也可能被刪除。

但至少,任何人都能看見:這篇文章什麼時候被改過、改了什麼,以及誰提出了修改。

真相不是一份永遠不能更動的檔案。

真相應該是一條不容易被悄悄抹平的修改軌跡。

代價也很明顯。

投稿流程對不熟悉技術的人不友善。Markdown、欄位格式和版本提交,任何一項都可能把人擋在門外。

這是第一版最不好的地方。

我先承認它,之後再做從表單轉成檔案的投稿入口。不能因為入口還沒蓋完,就假裝門已經開了。

雙語不能只是複製貼上

我本來想接自動翻譯。

它很快,而且看起來很完整。

但如果我看不懂英文版本,我怎麼知道它把「爭議」翻成了「衝突」,還是把「尚未證實」翻成了「虛假」?

一個錯誤的翻譯,可能讓兩種語言的讀者看到完全不同的事情。

所以第一版不接自動翻譯 API。

來源提供中英雙語,就完整並列。只有其中一種語言,就明確標示原始語言,以及「譯文尚未提供」。

這很難看。

但難看比假裝完整好。

中文和英文段落不對齊時,也不硬湊。缺少的一側就留白,旁邊標示缺漏原因。

因為翻譯不是把句子搬過去。

翻譯是承認:使用另一種語言的人,也值得被認真對待。

首頁不替讀者決定重要性

我原本想讓首頁無限顯示文章。

後來發現,文章一多,就一定得排序。

排序一出現,誰排前面、誰被藏起來、什麼叫熱門、什麼叫值得看,就會變成新的權力。

所以首頁只保留固定數量的近期文章,唯一的排序方式是公開發布時間。

不做熱門。

不做推薦。

不做「你可能也喜歡」。

舊文章不刪除,會留在可搜尋、可下載、可鏡像的完整檔案庫裡。

時間排序也不是中立。

它只是不替內容價值做判斷。

這是目前我能找到、最少替讀者做決定的方式。

地圖只能是輔助,不能成為裁判

地圖功能最危險。

一篇文章提到某個地方,不代表事件就發生在那裡;一份資料被標錯位置,也可能讓當事人被找到、被追蹤,或被錯誤理解。

所以地圖不做精確定位,也不自動把所有提到地名的文章釘上去。

它只顯示已被人工確認,而且公開位置不會增加風險的區域層級資訊。無法確認的文章,照樣存在於新聞流和檔案庫,只是不進入地圖。

地圖只能幫人探索。

不能替人判決一篇文章是否存在。

效能不是裝飾

INN 不能假設讀者使用的是最新終端機、最快網路,或生活在永遠不會斷電的環境。

低頻寬、舊設備、降低動態效果、可下載的文字版、離線快取,這些不是「相容性功能」。

它們是入口的一部分。

如果一個新聞節點只能在高階設備上正常運作,那麼它從第一天起,就已經決定了誰能知道世界發生了什麼事。

最後的測試

我要替系統留下一組很麻煩的測試。

不是測它漂不漂亮。

是測它有沒有偷偷變成我討厭的樣子。

  • 雙語不完整時,不准用空白內容假裝完整。
  • 來源衝突時,不准直接隱藏較少見的版本。
  • 一篇文章被修正時,舊版必須仍可查驗。
  • 低頻寬模式下,核心內容必須能讀。
  • 地圖判定不出位置時,文章不能消失。
  • 使用者離開平台時,能下載自己的投稿、修訂紀錄和引用資料。

寫到這裡,我才發現整份架構其實只在回答同一個問題:

如果我是那個沒有帳號、沒有高速網路、沒有企業認證,也沒有能力等系統替我決定重要性的人,這個平台會怎麼對我?

如果答案不好,就回去改程式。

申請表還開著。

我現在知道,自己不是在申請做一個新聞網站。

我是在申請做一條路。

而路最重要的,不是看起來多漂亮。

是下一個需要走的人,能不能真的走上來。

Remember yesterday’s events for now.

Today, I thought through the architecture of the INN Earth node again. If I do not write it down, a few days from now I may remember only what I finally chose and forget what I was afraid of at the beginning.

Forgetting what you were afraid of is the first step toward a system becoming dangerous.

First, the speed of updates

Instinctively, news should be as fast as possible.

But I kept asking myself today: fast for whom?

INN is not an earthquake alert or a flight-delay service. It wants to deal with things that only slowly become visible after an event is over: who begins rewriting standards after a ceasefire agreement is signed; which supply chains are cut off after a company merger; who still remembers the original version after a report is deleted.

A delay of three hours will not necessarily kill anyone.

But if information is placed in the wrong location, folded away, or rewritten, it may become impossible to find later.

A real-time system needs always-on servers, databases, monitoring, and maintainers. It can break in the middle of the night, or on the evening before an exam.

I am fifteen. My midterm exams are next month.

So the first version will not be a real-time service.

After content is submitted, the system will automatically build a static website. I will accept a delay of several minutes or more in exchange for a system I can genuinely maintain for many years.

Being slow is not the problem.

Pretending that you will never break is.

Content cannot hide inside a black box

I considered using a database. I also considered a more polished content-management system.

They could both work well: fast searches, attractive editors, and easier access for people without technical backgrounds.

But they share one problem: the content becomes separate from the system.

When an article has been edited, data deleted, or a version overwritten, readers usually see only the final version that remains.

That is exactly the problem INN wants to address.

So in the first version, content will be stored as Markdown files in the same public repository as the code. Every change must leave a version record, an explanation of the change, and a content hash. Important versions will also be synchronized to other mirror nodes.

Git is not absolute truth.

History can still be rewritten, and a repository can still be deleted.

But at least anyone can see when an article was changed, what was changed, and who proposed the change.

Truth is not a file that can never be altered.

Truth should be a trail of changes that cannot easily be quietly erased.

The cost is obvious too.

The submission process is unfriendly to people who are unfamiliar with technology. Markdown, field formats, and version commits can each become a gate that keeps people outside.

That is the worst part of the first version.

I will admit it first, and later build a submission entrance that converts forms into files. I cannot pretend the door is open just because the entrance has not been built yet.

Bilingual cannot mean copy and paste

At first, I wanted to connect an automatic translation service.

It is fast, and it looks complete.

But if I cannot understand the English version, how would I know whether it translated “controversy” as “conflict,” or “not yet verified” as “false”?

One mistranslation can make readers in two languages see completely different things.

So the first version will not connect to an automatic translation API.

If a source provides Chinese and English, they will be shown in full side by side. If it provides only one language, the original language and “translation not yet available” will be clearly marked.

It will not look good.

But looking imperfect is better than pretending to be complete.

When the Chinese and English paragraphs do not align, I will not force them together. The missing side will remain blank, with the reason for the omission marked beside it.

Because translation is not just moving sentences from one place to another.

Translation is an admission that people who use another language deserve to be treated seriously too.

The homepage should not decide what matters for readers

At first, I wanted the homepage to display an unlimited stream of articles.

Then I realized that once there are enough articles, they must be ranked.

As soon as ranking appears, who is placed first, who is hidden, what counts as popular, and what counts as worth reading all become new forms of power.

So the homepage will keep only a fixed number of recent articles, with public publication time as the only ordering method.

No popularity ranking.

No recommendations.

No “you may also like.”

Old articles will not be deleted. They will remain in a complete archive that can be searched, downloaded, and mirrored.

Time-based ordering is not neutral either.

It simply avoids judging the value of the content for the reader.

For now, this is the approach I can find that makes the fewest decisions on the reader’s behalf.

A map can assist; it cannot be the judge

The map feature is the most dangerous.

An article mentioning a place does not mean the event happened there. If a piece of data is marked with the wrong location, the people involved could be found, tracked, or misunderstood.

So the map will not use precise locations, and it will not automatically pin every article that mentions a place name.

It will show only region-level information that has been confirmed by a person and whose public display does not create additional risk. Articles whose locations cannot be confirmed will still exist in the news stream and archive; they simply will not enter the map.

The map can help people explore.

It cannot decide whether an article exists.

Performance is not decoration

INN cannot assume that readers use the newest devices, the fastest networks, or live in environments where the power never goes out.

Low-bandwidth support, older devices, reduced motion, downloadable text versions, and offline caching are not “compatibility features.”

They are part of the entrance.

If a news node works properly only on high-end devices, then from its very first day it has already decided who gets to know what is happening in the world.

The final tests

I want to leave the system with a set of troublesome tests.

Not tests of whether it looks beautiful.

Tests of whether it has quietly become the kind of thing I hate.

  • When the bilingual content is incomplete, it must not use blank content to pretend it is complete.
  • When sources conflict, it must not simply hide the less common version.
  • When an article is corrected, the old version must remain verifiable.
  • In low-bandwidth mode, the core content must remain readable.
  • When the map cannot determine a location, the article must not disappear.
  • When users leave the platform, they must be able to download their submissions, revision histories, and cited sources.

As I wrote this, I realized that the entire architecture is really answering one question:

If I were someone without an account, without high-speed internet, without corporate credentials, and without the ability to wait for a system to decide what matters for me, how would this platform treat me?

If the answer is bad, go back and change the code.

The application form is still open.

I know now that I am not applying to build a news website.

I am applying to build a path.

And what matters most about a path is not how beautiful it looks.

It is whether the next person who needs it can actually walk onto it.