Change Log

This page records every change made to Zhabei: A Century on the North Bank of Suzhou Creek.

Why keep such a page? Because this book was reborn out of an abandoned GitBook project — its drafts, its structure and its whole system of sourcing were replaced. By laying the changes out in the open, the reader can see "what was newly researched and what was revised", and the author can see "what exactly the last version changed".


How to read the version numbers

The book uses a three-part scheme, major.minor.patch:

Part When it goes up by one Example
Major (X.0.0) The structure of the whole book changes, or the platform is migrated GitBook → HonKit
Minor (x.Y.0) A new module or a whole block of content is added The "Change Log" module
Patch (x.y.Z) A fact is corrected, a bug is fixed, wording is revised Fixing a dead link

Legend of change types

The values that appear in the "Type" column of the tables:

Type Meaning
Added A new page, module or feature
Revised A correction to facts, figures or wording on an existing page
Fixed A bug fix (dead links, build errors, display faults and the like)
Improved A better reading experience (styling, navigation, preview, build process)
Refactored A structural change (contents, project configuration, sourcing system)

At a glance

Version Date Type What changed, in one line
v1.0 2023-11-03 Initial The original GitBook project: placeholder files only, then abandoned
v2.0.0 2026-10-09 Refactored Migrated to HonKit 6; all 45 pages rewritten from scratch
v2.0.1 2026-10-09 Fixed Repaired 60 dead cross-directory links
v2.0.2 2026-10-09 Improved One-click local preview; slimmer published output
v2.1.0 2026-10-09 Added The "Change Log" module (this page)
v2.2.0 2026-10-09 Improved Seven reading-enhancement plugins enabled (Chinese search, "edit this page", and more)
v2.3.0 2026-10-09 Fixed Fixed two defects — duplicate plugin loading and DOM elements accumulating on page change; colour scheme redesigned
v3.0.0 2026-10-09 Refactored Multilingual: Chinese moved into zh/; five new editions (en/ja/ko/fr/de); front matter complete in all five
v3.1.0 2026-10-09 Improved The "choose a language" landing page is gone — the site opens in Chinese; a six-language bar now sits at the top of every page
v3.1.1 2026-10-09 Added The author is now credited by name — Zhou Ge (舟哥) · Nickzhuo — in the metadata, the covers, the "about the author" sections and the glossary
v3.2.0 2026-10-10 Added The main text is now fully translated in all five editions (English, Japanese, Korean, French, German), 43 pages each; 276 pages across six languages
v3.2.1 2026-10-10 Revised Quality audit of all five translations: four chapter-end source labels brought back into line, the French and German change-log page names aligned, and Chinese characters added to disambiguate Wang Shouhua's aliases
v3.2.2 2026-10-10 Fixed Site search repaired in the five non-Chinese editions: they had been loading the Chinese index, so every non-Chinese query returned 0 results
v3.3.0 2026-10-12 Added Chinese split into a Simplified and a Traditional edition alongside English, Japanese, Korean, French and German; the header language bar grows from six entries to seven, and the book now runs to 323 pages across seven languages
v3.4.0 2026-10-12 Added Live at https://zhabei.org: the cover and the "About this book" page of every edition name the online address, all 323 pages gain a self-referential canonical and seven-language hreflang cross-references, and a sitemap.xml and robots.txt are generated
v3.5.0 2026-10-12 Improved The header and the foot of every page now display the book's domain, zhabei.org, linking back to the cover of the language you are reading
v3.5.1 2026-10-12 Revised The "GitHub" entry at the top of the sidebar has been removed, leaving only the domain zhabei.org; readers looking for the source can still get there from the cover text and the "Edit this page" button
v3.5.2 2026-10-12 Improved The four parts and four appendices in the cover's contents table are now links — one click jumps straight there
v3.5.3 2026-10-12 Improved The footer now adds the author's signature "舟哥@2026" and the current version number after the domain, so every page shows at a glance which edition you are reading
v3.6.0 2026-10-12 Improved Some 17,700 internal links now point straight at their canonical addresses; every page gains a seven-language social sharing card; and a switch hint appears when the browser is not set to Chinese

Release by release

Type Change Files
Improved Around 17,700 internal links across the site now use the canonical address. Every link used to be written as xxx.html, while the canonical form of an address online is "no extension for a single page, trailing slash for a directory" (such as /zh/part1/01-naming, /zh/), so each click was first redirected. Links and canonical addresses now follow the same rule and a click lands directly; the addresses in the search results were changed the same way, so results no longer take a detour either scripts/inject-seo.mjs
Added Every page now has a social sharing card. One 1200×630 card per language, drawn in the book's own paper-and-ink palette and carrying the title and the author's signature in that language. Share any page to a messenger or social platform and this card is what appears, instead of a bare link new assets/og/*.png (seven files), scripts/gen-og-images.mjs
Added A hint floats up at the foot of the page when the browser is not set to Chinese. It says which language was detected and offers a button that switches to that edition. The site still opens straight into Simplified Chinese; the hint can be dismissed, and once dismissed it does not come back scripts/inject-seo.mjs, styles/website.css
Note The hint is attached to the end of the page rather than to the body text: in-site navigation replaces the content container, so a hint placed inside it would vanish on the first page turn. It also appears only when the language really differs — a Chinese browser reading Chinese, or an English browser reading English, sees nothing extra. The switch button leads to the current page in that language, not back to the cover scripts/inject-seo.mjs
Improved New local preview npm run preview serves the build output under the same address rules as production (no extension, trailing slashes, .html redirects), so "it works locally" means roughly "it works online". The existing npm run serve still works for editing, but it runs a different build and its pages carry neither the footer nor the SEO tags new scripts/preview-dist.mjs, package.json
Type Change Files
Improved The colophon at the end of every page has grown from "book title + domain" into "book title + zhabei.org + 舟哥@2026 + version number". After the domain comes the author's signature "舟哥@2026", set in bold, followed by the current version number one size smaller and in grey. The order lets the colophon answer "who wrote this, and which edition" by itself: the bold name identifies the author at a glance, while the version number stays small enough not to compete for attention yet is always there to check scripts/inject-seo.mjs, styles/website.css
Note The version number is not stored anywhere else: at build time it is read straight from the last row of the "Releases at a glance" table on the Simplified Chinese "Release notes" page (the table is appended in chronological order, so its last row is the latest release). Why not the version field in the project file? That field has not been maintained since v2.0.0, and using it would immediately show the wrong version. If the version cannot be read, the build fails on the spot rather than quietly leaving the footer without one scripts/inject-seo.mjs
Note The author's signature is the same string "舟哥@2026" in all seven languages — it is a person's name, not interface copy, much as the cover of every edition reads "舟哥(Nickzhuo)编著"; the version number likewise stays an untranslated vX.Y.Z. The footer check gains two assertions: the signature is exactly "舟哥@2026", and the version looks like vX.Y.Z and matches the last row of the Simplified Chinese overview table word for word (parsed independently, so the check and the injection script are two separate locks) scripts/check-branding.py

v3.5.2 · 2026-10-12 · A clickable contents table on the cover

Type Change Files
Improved The contents table on the cover is no longer plain text. Both the part column and the bold title in the contents column are now links, and either one jumps to that part's introductory page; the four items in the appendices row (street-name codes / chronology / place-name concordance / works cited) are each linked separately to their own page. Readers tend to click a table of contents on sight, and should not have to go hunting in the sidebar first seven README.md files
Note Every link uses a relative address (such as part1/README.md), the same style as the page's other links: it works on https://zhabei.org and does not jump out of localhost during local preview. Each language's anchor text follows that language's own wording, while the link targets are identical word for word, checked automatically by section A of scripts/check-translations.py —

v3.5.1 · 2026-10-12 · Only the domain left in the sidebar

Type Change Files
Revised The "GitHub" entry at the top of the sidebar is gone. That column used to hold two links side by side — the domain and GitHub; now only the domain remains. The sidebar is there to orient the reader, and putting the source repository in it has little to do with reading a book; it also suggests that a trip to GitHub is somehow required book.json (links.sidebar)
Note The way to the source is not cut off: the line "the source files are on GitHub" stays on the cover page (it is there for errata), and the "Edit this page" button in the header still points at the repository. The sidebar simply no longer repeats it —
Type Change Files
Improved Every page now displays the book's domain zhabei.org, in the header on the right and at the foot of the text. The header one is a small badge, placed to the left of the language bar and set off from it by a thin vertical rule; the footer one shares a line with the book title and acts as the page's signature. A reader can see the book's official address at a glance from any page, and can pass it on just as easily header template header.html, scripts/inject-seo.mjs, styles/website.css
Improved Both links lead back to the cover of the language you are reading — from a Japanese page to /ja/, from a French page to /fr/ — instead of sending everyone to the Simplified Chinese edition; they are relative links, so clicking one during local preview does not jump out of localhost same as above
Added Branding check scripts/check-branding.py: verifies page by page that the header badge and the footer signature are both present, that both links point at the cover of the current language, that the footer's book title matches the page title, and that the styles have been synced into the built output. Falsification-tested: pointing a link at another language, deleting the footer, misspelling the book title, and adding a second badge are all reported new scripts/check-branding.py
Note The footer is injected after the build rather than added by overriding a template: the theme has no website/footer.html at all, and adding one in the template would mean copying page.html (128 lines, including the sidebar-state script) wholesale, where any drift fails silently; on top of that the in-book search plugin already owns an override of that same page.html, so stacking another layer would displace it and break the search along with it. The injected version also carries count assertions: if the page structure changes it fails the build outright instead of silently losing the footer —

v3.4.0 · 2026-10-12 · Live at zhabei.org

Type Change Files
Added The book is now live at https://zhabei.org. The cover and the "About this book" page of every edition name the online address, so readers no longer need the source files to start reading README.md, about.md in all seven editions
Added SEO groundwork on all 323 pages: a self-referential canonical on every page, hreflang cross-references between the seven editions (with x-default pointing at the Simplified Chinese edition), Open Graph tags, and the previously empty description filled in from each page's opening paragraph; plus a generated sitemap.xml (322 entries, each carrying its seven xhtml:link cross-references) and a robots.txt. The root redirect page is noindex, so it stays out of the sitemap new scripts/inject-seo.mjs, package.json
Added SEO check scripts/check-seo.py: verifies that each page's canonical is self-referential and unique, that the seven-language hreflang set is closed, that descriptions are not empty, and that the sitemap covers every page new scripts/check-seo.py
Note Site structure: one domain with one path per edition (/zh/, /zh-hant/, /en/, …). The URL form is "no extension for single pages, trailing slash for cover pages" (e.g. /zh/part1/01-naming, /zh/) — that is the hosting platform's canonical form, and both the canonical tag and the sitemap follow it; the older .html form still works and redirects there. The site address lives in a single place, at the top of scripts/inject-seo.mjs, and can be overridden with the SITE_URL environment variable —

v3.3.0 · 2026-10-12 · Chinese split into a Simplified and a Traditional edition

Type Change Files
Added From this version Chinese exists in two editions, Simplified and Traditional, listed alongside English, Japanese, Korean, French and German; the language bar in the header grows from six entries to seven. The Simplified edition remains the single source of truth (zh/); the Traditional one (zh-hant/) is derived from it rather than retyped — two scripts of one text should not have two drafts, or every change to the Chinese source would have to be copied out by hand zh-hant/ (new: 47 pages + book.json), LANGS.md, header template
Added A new derivation script, scripts/gen-zh-hant.py: a single command rebuilds zh-hant/ (including book.json and SUMMARY.md) from zh/, with --check (compare only, exit 1 on drift) and --report (five audits) scripts/gen-zh-hant.py
Note The Traditional edition uses Taiwan standard forms (OpenCC s2tw) and converts the ASCII double quotes in the body to 「」『』 (the Simplified edition keeps ", the mainland convention). The quote pass must skip code spans: this very page contains a code span holding a literal ASCII quote ("); the first version did not skip it, the literal was eaten as a typographic quote, and the parity of every quote in the file flipped — all following pairs came out closing-first. One wrong character, the whole file wrong, and the build reports nothing scripts/gen-zh-hant.py
Note The conversion is far more than a glyph swap. OpenCC's phrase table turns the generic element 「里」 in 21 lilong names such as 三曾里 and 吉庆里 into the locative 「裡」, renders 工程总局干的第一件事 as 乾的, misspells the Commercial Press founder 鲍咸昌 as 鮑鹹昌, and mistakes the particle 了 for 瞭 (点明了原因 → 點明瞭原因). Each case went into an override table applied through private-use placeholders — OpenCC leaves those untouched, so "convert to Traditional first, then run OpenCC" does not work: it re-edits its own Traditional output scripts/gen-zh-hant.py
Note Scope of the conversion: glyphs and punctuation only, no vocabulary localisation. Forms such as 報道 (Taiwan writes 報導), 鏈接 (Taiwan writes 連結), 視頻, 軟件 and 網絡 are therefore kept as they are — this is a mainland author writing about Shanghai, the same principle by which the English, French, German, Japanese and Korean editions keep the original meaning docs/TRANSLATION-GLOSSARY.md
Enhanced The three self-check scripts now cover seven languages: the language-bar assertion changed from "exactly 6 links" to 7; the language-identity cross-matrix for the search index grew to 7×7 — the Simplified and Traditional editions use identical page URLs as keys, which is precisely the pair most exposed to that class of cross-contamination; and a new check K, "Traditional-derivation conservation" (equal length page by page, no bare quotes, no unresolved placeholders), skips the two checks that do not apply to Traditional scripts/check-langbar.py, scripts/check-search.py, scripts/check-translations.py
Revised The language list on all seven covers and in the language bar changed from "中文 · English · …" to "简体中文 · 繁體中文 · English · …"; every language name is written in its own script, so the Traditional cover also reads 简体中文 — just as the English text contains 日本語 and 한국어 the seven README.md files, header template
Fixed The header's edit button was labelled in Chinese on all seven language editions — its text came from a single string in the root configuration, shared by every language sub-book, so readers of the English edition saw the Chinese label as well. It is now resolved per language: 編輯本頁 / Edit this page / このページを編集 / 이 페이지 편집 / Modifier cette page / Diese Seite bearbeiten. The plugin had always supported per-language text (it reads the sub-book's language directory name); the configuration simply never listed it all. We also tested the seven edit URLs and confirmed that each one points at a directory that really exists in the repository root book.json

v3.2.2 · 2026-10-10 · Site search repaired in the five language editions

Type Change Files
Fixed Search did not work at all in the English, Japanese, Korean, French and German editions. The index is produced by the search-plus plugin, which keeps it in a module-level global variable; HonKit's multilingual build generates the six books concurrently in a single process, and every language uses exactly the same page URLs as keys, so each edition overwrote the previous one — all six index files ended up byte-identical and entirely Chinese. Readers of a non-Chinese edition got 0 results for any query. The build reported no error and every page rendered normally, so only actually searching revealed it local-plugins/gitbook-plugin-search-plus/index.js (new; the index is bucketed by output root — its front-end scripts and template are byte-for-byte copies of upstream), package.json
Added A new index self-check, scripts/check-search.py: it verifies the document count per language, page coverage against the table of contents, and field completeness, and builds a language-identity cross-matrix (each edition matches only its own cover subtitle) scripts/check-search.py
Note Pre-launch audit: the build produces 6 languages × 46 pages = 277 pages; 21,072 internal links with 0 dead; the language bar is correct on all 276 content pages; all eight automated translation checks pass. Search was also driven in a real browser across three editions — Chinese "闸北" 46 hits, English "Sihang Warehouse" 16, French "ruisseau" 27 —

v3.2.1 · 2026-10-10 · Quality audit of the five translations

A close read plus machine checks (links, numbers, proper nouns, language leakage, length ratios and heading structure — eight tests in all) found and fixed three kinds of inconsistency.

Type Change Files affected
Revised Two Korean appendix pages labelled the chapter-end sources **인용과 출처**: and two German pages **Quellen und Herkunft**:, neither matching the glossary's **출처**: / **Quellen**:. All four are now back in line ko/appendix/place-names.md, ko/appendix/road-names.md, de/appendix/place-names.md, de/appendix/road-names.md
Revised In the French and German editions the change log's sidebar entry disagreed with its page title (French sidebar Journal des versions vs title Journal des modifications; German sidebar Versionsverlauf vs title Änderungsprotokoll). Both now follow the page title, as in the other four editions. The fix went into the table-of-contents source and the generated files were rebuilt scripts/toc.tsv, fr/SUMMARY.md, de/SUMMARY.md
Revised In the Wang Shouhua entry the "original name" row read as a duplication error in English and French, because several aliases share a romanisation (纪元 / 寄元 → both "Jiyuan"; 今亮 / 晋亮 / 金亮 → all "Jinliang"). English, French and German now give the original characters in brackets, as Japanese and Korean already did en/part4/05-wangshouhua.md, fr/part4/05-wangshouhua.md, de/part4/05-wangshouhua.md

v3.2.0 · 2026-10-10 · The main text is translated in all five languages

Type Change Files affected
Added The main text is now complete in all five editions — English, Japanese, Korean, French and German — 43 pages each (Part One 10, Part Two 10, Part Three 10, Part Four 9, Appendices 4). With the three front-matter pages of each edition, that makes 276 pages across six languages. There are no placeholder pages left anywhere in the book every .md under en/, ja/, ko/, fr/, de/
Added The glossary gains a section 7, "High-frequency proper nouns in the main text" (Shanghai General Trade Union, Bunye Cheng, the Chinese Communist Party, the Kuomintang, Battle of Shanghai (1937), the 19th Route Army, Chiang Kai-shek, Mao Zedong, Qingyun Road, Huiwen Road, the Pengyue Creek, the Guangzhao Shanzhuang, Zoumating, the Middle Ring, "the bare-armed district", Whampoa, and 25 entries in all) and a section 8, "Numbers and units" (how to write 万元 / 亿元 / mu / li / km² in each of the five languages) docs/TRANSLATION-GLOSSARY.md
Revised The German for the 19th Route Army is unified as Routenarmee (Part One had "Route-Armee", against the glossary — 9 occurrences in all) de/README.md, de/part1/05-1927-1932.md, de/appendix/
Revised On the English cover, "What this book contains" goes back to a three-column table matching the Chinese, and the now-obsolete line "This translation is produced in stages" is removed (the English text is complete) en/README.md
Note Across the five translations, names and register follow the glossary: Japanese uses traditional kanji plus katakana readings, Korean transcribes from Mandarin, and English, French and German use Hanyu pinyin —

v3.1.1 · 2026-10-09 · The author's byline (Zhou Ge / Nickzhuo)

Type Change Files affected
Added The author's nickname, "Zhou Ge (舟哥) · Nickzhuo", is now written into the book, consistently across four places: each edition's author metadata, the cover byline, the closing signature of the preface, and the "about the author" section. The wording follows each language: Chinese "舟哥(Nickzhuo)"; English/French/German "Zhou Ge (舟哥) · Nickzhuo"; Japanese "舟哥(Nickzhuo)"; Korean "저우거(舟哥) · Nickzhuo". The Latin Nickzhuo is always kept as-is, for searchability and consistent metadata book.json, */book.json, */README.md, */about.md
Added Each language's "About This Book" page gains an "About the author" section, noting that corrections, additions and discussion all go through the GitHub repository */about.md
Added The translation glossary gains a "The author of this book" entry fixing the byline in all six languages and requiring it to match the metadata word for word docs/TRANSLATION-GLOSSARY.md
Revised The root book.json author is filled out from "舟哥" to "舟哥(Nickzhuo)" book.json

v3.1.0 · 2026-10-09 · No more language landing page; a language bar in the top bar

Type Change Files affected
Improved The site now opens directly in Chinese. The root index.html is no longer a "choose a language" landing page but a zero-second redirect: the meta refresh sits in the <head>, so the browser navigates as soon as it parses the head and the body never gets a chance to paint — no flicker at all. A location.replace() is layered on top, and because it writes no history entry, a reader who presses Back is not bounced straight back here _layouts/website/languages.html
Added A six-language bar at the right of the top bar on every page (中文 · English · 日本語 · 한국어 · Français · Deutsch) — no dropdown, all six laid out flat, with the current language highlighted in a vermilion pill. The links are worked out automatically as "this page → the same page in another language", and the cover README.md is correctly mapped to index.html local-plugins/honkit-plugin-zhabei-theme/_layouts/website/header.html, styles/website.css
Improved The top bar becomes a flex layout: the tool buttons (sidebar toggle, edit this page, font settings) sit on the left and the language bar on the right. On narrow screens (≤900px) the bar wraps to a second, centred row; even at 320px it neither overflows nor covers the text styles/website.css
Fixed The language-bar template has to live in the local plugin, not in the project-root _layouts/: in multilingual mode each language is a separate Book whose content root is zh/, en/ and so on — not the project root — so putting it at the root fails silently (the build reports no error, but there is simply no language bar on the page). Noted in both the template and .bookignore local-plugins/honkit-plugin-zhabei-theme/_layouts/website/header.html
Fixed Template comments must be written `: intemplateEngine.toNunjucks()HonKit changes the nunjucks comment delimiters to triple hashes. Written the default way, a comment **is not a comment at all** — any block tag inside it is genuinely parsed and the build fails withparseBlock: expected endblock, got end of file`; with no block tags, the whole comment text simply shows up on the page _layouts/website/languages.html, local-plugins/honkit-plugin-zhabei-theme/_layouts/website/header.html
Revised In each language's cover, the line "other languages: see the language selection page" now points to the language bar in the top bar */README.md

v3.0.0 · 2026-10-09 · Multilingual edition (English / Japanese / Korean / French / German)

Type Change Files affected
Refactored The book becomes a HonKit multilingual project: a LANGS.md is added, all Chinese content moves into zh/, and each language now forms a book of its own (its own book.json and SUMMARY.md). The root language setting is emptied and the root configuration is shared by all editions LANGS.md, book.json, zh/
Added Five new editions — English, Japanese, Korean, French, German — with all 46 contents entries written in each language en/, ja/, ko/, fr/, de/
Added A translation glossary: general romanisation rules for each language plus concordances of place names, institutions, events, people and concepts, as the single authority on how every name is written. Japanese uses kanji with the reading actually used in Shanghai at the time (閘北 = ザホク; 吴昌硕 = 呉昌碩 goshōseki); Korean follows the 1986 National Institute of Korean Language rule and transcribes from Mandarin (闸北 = 자베이) docs/TRANSLATION-GLOSSARY.md
Added Front matter complete in all five languages: cover, about, change log */README.md, */about.md, */changelog.md
Added Placeholder pages for untranslated chapters (so the sidebar has no dead links) and a site-wide internal link checker scripts/make-stubs.py, scripts/check-links.py
Fixed Styles did not reach the language books: the root theme-default.styles setting never applies inside a language sub-book (the theme template's fileExists(style) test fails in that scope, and escaping it with a ../ path raises FileOutOfScopeError). Replaced by a local plugin, honkit-plugin-zhabei-theme, which injects the stylesheet as a book asset; working in all six languages local-plugins/, scripts/sync-styles.mjs, package.json
Improved The language-selection page uses a custom template (replacing HonKit's hard-coded English heading) with the "Paper & Ink" palette; the built-in two-column float layout is replaced by a CSS grid — because the theme gives .languages a ::before/::after { display: table }, and inside a grid container those pseudo-elements each claim a cell, scrambling the six entries _layouts/website/languages.html, styles/website.css
Note Translation of the main text proceeds in stages; untranslated chapters show a placeholder until they are overwritten by the finished translation —

v2.3.0 · 2026-10-09 · Defects fixed + colour scheme redesigned

Type Change Files affected
Fixed "Two font dropdowns at the top": highlight, fontsettings and theme-default are default HonKit plugins, yet were declared again in book.json, so they were loaded twice (two fontsettings/website.css sheets were found mounted) book.json
Fixed Removed splitter: on every page change it appended a width:5px; height:100% absolutely-positioned vertical bar and never cleaned it up (after eight consecutive page changes, .divider-content-summary had grown from 1 to 9). This was the source of the white edge on the right book.json, package.json
Fixed Removed back-to-top-button: it likewise appended unconditionally on page change, and .back-to-top grew from 1 to 9 in the same way; the package had also been marked by npm as no longer maintained book.json, package.json
Improved Colour scheme redesigned as "Paper & Ink · Light": the built-in color-theme-1 (parchment) painted the sidebar near-black #111 and the body cream, fighting the custom stylesheet. Now unified to light ground, dark text, with a cinnabar accent #9c3d2e styles/website.css (palette centralised in :root at the top)
Improved Body font now defaults to serif, size 2 book.json
Revised Removed the unused gitbook-plugin-toc dependency package.json
Revised Removed leftovers in _book/ from plugins that had been dropped _book/ (build output, not committed)

v2.2.0 · 2026-10-09 · Reading-enhancement plugins enabled

Type Change Files affected
Improved Better Chinese search: search-plus replaces the built-in lunr/search, adding Chinese word segmentation and highlighted results book.json
Improved "Edit this page": a direct link at the top of each page to its source file in the GitHub repository, so readers can fix things on the spot book.json
Improved Heading anchors: every subheading gets its own copyable link (all 46 pages) book.json
Improved Collapsible chapters in the sidebar: click a chapter title to fold or unfold its sub-entries book.json
Improved A floating "back to top" button (removed again in v2.3.0) book.json
Improved A draggable sidebar (removed again in v2.3.0) book.json
Improved One-click copy for code blocks book.json
Improved New plugin dependencies package.json, package-lock.json

v2.1.0 · 2026-10-09 · New module

Type Change Files affected
Added New "Change Log" module, recording each change row by row in tables changelog.md (this page)
Refactored "Change Log" entry added to the contents SUMMARY.md

v2.0.2 · 2026-10-09 · Better local preview

Type Change Files affected
Added One-click preview launcher (double-click to start the server and open the browser) preview.bat
Added HonKit exclusion list, keeping development files out of the published output .bookignore
Improved A "Reading locally (important)" section added to the cover page, explaining why file:// will not work README.md
Fixed Identified and documented: a HonKit site navigates SPA-style, so under file:// it is blocked by CORS and must be served over HTTP —
Type Change Files affected
Fixed Corrected 60 internal cross-directory links (across 34 files); the cause was that links had been written relative to the book root rather than to the current file several .md files under part1/–part4/, appendix/
Improved Built a full link self-check: 45 pages, 2,065 internal links, 0 dead verification script (temporary)

v2.0.0 · 2026-10-09 · Platform migrated, book rewritten

Type Change Files affected
Refactored Build system moved from GitBook to HonKit 6 (a near drop-in for SUMMARY.md / book.json) package.json, book.json
Added All 45 pages rewritten from scratch: cover, preface, four main parts and four appendices 45 .md files
Added Part One · A Chronicle of Zhabei (9 chapters, from the naming to the 2015 merger) part1/
Added Part Two · A Guide to Zhabei's Sub-districts (8 sub-districts + Pengpu Town) part2/
Added Part Three · Notable Sites in Zhabei (9 pieces) part3/
Added Part Four · Figures from Zhabei's History (8 pieces) part4/
Added Appendices: street-name codes, chronology, place names then and now, works cited appendix/
Added A three-grade system of sources (A gazetteers/bulletins/heritage registers, B authoritative media, C encyclopaedias and travel writing), with a "Sources" note at the end of every chapter all chapters
Improved A custom "archive paper" stylesheet (serif body, brown-toned headings, styled tables) styles/website.css
Improved Automated GitHub Pages deployment workflow .github/workflows/deploy.yml
Improved Line-ending and encoding normalised, so that Windows development and Linux builds agree .gitattributes, .gitignore
Revised Placeholder file deleted NONONO (deleted)

v1.0 · 2023-11-03 · Initial (abandoned)

Type Change Files affected
Added Project skeleton created with the GitBook cloud editor README.md, SUMMARY.md
Added A placeholder file NONONO
Note All three commits were generated automatically by GitBook (GITBOOK-3 / GITBOOK-4 / Create NONONO) and contain no real content. The project was abandoned after that —

House rules for maintaining this page

So that entries can be appended over the long term, three rules apply:

  1. One change, one entry: finish a round of edits, add a row to "At a glance", then a section to "Release by release";
  2. Every row must stand on its own: say what actually changed; do not write empty phrases like "optimised" or "updated";
  3. Name the files affected: so that any change can be traced back and reverted.

Finer-grained, technical commit messages live in the Git history; this page records only the changes that matter to a reader. The two complement each other.

Zhabei: A Century on the North Bank of Suzhou Creek zhabei.org 舟哥@2026 v3.6.0

results matching ""

    No results matching ""