Repository navigation
Releases: EricWang1358/dsh-web-studyhub
Release list
StudyHub 3.5.0
- The 总纲 and the 复习全书 are built as an inventory-driven quality workflow (#432). Every page range of every material is first read, in parallel, into an inventory of terms, definitions, concepts, formulas and steps, each with its page anchors. The 总纲 is then built from the inventory into real knowledge points whose anchors are page spans. Sample papers are detected and used by default (a name needs a paper marker, and a choice you made in 3.4 is kept). Each point gets a must-cover checklist; the points are written in parallel with no fixed template, reviewed independently, and repaired (at most two rounds). A point that stays short is marked 「未达标」, and the job finishes as partial rather than hiding it. There is a glossary, 「生词与概念」, and coverage is shown at three levels. The console shows the lanes 清点 / 归纳 / 写 / 审阅 / 修复 and a 知识点 board. A 3.4 outline is not rebuilt silently: a button, 「用清点结果重新整理总纲」, does it when you ask, and notes follow their points by page or character overlap, with a summary of which notes moved.
- Reading the 复习全书 (#429, #425, #424, #427). The book reads one section at a time (逐节读) with layers, a single toolbar row, a 整理 menu and calmer typography. AI blocks fold, and their anchors are dashed. The 弄懂 panel appears only while there is a selection. An instruction written in an AI block is followed for its form.
- Editing the book from the main chat (#431, #433). New operations
book.toc,book.read,book.writeandbook.coverage, andsource.pages, which records the pages that were opened (so reading coverage is real). The package ships astudy-bookskill. 「发给主会话」 buttons send a point, the selected words or the whole book to the main chat. - Question generation uses every selected material (#430). Each selected material gets a section first, there are before and after lines per material, and a per-material 补题 button.
- Smaller changes. Long .ogg and .opus recordings are split losslessly, and one request carries at most 45 minutes (#426). The 索引 badge opens the place where the index is built (#428). The 归并主题组 prompt shows the exact result shape and reads pages of 60 (#421). The 复习全书 has a sidebar entry (#422).
Read this before you upgrade:
- The upgrade is one-way. Back up your library folder first. 3.4 can still read the new notes, but it would list the inventory record as a material, it cannot resolve page-span anchors, and 「更新全书」 in 3.4 on a span-based outline writes empty bodies.
- The
study-bookskill is not installed for you. Copy it to~/.dsh/skills/study-bookyourself. Whether a running DSH finds it there is not verified.
Known issues, not fixed: #407 (an audio run shown as a 「并行时间线」 is really sequential). The browser tests follow-label-fit-browser, nav-layout, science-settings-browser and wave5c-estimate already fail on main; they are not part of CI.
未验证 (not verified): nothing in the new AI workflow was run against a real model. It was tested with fake models and synthetic libraries only. Real writing quality, the size of the checklists, how strict the reviewer is, and the number of calls per point (up to about six when repairs are needed) are unknown. The final package passed the archive check (npm run release:check) but was not installed into a real DSH.
StudyHub 3.4.1
A small follow-up to 3.4.0.
- The 复习全书 has a sidebar entry. It sits under 阶段性, after 备考补习, so the book no longer has to be found through the course page. The book header now says what the 期末一周 needs: 「设置考试日期,开启期末一周」 when no exam date is set, and 「期末一周在考前 N 天开始」 once one is. The 总纲 page keeps one primary button that follows the state: 「打开书页」 leads when the book is current, and otherwise it is 「生成总纲」, 「生成复习全书」 or 「更新全书」. The sidebar entry opens the book when it is written, and the 总纲 page (with one line on what the book is) when it is not.
- The 归并主题组 prompt for the main chat shows the exact result shape. The prompt now carries a one-line example of
skeleton.topics(field names exact, so the model reads it directly and does not write a script), in both languages and both modes. In merge mode it reads 60 topics per page instead of 150. A test compares the example's keys with the real operation's.
Known issues, filed and not fixed: #407 (an audio run that is shown as a 「并行时间线」 is really sequential) and #408 (a long .ogg or .opus file is sent to Gemini as a single segment and rejected).
未验证 (not verified): the AI parts of 3.4.0 and of this release (总纲, 复习全书, 答题卡) were tested with fake models only; none of it was tried with a real model or on a real library, and the 归并主题组 prompt change was not run against a real model either. The final package passed the archive check (npm run release:check) but was not installed into a real DSH.
StudyHub 3.4.0
- 复习全书 (the review book). A book-like page for each course, built on the 总纲: an explanation for each chapter with cited quotes from your materials (generated, and updated when the materials change), the course's questions linked from the text. A question link opens real practice and brings you back to the same place in the book. You can edit the book (a 预览 / 原文 switch), and the fork rule keeps your edits apart from the generated text; suggestions can be accepted or declined, and every version is kept in a history. 弄懂 and 加一段 work while you read: ask about a passage, and add a paragraph of your own. A Q&A can be added to the book with one button, and the book switches to it. The analysis questions have an answer card (structured, checked, one full version). 查找页 lists terms and points. The book exports to CP as Markdown, with an answer key and an estimate of the pages. For the last week there is a 期末一周 plan, a 翻看 view for browsing, and a mock paper made from chosen points.
- AI-organised 课程总纲. The 总纲 can be generated by the model: a book-like page of the course's chapters and points, with marks for what a sample paper covers.
- A visible 总纲 button in the course header and in the 学习目录 header of the home page.
- Marker (PDF conversion). The installer pins
marker-pdf<2and recognises Marker 2.x if it is already installed, and checks for Docker. When 2.x is found there are two choices: start Docker, or 修复安装 (reinstall 1.x). Each conversion window has a readable log, and the PDF console shows fewer leftovers. - Internal. QuestionRun was extracted from the review page so that other pages can mount real practice (no visible change). CI has a browser smoke job that does not block merges.
Known issues, filed and not fixed: #407 (an audio run that is shown as a 「并行时间线」 is really sequential) and #408 (a long .ogg or .opus file is sent to Gemini as a single segment and rejected).
未验证 (not verified): none of this was tried with a real model or on a real library. The tests use fake models and synthetic libraries only; the generated explanations, 总纲, answer cards and the mock paper have never been judged on real course materials, and the Marker changes were not run against a real Marker 2.x install or Docker. The final package passed the archive check (npm run release:check) but was not installed into a real DSH.
Upgrade only: the 复习全书, the 讲解 and the 总纲 are stored as hidden records that older releases do not hide. Do not go back to an earlier release after using them.
StudyHub 3.3.0
- A 总纲 page for each course (step 1). The 学习目录 lists decks, and a knowledge point is hard to find among dozens of them. Open 「总纲」 from the course area of the home page: the course's materials and their chapters as a tree, each row with its question count and mastery and a 练这一节 button; open a row to see its questions (each with its deck name), tick the ones you want and practise exactly those (de-duplicated: a question under two chapters shows under both and counts once). One round holds at most 200 questions: the first 200 by due, weak, new. Questions that cannot be placed (no citation, or they cite a material not filed under this course, another course's, archived or gone) are in 未归位 with the reason, and a hint to file those materials under the course on the 资料 page. A deck filter keeps decks as provenance; deck management is unchanged. The folded 课程路线 list on the home page is gone (the home keeps one continue button). It is built from the materials' chapters, with no AI text yet.
- 交卷 asks only when something is unanswered. The written exam used to open 「仍然交卷」 with 「还有 0 题未作答」 even when every question was answered; now a full paper is handed in at once and the dialog says the real number otherwise.
- The practice page says which other courses a mixed run covers: 「+N」 after the course name, the others on hover.
- A coverage run keeps honest books on retries. A section that a pass did not ask for (cut to fit, or not chosen in a press for some sections) is no longer charged a failed try or counted in the rows; a round is done only when each of its sections has a question or was really tried, and a round that was asked in parts asks the rest in its next pass. A failure that repeats stops after two passes of the same round (no wasted spend); 接着做 later asks what was never tried; a stop in the middle of a pass leaves the round owing what nobody asked.
Known limits: one material imported without choosing a course is stored as having no course, so questions that only cite it stay in 未归位 until it is filed under the course on the 资料 page; the 总纲 has no introductions, no sample-paper marks and no course picker of its own yet; a round done in two passes shows the figures of its last pass; the final package passed the archive check (npm run release:check) but was not installed into a real DSH, and none of this was tried on the owner's own library.
StudyHub 3.2.1
Fixes found by using 3.2.0.
- The update check says what really went wrong. GitHub allows 60 anonymous API requests an hour per IP; behind a shared proxy or VPN that runs out and the check failed with 「请检查网络」. A rate limit is now said as such, with when it recovers (「约 HH:MM 恢复」), and when the API fails or is rate limited the check falls back to the
github.comrelease redirect to learn the newest version (the download and its SHA-256 check are unchanged). HTTP errors name their status. - 新建考点清单: materials default to 不用. A material with no real signal (a name word such as 样卷 or 大纲, PowerPoint) is no longer taken as 课件; with 自动识别资料用途 off every material is 不用. The wrong 「资料的选择有误…」 message was really a count: one list takes at most 60 materials and each plain note counts as one. It now says so (「一份考点清单最多用 60 份资料…」), and with nothing picked the page says 「先选至少一份课件」 instead of showing a number.
- A material's coverage counts the same questions as its 「N 题」. Questions on an older version, on another import of the same recording, or on the single recordings of a merged recording were counted in 「N 题」 but not in the coverage, so the 覆盖 chip was missing. Now both read the same questions; a quote that cannot be found in the current text shows 「覆盖 0%」.
- A citation that passed verification is found in the reader. The check was fuzzy and the reader strict, so a hyphenated line break, markup or full-width characters opened the source with nothing highlighted. The reader now locates it with the same fuzzy rule and highlights it; when it is nowhere, a paged document scrolls to the page and says 「没能精确定位这段引文」. 「看这题的原文」 now shows after any answer, not only a wrong one.
- The practice page shows the course and two progress figures beside 「查看 N 份资料」: 本章 (the deck of the current question) and 整课程 (the course's decks), in the 资料 page's wording.
- Reviewed questions no longer read as 未自动审阅. A location stamped on a citation after the review made every stamped question look edited; the review fingerprint now ignores that location (an edit to the prompt, answer, options, explanation, citation quote or source still shows). Questions already saved read as reviewed again without a migration.
Not fixed or not verified: the update fallback and the reader changes were tested with fake responses and fixtures, not against the owner's own library; a citation that runs across two pages shows the page but no highlight; a very short citation that appears twice is reported as not exactly located; the final package passed the archive check (npm run release:check) but was not installed into a real DSH.
StudyHub 3.2.0
The long flows got shorter: the first minutes, model setup, making questions, importing, daily practice, exams and the task console. The settings stay, behind a fold or in Settings; the main path is the short one.
- Model setup says where to go. Settings › 学习库与模型 opens with 模型已连接 or 模型未连接 and the exact steps; the key is set only in DSH. Every place that needs a model uses the same gate and the same words, and a link to the model settings is shown only where it works.
- A shorter first run. The sample tour is 8 steps (6 without the sample) instead of 21; the full tour is offered at its end and in Settings. The first step is called 添加资料 everywhere. 按原资料重新设置 puts the whole failed request back on the form (a generation job now records what was asked; jobs made before keep less).
- The first import lands on 创建题组 with the new material ticked; the course is one line, and is read from the file name only when exactly one course is named in it. A scanned or over-8 MB PDF is handled in one place with the reason on its row; a recording import closes its dialog and offers 用它出题 when it finishes. The audio estimate no longer assumes English.
- 创建题组 opens ticked and on one line (types, coverage strength, course); the rest is under 更多选项. A clean finished run is published and practised with one click (发布并练习), and a draft being worked on says why saving waits.
- Daily practice. The home card is the current course's daily path; the result page puts the one next step first; Settings has a 练习 page (autopilot, round size, 练习点评); 错题 has 练这一组 and 练筛选的 M 道; 待办 starts from a local proposal that needs no model.
- Exams and the report. The time limit is set on the exam's setup card (default: the course's own time); each weak topic in the report is one click from practice; a chapter row has 练这一章; the "how well" numbers have distinct names (达标率 on the dashboard, 数据不足 under 3 answers).
- Reader, notes and courses. One-click first-level questions; making questions from a passage is prefilled; a note has AI 起草解析 as a button; the 任务 sidebar entry shows finished tasks; a page's scope says 跟随当前课程 or 已固定; the course panel opens on the exam date.
- Choose the model for one task. The 任务 console's 即时控制 has a 模型 choice for the running task only; the reasoning levels shown are those of that model. Settings and other tasks are untouched.
- The 任务 console's figures about what is left agree. Questions left and the token forecast come from what is really left (the sections still uncovered, or the points the planner returned), and 已用 is this job's (「本任务已用」).
Changes to know about: autopilot (key A) starts off once after upgrading, because it is a setting now (设置 › 练习); 待办 writes an unaccepted local proposal on its first view each day.
Not fixed or not verified: nothing here was tried in a real DSH (the model settings links, the model choice for a task and its model list); 备考补习 has still not been tried with real slides, a sample paper and a real model; every generated card still shows 未自动审阅 on the draft page (a field stamped after the review changes its fingerprint), which 发布并练习 works around; 交卷 always asks 「还有 0 题未作答」; the final package passed the archive check (npm run release:check) but was not installed into a real DSH.
StudyHub 3.1.1
Two fixes for 3.1.0: its 备考补习 page could not be turned on the way its notes said, and 自动补到完整 gave up too early.
- 备考补习 is on by default, and you can turn it off yourself. 3.1.0 told you to turn on
examBlueprintin DSH's plugin manager. That page lists only the components and has no such switch, so the page stayed hidden. Now the sidebar entry is there unless you switch it off in 设置 › 备考补习, where the switch is the first control. Building a 考点清单 still starts only when you click it and shows a usage estimate first; a 考点清单 never mixes into the materials list; switching the page off keeps the lists you already made. 恢复默认 in that pane leaves the switch alone. - The host setting
runtime.pilot.examBlueprintstill works, but only to force the page on whatever you chose. When it does, the pane says so and shows no switch. - With the page switched off, it says that you turned it off in Settings and has one button, 前往设置. It no longer points to the plugin manager.
- 自动补到完整 goes on until every section has a question, not until the last planned round. With it ticked, a run still stopped after its last round when questions that failed review had left some sections without one (92%, say): it allowed two retry rounds and two tries per section. It now writes those sections again, each retry round asked only for what is still missing, up to 5 retry rounds and 4 tries per section, and ends sooner when a retry round gains no section. If some are still left, the stop names them and 为没覆盖的部分补题 does one more round on demand.
Not fixed or not verified: a section that fails review 4 times is still left to you (it is listed with its reason); 备考补习 has still not been tried with real slides, a sample paper and a real model; the 3.1.0 notes already published on GitHub still carry the old plugin-manager instruction, and this entry replaces it; the final package passed the archive check (npm run release:check) but was not installed into a real DSH.
StudyHub 3.1.0
There is no separate 3.0.2: the fixes that were queued for it ship here together with 备考补习.
- 备考补习 (new, off by default). A page for revising before an exam. Its 考点清单 is a special material built from your slides or notes (and, if you have them, sample papers), with a two-level tree, and the older version kept when you rebuild it. Each point says 样卷考过(N/M 份), meaning N of the M sample papers tested it, or 补充, meaning only the slides teach it; nothing is promised about the exam, and one sample paper gives the shape of the exam only, never frequencies. It is a host switch: turn on
examBlueprintin the DSH plugin manager (设置 › 备考补习 says so, with a button to the plugin manager when DSH offers one). It has not been tried with real slides and a real model yet. - Making a 考点清单 takes a click or two. 新建考点清单 opens a form that is already filled in. Your course materials are sorted into 课件, 样卷 and 大纲 with the reason written next to each (a name that only looks like a paper gets a hint, never the role), the course and the name are filled for you, and the rest (name, scope, language, reading note, other courses' materials) is folded under 更多设置. A wrong guess is one click on that row. No sample paper yet? 导入样卷 brings it in already marked. 设置 › 备考补习 keeps your own defaults: automatic guessing on or off, extra sample-paper words, the language of the list, and whether other courses' materials are listed.
- Building a 考点清单 is steadier and says what it keeps. A repeated question number (选择题 1 and 填空题 1) no longer drops or mixes up questions, and a long paper is no longer cut after 24 questions. Limits are checked before the first model call, with a plain refusal. A retry keeps the answers already read, and a slide window that cannot be read twice is skipped and noted in the list (marked incomplete) instead of voiding the whole build. Near-duplicate points from different slide windows are united (线性回归 and 一元线性回归) while C, C++ and C# stay apart. On such a task 接着做 and 停止 say what really happens, the finished card says 已保存考点清单 and opens the page, a list built from materials you have since changed says 资料已更新,建议重新生成, and a list no longer adds a course name of its own.
- 要求并行. A queued task can be started beside the queue by hand. The default is still one after another. A rate limit, an overload, a timeout or a model error sends a parallel task back to the queue, and nothing already finished is lost. Hover the queue state or the button for what it does. With several tasks running, 暂停 waits for the calls of all of them, not for a whole round.
- 创建题组 no longer shows three ways out for a selection that is too big. One block asks how to go on (分步出题, 按主题挑页面 or 一次出题) and shows only that mode, with one button. 按路径逐步出题 no longer fails every step with "tokenBudget 需要是不小于 1000 的整数": a step is a plain request with its own count, and the same reason for many steps is said once. Skipped steps (目录页 and the like) are folded.
- The 任务 console shows the goal and the points. A third tab, 目标与知识点, lists what the planning step chose, by batch, with each point's state and where it came from (a new record on question-generation jobs, no extra model call; a task from an older version has no list). The 日志 stamps the real finish time and says when a run is closing and closed; page counts say which pages are readable and which are in the original file; the 即时控制 row and the 跟随当前会话 choice fit at every width.
- A part that fails no longer sinks its round. A part whose set-up fails is recorded and the others go on; questions are credited to the section their quote belongs to even when the same sentence occurs more than once; a failed batch is no longer called 被停止.
- 错题本 opens by deck, folded, with filters (deck, search, 答错 / 未掌握) and loads up to 1000 mistakes instead of 100. 开始重练 still uses all of them.
- Home: 待发布草稿 sit in a folded section under the desk. The deck picker groups decks by course.
- 在右栏打开 says why when it cannot, instead of doing nothing; from the top-level StudyHub page it shows the conversation first and then opens the sidebar.
- Ask about a passage with follow-ups. Ask about a selection, ask about a term in the answer (up to 3 levels and 8 questions per thread), and keep notes per document revision, with 阅读 and 批注 modes.
- The reading header buttons are the same size.
Not fixed or not verified: 在右栏打开 and the 课堂实录 fix were only tried in a simulated DSH; 备考补习 was not tried with real slides, a sample paper and a real model (its form was only exercised in a browser preview that has no background task service); audio and PDF tasks do not record a start time; the usage estimate does not include 采纳审阅建议; a review issue with no owner still discards its whole part; opening a dropdown far down the settings page can jump the scroll position; the CI test that a library with an exam-point list stays readable in 3.0.0 is skipped there because the checkout has no tags; the final package passed the archive check (npm run release:check) but was not installed into a real DSH, so the first upgrade is the first real test of it.
StudyHub 3.0.1
- A continued run follows the time limit you set. 接着做, 为没覆盖的部分补题 and a top-up of a published deck used the limit the draft was written with (20 minutes by default) whatever 设置 said. They now take the current 每轮运行时限; a value you pass for one run still wins.
- Pause stops new model calls, then waits only for the ones already running. It used to wait for the whole round (often 20+ minutes). The round clock does not run while paused. A run with 自动补到完整 switched off can be paused too. A paused run lives only while DSH stays open: after a restart it is Interrupted and 接着做 continues from the draft.
- A queued task no longer counts time as if it were working. 已用 starts when the run really starts; a queued task shows 排队中 · 已等 … instead. The time-limit strip uses the same clock.
- Marker no longer says "installed, but the check did not pass" for a good install. An empty program path now falls back to the environment StudyHub installed. The button is 「检测并保存」: the path is checked first and saved only if it passes, so a blank or wrong box can no longer replace a working path.
- 课堂实录 says why a tab cannot be shared. Inside a DSH panel that is not allowed to share a screen the browser refuses at once without showing a picker; the page now says so (and what to do: a separate browser window, or the microphone) instead of telling you to click 开始实录 again. Several 「音频设置」 and settings links now open the section they name instead of the top of 设置.
- A stopped run explains itself. Instead of 「重试了几轮」 and 「考点不够数」 the plan block, the log and the draft page say what happened (needed 3 points, the model gave 1), why when it is known, how many times it was tried, and what you can do. Stage lines that were English in the Chinese interface are translated. (Runs finished before this version keep their old, shorter text.)
- Optional: apply the review's suggestions (off by default, 设置 › 出题偏好 or the 即时控制 box of a running task). A question that passed review with a suggestion gets one rewrite and one more review; if the rewrite does not pass, the approved question stays as it was. It costs more tokens and time.
- Default question types are a custom combination of single-choice, multiple-choice, flashcard, open question and cloze, shared as evenly as possible. The old 「测验 + 闪卡」 is one of the combinations. A library rolled back to an older version sees a valid single type.
- Pin materials (「置顶」 in the 更多 menu) and order the pinned ones by drag or with 上移 / 下移 / 置顶到最前.
- The 任务 console says more. The 日志 shows the batch and how many questions each call wrote, reviewed, flagged and re-wrote; the plan block shows 已用 + 还要 ≈ 共 and a time estimate re-worked from the run's own progress; 「打开资料」 opens the one material a task concerns; 「跟随当前会话」 says which model and reasoning level it follows.
Not fixed or not verified: the last minutes of a run can still be silent; the percentage of a stopped run is still not its coverage; the new options are not in the usage estimate; the 课堂实录 fix was built from a browser reproduction and has not been tried inside a real DSH panel; the full test suite has been run by CI, not as one clean local run.
Verified
- The full test suite passed on CI (ubuntu and windows
verify, about 7 100 tests) on the code of PR #371, which is exactly the code in this release. The release commit56b95151only changes the version and docs; its own CI run was still in progress when this release was published. - A local run of about 680 targeted tests over everything these changes touch plus all guard tests (boundaries, CSS, docs links, locale/English, layout stability, ui-guardrails, perf budget) passed.
- Pinning (drag, menu moves, unpin) and the question-type picker were exercised in a real Chromium; Marker's fallback was run against a real install on the author's machine (empty saved path: PATH only finds nothing, with the fallback the installed copy passes the check); the pause change, the queue clock and the progress/estimate lines were tested with a fake model and the test harness only, not in a browser or a real run.
Not verified, or not fixed
- This package has not been through an install / upgrade round trip (3.0.0 → 3.0.1 → 3.0.0). After upgrading, look at the first screen and the 任务 console.
- The 课堂实录 explanation is built from a Chromium reproduction (a frame without
display-capturerefuses at once, no picker); it has not been tried inside a real DSH panel. - 「采纳审阅建议」 was tested with a fake model only; it is not counted in the usage estimate.
- Known and not fixed: the last minutes of a finished run can be silent in the log; the percentage of a stopped run is not its coverage; a continued run starts at a misleading 100%; 「要求并行」 is not in this release. These are being worked on for 3.0.2.
- Audio and PDF tasks do not record when they really started running (their 已用 still counts from creation once running).
- The pause change applies to question runs with rounds; the unified runtime (all 23 switches off by default) does not support pause for generation, as before.
- A rolled-back library (3.0.0 or 2.7.1) sees the new settings fields and pins as unknown and ignores them; pins and combination choices are lost if that version rewrites the settings.
StudyHub 3.0.0
- Audio tasks describe the work they actually do. Imports, subtitle files, transcript review, live-class saves and live corrections have their own details in Jobs. Request messages, timeline legends and file stages follow the task; live correction does not show an unrelated Files tab. Opening the study map while an audio task is running no longer crashes the page.
- A stopped local program keeps its slot until it has actually exited. Cancelling an install or conversion no longer frees its resources after an arbitrary ten-second wait while the program may still be running. A failed stop remains pending, so a second operation cannot silently overlap it.
- Navigation remains reachable when the interface is enlarged. Settings stays inside the sidebar's scroll area; the current-page highlight returns after starting a practice session.
- Adding questions to a deck used by a learning workflow no longer fails at publication. The active workflow keeps its original selected questions. Audio processed by the host records an unknown aggregate model instead of an unused Gemini setting.
- Failed personalized batches remain visible. A resting daily record no longer makes failed work look successful; the console names failed batches and includes the day in the failure filter.
- An upgrade can be repeated after rolling back. Once the new version starts, it clears its completed restart marker so returning to 2.7.1 does not block another upgrade from Settings.
- A narrow window no longer shifts the first screen. A "opening the study workspace…" bar for the live-class view, which stays mounted out of sight so recording survives page changes, was drawn above every page while its code loaded, then vanished and moved the page up 46 px. A view kept out of sight now shows nothing while it loads. It appeared only on a busy machine.
- A task board or notebook list edit is no longer lost to a passing Windows file lock. Saving the board or the notebook registry replaced its file once and failed if a scanner held it for a moment; it now retries the same completed file as the study library already did.
- The unified job runtime covers audio, question generation, translations, notes, study workflows and local tools. It shares task status, cancellation, model usage and recovery contracts. All 23 migration and enhancement switches remain off by default; existing explicit opt-ins keep working. The release acceptance record lists the checks and limitations. Existing task files remain compatible with 2.7.1, and the previous execution paths remain available for rollback.
Verified
- CI green on the merge commit
d18a501c(ubuntu and windowsverify, full suite). - A real package round trip
2.7.1 → 3.0.0 → 2.7.1 → 3.0.0on a pre-release candidate (not this final package) passed in segments with the public update dialog and DSH's native plugin installer; the first rollback command timed out after 600 s and the retry in the same profile passed, so it is not an uninterrupted four-round pass. Seedocs/plans/unified-job-runtime/s6-12-package-roundtrip.md. - Four rollback drills against the real 2.7.1 code (audio, generation, model tasks, non-model tasks) pass.
- Real-model samples through DSH
commandcode: 25 samples, 20 completed, 5 failed earlier; the five re-runs after the fixes completed. Completion does not mean every answer is right.
Not verified, or not fixed
- The final 3.0.0 package has not been through that install / rollback / upgrade round trip. The candidate predates the daily-summary UI change, the changelog link change and the two intermittent-defect fixes of this release.
- No clean full local
npm run verifyis recorded. An earlier full local run failed twice on the two intermittent defects fixed in this release; a later one under heavy load timed out on three browser tests that each pass when run alone (CI is the full-suite gate). - The experience channel has not run this for a day, and the policy's real-library, real-model checklist (a question run and top-up, a multi-file audio import with a restart, a scanned book page, the Jobs console at narrow and wide windows) was not completed.
- Known and still open: a 3-card personalised batch can return incomplete JSON from the model; a single-card batch succeeds and is not proof the three-card case is solved.
- Real transcription, Marker/MinerU installation and cloud conversion, and a whole day of real use are unverified.
- All 23 migration switches are off, so by default this release behaves like 2.7.1 plus the fixes above; turning a switch on is opt-in.