docs(archived): transcribe the 2007-2025 association archive into the site - #145
Open
m1ngsama wants to merge 158 commits into
Open
docs(archived): transcribe the 2007-2025 association archive into the site#145m1ngsama wants to merge 158 commits into
m1ngsama wants to merge 158 commits into
Conversation
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.
Deploying documents with
|
| 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 |
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.
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.
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
把协会 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:既有存档页
53 篇既有存档页的正文逐字保留,改动限于文件改名(CJK → 拉丁)、标题层级归一、补页题。已对全部 53 篇逐篇做内容比对。
CI 一并加固
新增
pnpm ci:verify(scripts/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 -- --runpnpm run ci:lintpnpm docs:buildpnpm run ci:verify其他
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.