我的第一個 Open Source Upstream: fix nobelium 搜尋顯示已刪除 tag

date
Mar 6, 2026
summary
目前使用的部落格網站 Nobelium,在操作上發現,就算我把 tag 拿掉了,在主頁的 search 它還是會冒出來。所以就想把這次的修改也 upstream 上去,讓所有人都可以受惠。
目前使用的部落格網站 Nobelium,在操作上發現,就算我把 tag 拿掉了,在主頁的 search 它還是會冒出來。所以就想說,把這次的修改也 upstream 上去,讓所有人都可以受惠。
 

問題: 將 Notion 頁面中的 tag 移除後,Nobelium 的 Search 頁面仍被搜到

 
如圖:Notion 的頁面中,沒有 TEMP 和 Jekyll 這兩個 Tag,但在 Nobelium 的 Search 頁面仍然跑出這兩個選項
 
notion image
notion image
 

原始 Nobelium 的作法

在原始的 Nobelium 程式碼中,讀取 select / multi_select 時,只是單純地把頁面上的字串讀出來然後以逗號分隔:
結果: 原始版本完全信任頁面底層殘留的資料,沒有去做二次驗證,所以那些被刪掉的舊 Tag 就會被一起抓下來,出現在網頁上並且被 Search 索引到。
 

Solution

lib/notion/getPageProperties.js 第 33 到 36 行,也就是後來加上的修改:
它的運作方式是:
  1. 先去抓 Notion 資料庫最新的 Schema(設定檔),列出目前真正還活著的有效選項 (validOptions)。
  1. 再把頁面上的 tags 放進去過濾 (filter)。
  1. 如果某個 tag 在這篇文章裡有殘留,但是已經不存在於 Schema 的有效選項中了,就會被自動剔除
 

修改 Upstream 囉

1. 首先,先 push 到自己的 repo 上

notion image

2. 確認遠端設定 (Remote)

首先確認你的 Local 環境是否已經連結了 Upstream
  • origin: 指向你自己 Fork 的倉庫。
  • upstream: 指向原始的(NotebookLM)主頁倉庫。
如果沒有 upstream,請執行: git remote add upstream [原始倉庫的網址]
新增 upstream
新增 upstream
 
 
如果只有一個修改走 <方法一>, 若已有多個 comment 卻不想全部推上去走 <方法二>

方法一、單一 patch: 直接 pull request

1. 同步並合併上游最新修改 (Sync & Merge)

在將你的 Local 修改送出去之前,必須確保你的程式碼是基於上游最新的狀態:
 

2. 將合併後的 Local 修改推送到你的 Origin

你無法直接將 Local 的修改 push 到別人的 upstream(除非你有寫入權限)。你必須先推送到你自己的遠端:

3. 到主頁發起 Pull Request (PR)

最後一步是在瀏覽器上完成:
  1. 打開瀏覽器,進入該專案的 GitHub 原始主頁(或是你 Fork 的頁面)。
  1. GitHub 通常會自動偵測到你有更新,並顯示一個 "Compare & pull request" 的綠色按鈕。
  1. 點擊按鈕,填寫你的修改說明。
  1. 提交 Pull Request
 

方法二、只上傳特定 patch:

已經有 13個 local commit 了…
已經有 13個 local commit 了…
因為我先前已經有太多的 commit,而我不想把中間我自己客製化的內容全部都 upstream 上去。所以重新抓一個乾淨的 repo 來 cherry-pick,再將我最新的修改 cherry-pick 上去,來達到不污染 origin/branch 的效果。
 

1. 確保你的 Local upstream 是最新的

抓取上游原始 branch(假設叫 main)的最新狀態。
notion image
 

2. 建立一個新的 PR 專用分支

從上游的最新位置建立一個新分支,這樣這個分支起點就是「乾淨」的,不包含你其他的 Patch。
notion image
 

3. 挑選最新的 Patch (Cherry-pick)

找到你想 PR (pull request) 的那個 Commit ID(雜湊值)。你可以透過 git log 在你原本的分支查看。
notion image
notion image
 

4. 推送到你的 Origin 並發起 PR

現在你的 fix 分支上只有那一個最新的修改了。
fix branch 上有這筆修改了
fix branch 上有這筆修改了
 
最後,到 GitHub 網頁上,選擇用這個 fix 分支向 upstream/main 發起 Pull Request。
回到 Github upstream 的頁面,可以看到 Compare & pull request 了!
回到 Github upstream 的頁面,可以看到 Compare & pull request 了!
 

Commit 結果

notion image
另外有看到 Coderabbit 給的兩個建議
  1. Docstring Coverge: Code 中沒寫 comment 介紹怎麼使用
  1. Code Suggestion: 針對 split 的優化建議

1. Docstring Coverge

notion image
但是回看其他人過去的 closed 的 pull request,也都有這 warning… 決定無視 XD
notion image

2. Code Suggestion

notion image
在 JavaScript 中,.split(',') 會非常老實地分割字串。如果 Notion 或使用者輸入的是 "Travel, Tech"(逗號後有空格):
  1. split(',') 會得到 ["Travel", " Tech"]
  1. 你的 validOptions 裡面可能是 ["Travel", "Tech"]
  1. 比對時," Tech" (有空格) 不等於 "Tech" (無空格),導致這個標籤被錯誤地過濾掉
這會造成使用者明明選了標籤,結果網頁上卻顯示不出來。
 
好吧… 來改
結果加上修改後無法上到 fix,因為剛才用了 git commit --amend
notion image
當你「修正」舊的 commit 時,Git 會認為這是一個新的歷史,與遠端(GitHub)現有的歷史不一致。這就是為什麼它提示 (non-fast-forward) 並拒絕你的推送。
由於這是你自己的 PR 分支,且目的是為了更新 PR,你必須使用 「強制推送」(-f) 來覆蓋遠端舊的紀錄。
 

© Robin 2026