Skip to content

docs(archived): transcribe the 2007-2025 association archive into the site - #145

Open
m1ngsama wants to merge 158 commits into
mainfrom
docs/polish-2026-08-contracts
Open

docs(archived): transcribe the 2007-2025 association archive into the site#145
m1ngsama wants to merge 158 commits into
mainfrom
docs/polish-2026-08-contracts

Conversation

@m1ngsama

@m1ngsama m1ngsama commented Aug 21, 2026

Copy link
Copy Markdown
Member

把协会 2007–2025 年的档案转写进站点。存档页从 53 篇增至 158 篇,覆盖 17 个年份;新增 73 张历史照片,修改既有页面 40 个。

改动落在 archived/about/concepts/repair/tutorial/process/,以及导航、图片与构建测试。158 个提交,每个提交对应一份原件或一处修正。

转写与呈现

多年重复出现的材料合并为单页:同一份讲义的四个年度版本以差异表并列(archived/2011/buying-guide-course.md);部门结构的历次变动汇总为一张标注出处的表(about/organization.md)。

编者说明一律置于〔〕内,与原文分开。

处理约定

三条,写在 archived/index.md

  1. 脱敏——删手机号、校内短号、学号、个人 QQ/微信;保留姓名、职务、班级、公开群号与公开邮箱。
  2. 原件中的网址不做修改。已失效的链接保留原样;存档页会检测站外链接并显示一行说明,指向现行的教程与维修入口。
  3. 原件照录,不删改、不加评价。

既有存档页

53 篇既有存档页的正文逐字保留,改动限于文件改名(CJK → 拉丁)、标题层级归一、补页题。已对全部 53 篇逐篇做内容比对。

CI 一并加固

新增 pnpm ci:verifyscripts/verify-dist.mjs),在 docs:build 之后扫描 .vitepress/dist。此前 CI 只看 markdown 源文件与文件之间的链接关系,一整类缺陷因此不可见:markdown-it 拒绝闭合而被原样打印的加粗、指向不存在标题的锚点、第二个 h1、以及缩进代码块渲染成裸 <pre>(在围栏代码块的横向滚动容器之外,手机端溢出)。一个同时含这四类缺陷的探针页,可以完整通过 test、lint 与 build。

该步骤上线即在存档中发现一处这样的引用块(2023-10-newcomer-training.md),已修。

隐私测试补上学号(3 开头十位);此前只覆盖手机号与校内短号。

.github/workflows/lint.yml 补上 permissions: contents: read(该 job 不写回仓库),并加了 15 分钟超时与 concurrency(同分支新推送取消旧运行)。该 CodeQL 告警在 2025-04、2026-04、2026-05 三次出现,前两次修复后又回归。

验证

结果
pnpm test -- --run 45/45 passed
pnpm run ci:lint 220 files, 0 errors
pnpm docs:build 通过,无死链
pnpm run ci:verify 219 页,0 问题
移动端(390px,218 页) 横向溢出 0,重复 h1 0
隐私正则(手机号/短号/学号) 0 命中
代码扫描 开放告警 0

其他

  • 档案中一份关于无线网络破解的材料,只记录其存在与主题,未转写其中的工具、命令与步骤。
  • 星级评比展示、动员大会幻灯等材料,内容与已收录的工作报告、纳新宣讲重复,未处理。

EN — Transcribes the association's 2007–2025 archive into the site. Archived pages go from 53 to 158 across 17 years, with 73 historical photos added and 40 existing pages revised.

Material that recurs across years is consolidated onto single pages: four annual editions of one lecture deck shown side by side in a diff table, and successive changes to the department structure collected into one sourced table. Editorial notes are kept inside 〔〕, separate from the original text.

Three conventions are recorded in archived/index.md: personal contact details (phone numbers, campus short numbers, student IDs, personal IM handles) are removed while names, roles, classes and public group IDs are kept; URLs in the originals are left untouched, with pages surfacing a note pointing to current entry points instead; originals are reproduced verbatim without edits or commentary.

The 53 pre-existing archived pages keep their text word for word — changes are limited to filename romanisation, heading-level normalisation and added page titles. All 53 were compared page by page.

CI gains a post-build step (pnpm ci:verify) that reads the rendered output. The vitest suite reads markdown sources, so bold that markdown-it declined to close, anchors aimed at no heading, a second h1, and indented code blocks escaping their scroll container were all invisible to it — a probe page carrying all four passed test, lint and build untouched. The step found one such blockquote already in the archive.

The editorial standard and reconstruction notes were process scaffolding,
not reference material. Drop docs/ and the srcExclude entry that kept it
off the site.
about/, concepts/, index.md, README and CONTRIBUTING were outside the
globs. All 113 files pass unchanged.
The extension set covered .png but not .jpg, so the 18 photographs added
for the about, concepts and repair sections were exempt from the registry
contract.
Title, unique-route and internal-link checks covered only tutorial/ and
process/, leaving the 43 wiki-model pages unguarded. Hub sections stay
exempt from the nav check, which is what they were excluded for.

Titles now fall back to frontmatter so hero pages, which carry no H1,
resolve the same way the hover-card indexer resolves them.
Five archived pages rendered a literal "[[toc]]" as their card body.
Chinese numbered lists ("1.开场") and bare dashes were read as prose
because the list rule required a space after the marker.

Extract the summary logic out of the data loader so it can be tested;
content-contract reuses the same frontmatter parser.
Five pages opened straight into a heading, so the hover card quoted a
half sentence under it. Promote the 概述/前言 sections that already served
as leads, and write one for the two pages that had none.
Shared links fell back to a bare summary card because the only logo was
an SVG, which crawlers ignore. Render a 1200x630 card from it and switch
Twitter to summary_large_image.

The asset registry now skips public/, which holds site-shell assets
rather than document assets.
Component headers described what each file obviously is. Keep only the
comments that carry a reason: the asset-url trap, the CJK tokenizer, the
hub sections' missing sidebar.

Also moves the sidebar note onto the block it explains and drops the
Chinese comment in tutorial/sidebar.ts, which duplicated config.mts.
Maintainer tables read "??? - ???", which tells a reader nothing. Say
待补充 instead, and settle on 待核实 for a claim awaiting confirmation
versus 待补充 for content that is simply absent.

repair-day.md pointed at an editorial standard that no longer exists.
It read "8/11/26, 5:10 PM" on a zh-CN site — ambiguous between 11 August
and 8 November, and the clock time carries no meaning for a doc page.
Tutorial screenshots of GitHub and BIOS screens are unreadable at prose
width. Native <dialog>, no dependency; images get tabindex and a role so
the zoom is reachable by keyboard, and Esc closes it.
〔待核实〕 and 〔待补充〕 sat in the text as plain characters, reading like
an assertion. Style them at render time so authors keep writing plain
text and readers can tell a known gap from a claim.
Every page eagerly preloaded all 32 mermaid diagram chunks. A plain
concept entry pulled 1209 KB of preload hints for 195 KB it could use.

Verified all 8 diagrams across 6 pages still render.
Delete sentences like "浏览器是访问互联网的主要工具" that state nothing,
and flatten two shell headings ("如何使用互联网", "主要功能") whose only
content was the subsections under them.

Technical facts, recommendations and tool lists are untouched.
The workbook and its certification screenshot carried a real name, class,
activity and date. The 张三 placeholder sample alongside it demonstrates
the same form, so nothing is lost.

Note: this removes the files going forward; they remain in git history.
24 template files sat in process/assets/ with nothing linking them: a
reader following the credit-application steps could not get the form.
Vite does not bundle .doc/.docx/.xlsx referenced from an <a href>, so
serve them from public/ instead, where they are copied verbatim.

Paths are now ASCII — a shared /templates/event/activity-proposal.docx
survives a paste into any text field, which the percent-encoded Chinese
name did not. The Chinese names live on as titles in the asset registry.

Links use raw anchors because VitePress appends .html to markdown links;
a contract test now enforces that.
The alt text guessed from the frame: someone taking notes beside a dev
board. It is a member logging a CA102 session while the laptop and the
tripod camera record and live-stream it. Confirmed by a participant.

Recorded in the asset registry so the next author does not re-guess.
A participant identified them: an after-event barbecue, a 2023 gathering
of core members, a routine business meeting, and the autumn 2023 welcome
assembly. The assembly's exact month is still unrecorded, so the alt says
only 秋季.

Facts recorded in the asset registry alongside the files.
The roster started at 18–19 届; the archive's 必读/历届会长.txt lists six
more by enrolment year (07–12). Kept as a separate table because 级 and
届 are different numbering schemes and the mapping is unverified.
The entry said only that CA102 exists. The archive has a full photo set
of 安卓 ROOT 及 iOS 高阶用法, 2023-12-09: the title slide carries the
topic, the club name and the date, and EXIF puts it at 18:31 that
evening — an 8pm-ish lecture, matching how CA sessions are described.

Two photos downscaled to 1600px and committed locally rather than hot-
linked. What is still unknown (numbering scheme, cadence, other topics)
stays marked 待补充.
Two planning documents give hard facts the page never had: 2024-11-30 in
SB102 from 12:00 to 17:00, and 2025-03-22 in NB122 from 9:00 to 17:30
under a 学雷锋 banner. Both ran five to eight hours, and both were held in
a classroom — the page's photos had implied an outdoor-only picture.

Two more dates survive only as photo sets, so their venue and hours stay
待补充. The table is explicitly not a complete list.
The session table read like an inventory of what we happen to have filed,
which is not what a reader wants from the page. Put the two planning
documents in archived/ where the historical record belongs, and let the
page itself say what a repair day feels like: half a day long, sometimes
a classroom and sometimes a few tables under the trees, and in March it
runs under the 学雷锋 banner.
The site said reporting a fault went through the WeChat mini-program, but
nbtca.space/repair has been the other half of it: create-ticket for the
person with the broken laptop, history for progress, admin for the team.
Both entrances feed the same ticket queue.

That also identifies 「我们的网站」 on the repair-day whiteboard, so the
open question narrows to how a new ticket reaches a free member.
nbtca.space carries a 文档 entry pointing here; the return trip was
missing.
Roadmap#64 collapses three repair entrances into one: nbtca.space/repair
now handles both ticket creation and admin, while the WeChat mini-program
and repair.nbtca.space are unmaintained and slated for shutdown.

The issue is still open — member onboarding and the replacement QR poster
are outstanding — so the pages say 不再维护、计划下线 rather than claiming
it is already gone, and carry a 最后核对 date.

weekend.md keeps its author's text; it gets a status notice instead, plus
one word in the opening line, which the hover card quotes site-wide.
GitHub flagged the volume of automated ticket creation as abuse and
restricted issues on nbtca/repair-tickets; an email appeal did not
restore it, so members handle tickets on the panel at nbtca.space/repair
instead. The sync code is still in Saturday (util/github.go), dormant.

weekend.md keeps the section rather than deleting it — it records why
GitHub Issues was chosen and what relying on an outside platform cost —
behind a notice that the practice is no longer in use. Whether the size
bands still apply on the panel is marked 待核实 rather than assumed.
wmic is deprecated on Windows 11 and absent from recent builds, so the
disk-info example moves to Get-CimInstance in the PowerShell block.

infrastructure.md and tools.md now carry a 最后核对 date: both are
snapshots of things that change without the page changing. Sunday is
marked unmaintained and Home noted as where the repair panel now lives.
Both were stubs that described the idea of the event without showing one.
Three photos from the archive, and what they tell you: the fair is a
morning of staffing a tent next to everyone else's tents; the welcome
party is a party — cake, drinks, and someone passing round a switch
tester for newcomers to try.

EXIF puts the fair at 2024-09-25, confirming the date already taken from
the meeting minutes, and the welcome party at 2024-10-13, which the
same-day minutes corroborate by calling it 今天活动.
Checked every external link on the non-archive pages: 163 unique URLs, 149
resolve. The 403s are Microsoft, Lenovo, Dell and guru3d refusing a bare curl —
they open fine in a browser — but five 404s were real in the sense that
readers hit them: nbtca/Hawaii, infra, pit-road and stacks all exist and are
private, so everyone outside the organisation sees a 404 with no explanation.

They are now marked, with a line at the top of the infrastructure page saying
a 404 there means private, not broken. Checked all 36 nbtca repos the site
links to; those four are the only private ones, and huaji-bot is archived,
which the page already said.

Also unified nbtca/hawaii to nbtca/Hawaii — GitHub redirects either way, but
the two spellings were on different pages.
…hable

Two links survived the earlier sweep as ambiguous and were worth opening in a
real browser rather than trusting a status code.

Acer's bare /support.html redirects to their 404 page; the working entry for
drivers and manuals is /support.html?type=1, which is what their own homepage
links to.

potplayer.daum.net refuses the connection from here entirely — a Korean host
that campus networks in the mainland commonly cannot reach. The URL is still
the official one, so it stays, but the table now says so instead of leaving
readers to wonder whether the link is broken.
…t errors

A URL in a 2008 plan points at whatever that vendor's site looked like in
2008. Acer reorganised, forums closed, domains changed hands — all of it after
the document was written, so a link that fails today is dating information, not
a defect. Repairing it would quietly erase that.

The transcription conventions now say so: archived pages keep the address as
written, never substitute a modern equivalent, never delete. Readers who need
something that works are pointed at the tutorial and repair pages, whose links
are checked.

This round's link work stayed on the living pages for exactly that reason —
verified that no URL inside archived/ was rewritten; the only changes there
were to editorial notes, to quiz options that are deliberately-wrong addresses
and should not have been clickable, and to indentation.
Introduced by my own roster-discrepancy note two commits ago — the same
CJK-punctuation-before-closing-delimiter case. Built HTML is clean again.
The convention that archived URLs are never repaired lived only in the index's
transcription notes — but the reader who needs it is the one who just clicked a
2010 vendor link and got nothing, several pages away from that list.

ArchiveMeta now appends a line to the provenance box saying the addresses are
as written, that failing to open is expected, and where the current entry
points are. It only appears where it applies: the component checks for an
outbound link in the rendered document, so the 17 archived pages that carry one
get it and the rest are left alone. Verified across all 212 pages — 17 expected,
17 shown, no page wrong either way.
… year's structure

The slide decks were the largest body of archive material nobody had opened —
my earlier passes could not convert them. Parsing .pptx with the standard
library turned out to be enough, and the first deck out is the most consequential.

The timeline recorded 2016 as three departments, on the authority of the club's
own outward-facing introduction. The recruitment briefing's org chart shows
five — software, hardware, repair team, organisation and R&D — under four vice
presidents split by portfolio. The 9th contest plan assigning questions to
software, hardware and R&D now has its explanation.

R&D also gets a job description for the first time: 'build and maintain the
club's website, help each department run its WeChat'. That is the earliest
body in the club dedicated to the website, two years before the 2018 reform
created the development department — and the reform's own account, which
describes merging three departments into one, does not mention it existing.

The department blurbs are worth reading for their voice; written for freshmen,
not for a form. The organisation department's line — a person with no sense of
belonging is of no use to the club however good their tech — is the 2014
'develop people or the club dies' argument in different words.

Fourteen planned activities include two that would not be run this way today.
The roster's contact columns are dropped; names, posts and classes stay.
The strongest thing in the slide decks is not any one deck — it is that four of
them are the same deck. 《导购与维护课堂》 was written in 2011 by the repair
department head; 2012 and 2013 presented it again with the sixteen content
slides unchanged to the word, including a typo and the forum slang for
'crooked vendor'. What did change is telling: the cover credit went from one
person to five departments, matching the structure the 12th handover notice
records, and the hotline went from one number to three.

The fourth year is the interesting one. In 2014 someone finally rewrote it —
added CPU and GPU sections, put his own name on the cover, and built three
slides that cost out a Taobao power bank claiming ten thousand mAh to show it
cannot be sold below 85 yuan. That is not inherited knowledge; he took one
apart. His asides survive too, which is how you can tell a specific person was
finally standing there rather than reading someone else's file.

Presented as a page rather than four transcriptions: the 2011 text as the base,
a table of what moved each year, and the one photograph the lecture ever left.
The page is wired into the shopping-guide team of 2009 and the essay of 2011
that argued the club should pivot to advice — idea, department and course, in
that order.

Confirms the 2014 deck by matching the 46MB original, and closes the loop the
existing 2014 planning page opened.
The activity pages record that cable-making was taught; the 32-slide deck
records what was taught. This is the curriculum: network classification, seven
kinds of network device tagged by layer, TCP/IP, IP address classes, DNS — then
the tools, T568A/B wiring, three cable types, and a seven-step process detailed
enough to follow (strip 2-3cm, listen for the click, eight lights in sequence).

Deliberately ordered principle-then-practice, and taught to freshmen who had
never crimped a cable. The 2018 version dropped the entire network-fundamentals
half and kept the seven steps word for word, adding only a co-sponsor — Lenovo's
campus team — which is a record of a company partnership reaching into a class.

Wired to the 2016 workshop summary and the 2018 workshop page. Corrected a
claim I first got wrong: 三江潮 is a campus media platform the club advertised
through, not the club's own public account — the decks print both QR codes side
by side, and a 2009 president is on record envying '三江潮's own office'.
…2016

Five 2016 decks form one series — '各类电脑系统教学'. Its range is the point:
not just reinstalling Windows, but installing Ubuntu from USB and running Mac OS
X inside VMware, plus a partitioning-theory deck. Ambitious ground for a student
club. The hackintosh part is recorded as taught, not reproduced — its patch and
crack mechanics are left off.

The detail worth surfacing is in the download links: the images came from
ftp://10.80.6.166, a campus-internal address. The club was already running its
own image server in 2016 — the same habit the infrastructure page documents for
today's i.nbtca.space mirror, seen almost a decade earlier. Both pages now carry
the thread.

And the 2014 deck kept a motto under each of the four teaching leads — '不服你来
打我啊' — the same human touch as the Christmas Eve notes, in a file that was
supposed to be pure procedure.

Internal FTP address is RFC1918 space, safe to print; QQ group numbers are the
club's public ones.
The 2016 解密无线网络 session came with two decks the page never mentioned. The
《网络安全》 deck is concept-only — security incidents, the five-stage attack
model, viruses vs trojans, then defenses — a good sample of how deep the club's
security teaching went, and it transcribes cleanly.

The second is an operational WEP/WPA cracking walkthrough. The page records that
it existed as course material and what it covered at a high level; the tools,
commands and steps are deliberately left off. The plan itself framed it as
'for learning network-security reference only'.

The editorial note draws the real point: the session was billed to the whole
school as 'network security' and listed separately from '无线网密码破解' in the
recruitment briefing, but the archive shows they were one session — defense
concepts in public, a crack demonstrated in the room. Both sides are kept; the
reproducible detail is not.
…d legible

The one thread I keep adding to and keep contradicting across pages is the
department structure — five departments in 2013, three in 2015, five (with R&D)
in 2016, five different ones in 2017, four after the 2018 reform. In prose,
spread over a dozen archived pages, it is genuinely hard to hold in your head.

Consolidated into one reference table at the top of the org page: structure by
year, every row sourced to the archived document it comes from, so a reader can
consult it while reading the timeline below. Three patterns called out — the
technical departments splitting and merging repeatedly, the outward description
disagreeing with the internal chart in 2016, and the repair team staying outside
the department grid throughout.

Verified on mobile: 342px table in a 390px viewport, no page overflow, links
intact.
Same CJK-punctuation-adjacency case as before, in the four PPT-derived pages
I added this session. The pairing-aware fixer cleared 14; two more needed
hand fixing where a bold phrase wrapped 「」 brackets, which the punctuation
set does not cover. Built HTML is clean.
The site already has plenty of 许益灵 in writing — the '会长说', the handover
letter, the annual report — but all of it composed for the page. This deck is
him at the front of a room talking to new students, and the register is
completely different: he mocks the student union's efficiency, tells freshmen
'thinking the leaders are idiots is exactly right, because this club is a place
where each generation negates and surpasses the last', and closes on dues with
'fee? — collect next time'.

That one line is the club's self-image stated plainly, and it squares with why
he insisted on interviewing rather than appointing successors and stepped back
a year early: make room, let the next ones grow past you.

It also carries figures found nowhere else — repair service 'past a thousand
person-times', alumni at 4399, Kingsoft, Xiaomi, Renren — and a '自控组
(forming)' building a multirotor's attitude-control system, an ambition that
did not vanish: the 2014 recruitment intro still lists a quadcopter to tinker
with, and both pages now point at each other.

Names cross-check against the 12th handover notice; short numbers redacted.
The phone-storm page had the plan and the news article; the 33-slide deck had
the lecture. Added it: a phone history timeline, a blunt four-way chip rundown
(Qualcomm best signal but 8-series worse than 6, Apple a generation ahead but
drops old users, Kirin rising fast), and a price-tier recommendation table.

That table is the same kind of artifact as the 2008 software-CD list — it seals
a specific year's consumer-electronics landscape. Smartisan and Nubia still
around, iPhone X just out, 4000 yuan the flagship line. Read today it is less
buying advice than a snapshot of the phone market through a 2017 student's eyes.

Ties the session into the four-year buying-guide course — the club's 'help
people buy the right device' thread, run from laptops to phones — and notes the
presenter, 朱柯权, was president by then and the hardware-department head in the
2016 recruitment briefing.
…nternal twin

The repair department's first meeting of the 2013-14 term (16 Nov, led by new
head 诸葛瞻) is a concrete record of how a department opens: in one evening he
ran the whole term's syllabus — disc install, PE making, circuit soldering —
then did the admin, member forms, grouping, dues. It keeps a symptom→fix card
('missing operating system' → rebuild the MBR in DiskGenius) of the same kind
as the 2011 fault-handling lecture, and it's another stop on 诸葛瞻's path from
the member who wrote the jailbreak log to department head to president.

The freshman briefing gains a note about its internal twin (same © xyl): the
internal version still lists the software department as 'planned, newly added',
while the public one has it as an existing department — the two decks bracket
the moment that department went from planned to real.

QQ group numbers are the club's public ones; the sample member row's student
number, phone and personal QQ are redacted.
@m1ngsama
m1ngsama requested a review from sheepkinn as a code owner August 21, 2026 08:38
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 21, 2026

Copy link
Copy Markdown

Deploying documents with  Cloudflare Pages  Cloudflare Pages

Latest commit: 7450be9
Status: ✅  Deploy successful!
Preview URL: https://a91a015d.documents-dq4.pages.dev
Branch Preview URL: https://docs-polish-2026-08-contract.documents-dq4.pages.dev

View logs

Comment thread utils/page-preview.ts Fixed
The hover-summary cleaner removed whole `<...>` tags only. An unterminated
`<script` has no closing bracket to match, so it passed through verbatim --
flagged by CodeQL as incomplete multi-character sanitization.

Summaries are plain text, so drop any leftover angle bracket after tag
removal. No existing page summary is affected.
Comment thread utils/page-preview.ts Fixed
Behaviour is unchanged -- one pass already suffices for our content -- but
the loop is the shape CodeQL recognises as complete sanitization.
The job checks out, installs, tests, lints and builds -- it never writes
back. Without an explicit block the job inherits the default token scope,
which CodeQL has flagged three times on this file.
The line kept five spaces of indentation from the original's list nesting.
With the heading promoted out of that list, markdown read the indent as a
code block and printed the quote marker to the reader.
Phone numbers and campus short-dials were already covered; student numbers
were redacted by hand during transcription with nothing to catch a relapse.
The vitest suite reads markdown and how files link to each other, so a whole
class of defect was invisible to CI: bold that markdown-it declined to close
and printed verbatim, anchors aimed at no heading, a second h1, and indented
code blocks rendering as bare <pre> outside the wrapper that gives fenced
blocks their scrollbar, which overflows on phones. A probe page carrying all
four passed test, lint and build untouched.

The new step runs against .vitepress/dist after the build. It found one such
blockquote already in the archive.

Also caps the job at 15 minutes and cancels superseded runs on a branch.
Comment thread scripts/verify-dist.mjs Fixed
Same incomplete sanitization CodeQL flagged in the preview helper: an
unterminated "<script" has no closing bracket to match, so tag removal alone
carries it through. Also drops the one CJK example left in a comment.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants