Repository navigation
chore(deps-dev): bump wait-on from 9.0.10 to 9.1.0 in /client - #46
Closed
dependabot[bot] wants to merge 524 commits into
Closed
dependabot[bot] wants to merge 524 commits into
dependabot[bot] wants to merge 524 commits into
Conversation
- CL-H1: screen_capture_stop 与 dispose 结算防抖中悬挂的 pendingStartResolve,消除渲染层 invoke 永久挂起(快速开始→停止、帧超时重启链不再卡死) - CL-H2: importTable 每行显式按首行列集合取值(缺失补 null),修复 IndexedDB 迁移行间字段不一致时的列错位静默数据损坏 - CL-H3: db:search LIKE 降级路径统一 LIMIT 20,常见词搜索不再同步全表扫描 + 全量 IPC 传输 - CL-H4: rebuildIndex 改为异步分批执行(每批 500 行 + setImmediate 让出事件循环),数万文档重建不再阻塞主进程窗口/托盘/IPC;同步更新 main.ts 与 migration:complete 调用点 - CL-H5: rateCard 增加 isRating 防重入锁(try/finally 保证异常释放),消除双击/触屏误触导致的同一卡片双调度与重复复习记录 验证: npm run lint (0 errors) + npm run test (875 passed) + npm run build 全部通过
…atchdog上限 - CL-M1: ai:stream:start 的 API 路径白名单校验(仅 /api/v1/(ai|multimodal)/ 前缀,拒绝 ?/# 注入),堵住代理访问任意网关端点 - CL-M2: postJsonStream 读取阶段 30s 无数据超时(原仅覆盖建连)+ 所有退出路径 reader.cancel() 释放连接 + 外部 abort 信号检测 - CL-M3: safeHandleBatched 返回真实结果(最后一次调用结算 Promise),microtask 异常 reject 给调用方而非 unhandledRejection - CL-M4: 屏幕采集缩略图 1920×1080 → 1280×720(extractFrame 目标分辨率),多窗口每帧位图分配降 56% - CL-M5: db:batch 批量操作条数上限 1000,防止单事务长期持有写锁阻塞全部 db IPC - CL-M6: columnCache 失效策略——initialize/close/checkpointAndClose 时 clear,运行期 schema 变更不再过滤新列 - CL-M7: MCP Bridge 子进程最小环境白名单(14 个基础变量),不再透传宿主全部环境变量(供应链凭据泄露面) - CL-M8: displayMedia handler 校验请求 frame 来源(file:// 或 localhost),非应用来源拒绝授权(防静默录屏+系统音频) - CL-M9: dbFileMigrator 复制前检查目标目录已存在 keban.db 则拒绝(防覆盖旧库);备份名加时间戳并保留最近 5 份 - CL-M10: 帧超时 watchdog 连续重启上限 3 次(收到有效帧清零),耗尽后停止并 toast 提示,消除幽灵采集循环 - CL-M11: callWithLocalFallback 本地探测缓存过期时先刷新再决策,不再静默跳过本地推理 验证: npm run lint (0 errors) + npm run test (875 passed) + npm run build 全部通过
- CL-L1: fs:read-file 禁止读取数据库文件(keban.db*)+ 50MB 大小限制 - CL-L2: ai:set-gateway-url 拒绝自定义端口与路径(CSP connect-src 动态放行的攻击面收窄) - CL-L3: backup:save 校验 JSON 内容与 100MB 上限 - CL-L4: 自动更新状态机(idle/checking/available/downloading/downloaded/error)——install 仅 downloaded 态、download 仅 available 态,防止任意时机触发退出安装与并发下载 - CL-L5: chatRepository.getMessages limit 钳制 1-200 - CL-L6: preload 专用监听 API(onWindowClosing/onMaximizedChanged/onSyncBeforeQuit)纳入 ALLOWED_EVENT_CHANNELS 校验 - CL-L7: schema ALTER 区分 duplicate column(幂等成功)与其他错误(记日志且不推进 user_version,保留重试机会) - CL-L8: video_record_stopped 确认事件校验绑定窗口 sender - CL-L9: ai:stream 活跃流在发起窗口销毁时 abort 清理 - CL-L10: uncaughtException 崩溃恢复——DB checkpoint 落盘后 relaunch,不再带病运行 - CL-L11: saveAIConfigAction 网关地址同步失败抛错 + gatewaySyncError 状态可观测 验证: npm run lint (0 errors) + npm run test (875 passed) + npm run build 全部通过
- SYNC-H1: Push 冲突判定收紧为 client version <= server version——相同版本号不同内容的静默覆盖改为返回冲突(双设备并发编辑不再丢数据;幂等重试由 op.ID 去重覆盖) - SYNC-H2: WS sync_request 每连接在飞查询上限 2(信号槽),单连接洪泛不再打满数据库连接池(50)拖垮全部用户 - SYNC-M1: Resolve 增加 FOR UPDATE 行锁 + 版本必须大于服务端版本(拒绝版本回退);成功后广播到其他在线设备(实时收敛) - SYNC-M2: Push 广播条件从 opSeqNoByID 非空改为 accepted 非空——无 ID 操作(fallback ID)落库后同样广播 - SYNC-M3: CRDTPush changeset SHA-256 哈希幂等去重((user_id, changeset_hash) 唯一索引 + 并发兜底),网络重试不再重复落库膨胀 - SYNC-L2: Pull/CRDTPull 的 deviceId 白名单校验(防回环与超长参数) 验证: go build + go vet + go test 全部通过
- ALG-H1: FSRS S0(G) 从 FSRS-4 硬编码常量 [0.4,0.6,2.4,9.0] 改为权重 w[0..3](fsrs-rs 官方语义 S0(G)=w[G-1]);修正误导注释(权重为项目自定义非官方默认、w[6] 为保留位不参与 difficulty 更新、D0 为固定表近似并标注官方公式);同步更新测试断言 - ALG-M1: sm2 easeFactor 缺失/NaN/0 防御(回退 2.5),消除 NaN interval → Invalid Date 无限传播 - ALG-M2: rateCard 中 updateCard 改为 await + try/catch——异步写失败不再 unhandled rejection;review 已落库时继续推进 UI(内存态最新,DB 旧值下次复习覆盖,不丢数据不重复调度) - ALG-L1: SM-2 历史 interval 反推 stability 的近似性注释说明 - ALG-L2: goldenErrorMultiplier 历史遗留接口注释(实际由 store 层 compressForGoldenError 后处理生效) 验证: lint 0 errors + 875 tests passed + build 成功(FSRS/SM2 44 项算法测试全通过)
- WEB-L1: DownloadCta 版本信息 fetch 增加 5s 超时 + 单次重试;加载中显示加载提示,源站不可达时明确回退 GitHub Release(原实现 DNS 挂起时按钮一直显示兜底值,无法区分加载中与故障)
- SYNC2-H3: pause() 不再置 syncInProgress(该锁由 sync finally 释放),resume 等待加 15s 超时兜底——存储路径切换等流程不再永久挂起 - SYNC2-H1: resolve 成功后 markEntityLogsSynced 清理该实体全部未同步日志——配合服务端版本语义收紧(<=冲突),消除 resolve 后旧日志永久循环冲突 - SYNC2-H2: 冲突对象 localData 携带真实本地数据(最后一条 payload 日志,纯 delete 回退读业务表),localVersion 取最后一条日志版本——修复保留本地提交空对象清空实体数据 - SYNC2-H4: operationLog.synced 写入数值 0/1 与查询 equals(0/1) 类型一致,修复 oplog push 链路静默失效与模式切换丢数据;类型同步改为 0|1 验证: lint 0 errors + 875 tests passed
- SYNC2-L1: oplog pull cursor advances only to last successfully applied version, preventing permanent skip of failed operations - SYNC2-L2: autoSync no longer counts lock/offline states as failures, avoiding spurious exponential backoff after network recovery - SYNC2-L3: getPendingCRDTChanges supports per-table filtering, fixing push starvation when multiple tables have pending changes - SYNC2-L4: offline queue max version read by version instead of createdAt to avoid duplicate versions within the same millisecond - SYNC2-L5: reset per-table CRDT in-memory doc on persistence failure, preventing baseline drift and MissingDependencyError
- #1: JWT algorithm now injected via SUPABASE_JWT_ALGORITHM (default HS256, aligned with Supabase default signing); placeholder detection prevents 'configured' false impression causing whole-site 401 - #2: remove double rollback on streaming rate-limit overrun - the Lua script already atomically DECRs, manual rollback let users drain their own quotas into negative counts - #3: error_pattern chain/router defensive validation - missing fields from LLM JSON output filtered instead of 500 (ValidationError) - #4: GLM generate_vision returns actual clamped max_tokens; vision chain logs truncation warning when output approaches the limit
- #5: Gemini generate_stream iteration moved into thread pool via asyncio.to_thread, unblocking the event loop during streaming - #6: providers return real input/output token split; fallback cost tracking prefers it and falls back to 60/40 estimate instead of the misleading 50/50 split (output priced 2-3x higher) - #7: balance queries use Key pool primary key (plural env vars), DeepSeek balance no longer silently skipped - #8: JWKS fetch distinguishes network failures (stale cache reuse with 60s retry backoff) from HTTP/key errors (fail-closed), preventing whole-site 401 on transient Supabase hiccups - #9: import_concept registered in TIMEOUT_CONFIG/RATE_LIMITS plus startup validation warning for unregistered features - #10: error_pattern cache key includes user_id and hashes full content, preventing cross-user result reuse
- #11: vision confidence redefined as structured-extraction completeness (text 0.5 + aux fields 0.5) instead of fabricated 0.9/0.3; GLM ASR fabricated 0.9 fixed to 0.0 placeholder - #12: fallback chain budget comments unified to *3.0 matching implementation (was *1.5, misleading maintainers) - #13: key rotation moved to with_retry_and_timeout wrapper so vision/stream/ASR/video paths rotate keys too, not just generate - #14: JWT_SECRET marked as dead config in .env/.env.example with SUPABASE_JWT_ALGORITHM documented; startup warning when legacy JWT_SECRET is set but SUPABASE_JWT_SECRET is empty
- M1: feynman setExplanation no longer auto-advances step (double advance skipped step2 view); progression owned by advanceStep - M2: pomodoro wall-clock calibration completion branch now plays sounds and sends notifications like the normal path - M3: coral streak/check-in/progress use local dates consistently (UTC+8 midnight planting was counted as previous day) - M4: plantCoral re-reads DB before set, no longer overwrites concurrent plant with stale snapshot - M5: CryptoManager init failure now explicit (hasInitFailed, throws); device key material encrypted via Electron safeStorage IPC (previously plaintext in localStorage); fix missing logger import in SyncEngine (phase 1 regression) - M6: useAudioPlayer.play clears running fadeOut interval - M7: convertWeakPointsToFlashcards batches card creation before marking mastered, avoiding duplicate cards on retry - M8: useVoiceInput serializes stop/start (pending flag + re-check), old stop can no longer kill a newly started capture
- ELEC2-M1: MCP manager init failure resets initialized flag and retries with exponential backoff (1s-30s, max 8 attempts) - the stale flag previously disabled MCP silently for the whole run - ELEC2-L1: window recreation (macOS activate) resets sync-before-quit state machine - stale requested=true + completed=false made the new window impossible to close - ELEC2-L2: audio capture runtime degradation re-checks capturing before restarting the provider, eliminating ghost capture when stop() races with degradeToEndpoint
High:
- OfflineQueue: orderBy('version') on non-indexed field throws Dexie
SchemaError, breaking offline enqueue (regression from SYNC2-L4);
switched to sortBy in-memory (enqueue/getPendingItems/getReadyItems)
- auth.py JWKS: network-failure branch now bounded by stale-grace
window (was unbounded stale reuse); in-lock retry_after reuse
added; 5xx treated as transient (stale reuse) vs 4xx fail-closed
Medium:
- error_pattern: cache-hit path now validates/filters like first-run
(was bypassing validation -> 500); cache stores cleaned data;
negative count/empty keywords filtered
- Key rotation: removed per-provider generate rotate (double rotation
with wrapper made even-key pools never use the 2nd key)
- writeWithLog: resetTable failure no longer propagates to block the
main write path
- SyncEngine: finally clears syncInProgress unconditionally (pause
during in-flight sync left the lock, resume waited 15s timeout)
- feynmanStepSlice: catch path now syncs zustand store so retry does
not duplicate cards for already-created weak points
- windowManager: window recreation clears syncTimeoutTimer (stale
timer would app.quit() the rebuilt window)
- rate_limit: global-limit overrun now rolls back the feature counter
(Lua only rolls back the exceeded layer)
Low:
- markEntityLogsSynced matches synced !== 1 (legacy boolean/undefined)
- parseLocalDate validates format; daysBetween NaN -> Infinity
- ecosystem initialize uses local date; restore() re-reads DB
- worldState streak diff uses Math.round tolerance
- useVoiceInput start timeout surfaces error message
- Gemini stream uses provider thread pool (not default executor)
- qwen_vision returns max_tokens for truncation detection
- jwt_algorithm normalized strip().upper()
- X1: CryptoManager.init now wired to auth lifecycle (login derives device key via safeStorage, logout clears; init failure surfaces explicit warning toast instead of silent plaintext); mcpManager gains shuttingDown flag - no retry scheduling after shutdown and retryAttempts reset for dev hot-reload - X2: electron.d.ts duplicate Window.electronAPI declaration removed (env.d.ts is the single authoritative superset; conflicting signatures were masked by skipLibCheck) - X4: Gemini vision/multi/video return real input/output token split for cost tracking; DeepSeek input tokens use cache-miss portion (cache-hit billed at 1/4 price, previously overestimated) - X5: error_pattern cache key uses only fields the chain consumes (first 20 correctAnswer/userAnswer, no flashcardId) - improves hit rate without correctness impact - X6: feature-config startup validation extracted to shared function and applied to streaming registry (was middleware-only, streaming misconfigs silently fell back to 300s timeout / default limits)
- 收入方案设计:docs/product/temporary-revenue-implementation.md - 数据库层:schema.ts 新增 beta_profile/licenses/invite_codes 三表,SCHEMA_VERSION=10 - 类型系统:client/src/types/beta.ts — UserTier/TIER_RANK/TIER_PERKS 权益矩阵 - 状态管理:betaStore.ts — Zustand persist 持久化 tier/激活码/邀请码 - UI组件:BetaProfile(身份卡片)、InviteCodeSection(邀请码管理)、 LicenseActivation(激活码输入+服务端验证)、UpgradePrompt(非阻断升级引导) - 权限Hook:useTierAccess(tier-based 功能访问控制)、useBetaProfile(metadata加载) - SettingsPage 集成:ProfileSettings 后插入 BetaProfile 区域 - AI网关集成:rate_limit.py TIER_LIMITS 分级配额 + providers.py TIER_MODEL_ACCESS 分级路由 - 新增路由:routers/license.py(激活码验证) + routers/beta.py(邀请码API) - 管理工具:scripts/license-gen.mjs(激活码离线生成,支持 PRO/LIFE/SND1/THM1) - 代码审查修复:修复 recalcEffectiveTier 排序、激活码大小写、tier 参数传递、 服务端验证缺失、v10迁移、邀请码数量逻辑、cohort 类型转换、import re 延迟导入等30个问题 - 路由注册:main.py 和 __init__.py 注册 license_router 和 beta_router
…Classifier 进程名兜底)
- 预置 ~/.bubblewrap/config.json(jdkPath/androidSdkPath),消除全新 runner 上 JDK 安装交互提示导致的 exit 130(v0.38~v0.40 build-apk 连续失败根因) - 删除语义错误的 bubblewrap update(--manifest 应指向本地 twa-manifest.json 而非 web manifest URL);工程已入库,直接 build 即可 - build 密码改经 BUBBLEWRAP_KEYSTORE_PASSWORD/BUBBLEWRAP_KEY_PASSWORD 环境变量传入(CLI 无密码参数,原 --keystorePass 等被静默忽略) - 签名参数改用 --signingKeyPath/--signingKeyAlias(原 --keystorePath 无效, 会落到 twa-manifest.json 中的 Windows 本地路径) - 防御:SDK tools/bin 占位 + build-tools 36.1.0 缺失时显式预装 - keystore secret 缺失时 exit 1 显式失败;GitHub Release 上传仅 tag 触发时执行 已在本地完成全链路构建验证(gradle assembleRelease + zipalign + apksigner, 产出 2.6MB 签名 APK 验证通过)
Bumps [wait-on](https://github.com/jeffbski/wait-on) from 9.0.10 to 9.1.0. - [Release notes](https://github.com/jeffbski/wait-on/releases) - [Commits](jeffbski/wait-on@v9.0.10...v9.1.0) --- updated-dependencies: - dependency-name: wait-on dependency-version: 9.1.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Author
|
OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting If you change your mind, just re-open this PR and I'll resolve any conflicts on it. |
dependabot
Bot
deleted the
dependabot/npm_and_yarn/client/wait-on-9.1.0
branch
August 21, 2026 03:19
Aparencia
added a commit
that referenced
this pull request
Sep 13, 2026
依据 = 计划 Task 21 卡 Step 1–5 + §C6.3(六件)+ §C9.10(逐字对照)+ §C4.3 / §C11.1 / §C11.4 / §C7.3 / §C9.1 / §C16.2。 形态 = **原文 + 就地加注**(保留历史原文,只加注)⇒ 本提交 **+24 行 / −0 行**,**没有任何 `-` 行**(V2 判据)。 【逐字对照:改了哪几行 / 原文是什么(改前原文逐字 = 改后仍逐字在文件里)】 1. §10 批 7 行(`:722` 时点锚 ⇒ 现 775)—— 原文(保留): 「…**`structuredBlocks` 整模块存废**(批 1 控制方裁决:接线…**或**删除…二选一,**批 1 未决前不得删**) | **标签能写进去**;**档位选完真生效**;**`structuredBlocks` 已作出接线或删除的明确裁决**」 加注(新):批 7 收口就地加注 = 逐导出裁决(第三条路)明文授权(① `escapeHtml` 只摘 `:11` import + `:13` 再导出 · ② `renderLatex`/`renderMarkdownTable` 删 · ③ `lowConfidenceClass` 留 + 加宽 ≥2)+ 另三处实测落位(12 条补 UI 实做 10 条 · registry 净值 311 · 撤下 3 条保留函数体的形态)。 2. §11-7(`:824` 时点锚 ⇒ 现批 1 进度注)—— 原文(保留): 「…删除后复算 = registry 312 / 前端零引用 **25** 条(= 47 − 22,逐条与上列归属一致)。」 加注(新):批 7 收口注 = registry **313 → 311** · 前端零引用 **24 → 11**(实测;口径与仪器、正控 68 / 负控 0 一并给出)+ 差额分解(−10 补 UI + −3 撤下)+ 新命令 `remember_video_profile_tier` PROD 2 不计入 + 残留 `update_fragment_group` 仍零引用。 3. §12「3 套 markdown 渲染器归一」行 + 批 5 加注之后(`:864` / `:870-875` 时点锚)—— 原文(保留):批 5 加注整块,含『`structuredBlocks.ts`(第 5 套、**无生产消费者**)』。 加注(新):批 7 去向终态 = 已完成归一(`utils/markdownLine.ts` 100 行 · `ChatMessageMarkdown` 并入后删除 · 站点 2 → 1 / 插件站点 8 → 4 · 终态 2 套活)+ 🔴 逐字句「**归一 = 逻辑归一;观感统一未做,归批 8**」+ 🔴 **补登规格加注漏点**:第 4 套活渲染器 `components/NotePreviewView.tsx:40 renderMarkdown`(开工 346 行 / 终态 364 行;T16 `6509e04c` 已补表征测试)+ 残余(两处页内 seek 未接 ⇒ 批 8)。 4. §9 表内三处状态更正(#14 `kb_search` / #30 `video_profile_spec_by_kind` / #46 `update_fragment_group`;锚在表末 #47 行之后,**以免块引用把 47 行表格截断**)—— 原文(保留):三行表体原文一字未改。 加注(新):#14「补 UI(本批)」批 3 Task 12 已交付(`b567f0e6`,T21 实测 PROD 1)· #30 **角色变更登记**(并行真源 → 离线降级路径;两张映射仍在、仍有生产调用点)· #46 记录同步批 1 已做,**但 T21 实测「接线」那一半未做**(全 `app/src/**` 含测试 0 命中,仍在 registry)⇒ 登记批 8 输入。 5. §9「删除的通用影响面」(`:694` 时点锚 ⇒ 现「**删除的通用影响面**:仅 `lib.rs` 的 `generate_handler!`…」)—— 原文(保留):整句。 加注(新):就地更正 = 注册清单已搬到 `app/src-tauri/src/app_commands.rs`(批 0-C3),`lib.rs` 已无 `generate_handler!`;T21 实测该文件含 311 条目 ⇒ 原判断(影响面 = 注册清单一处)成立,只是换了文件。 【门禁读数(串行,工作树)】 - `node scripts/docs-check.mjs` ⇒ exit 0 ·「扫描 281 个 Markdown 文件(检查 181 个)」五项全 ✅(与批 7 工作树基线 281/181 逐字一致;本提交**未新增/删除 `.md`** ⇒ 扫描数不变) - `node scripts/line-limits.mjs --full` ⇒ exit 0 ·「>600 硬限 0(棘轮内)· 301–600 档 121 · 登记条目 121」(`docs/**` 不在行数门禁域) - `git diff --numstat -- <规格>` ⇒ **24 / 0**;`git diff` 的 `^-` 行数 = **0**(V2) - 规格行数(`countLines()` 口径):**998 → 1022** 【诚实边界】 - 批 7 的**完整逐字对照表**另见 `task-21-report.md`(gitignored);本提交的 durable 形态 = 「原文保留在文件里 + 加注」⇒ 对照可复算。 - 三处 §9 注**放在表格之后**(而非各自行后):块引用会**截断 Markdown 表格**,而后 17 行原文一字不许改 ⇒ 只能整表之后就地注;注文逐条点名所属行号。 - `update_fragment_group` 的「接线那一半」**未做**是**实测发现**(不是卡里的预期),已逐字登记;**不得**读成「本批 12 条补 UI 已全部接线」。
Aparencia
added a commit
that referenced
this pull request
Sep 13, 2026
依据 = 计划 Task 21 卡 Step 6(**同七段结构** + ①–⑨ 九项必含)+ §C9.10(读数同批给出)+ §C11.1 / §C11.4 / §C11.7 / §C11.8 / §C7.3 / §C54.3 / §C54.5 / §C54.6 形态 = **纯追加**(既有条目一字未改;本节插在「批 6」节与「批 0 其余部分」节之间)⇒ 本提交 **+150 行 / −0 行**。 【逐字对照:改了哪几行 / 原文是什么】 - **改前(保留,一字未动)**:… 批 6 节末尾 `> 🔻 T36 的归组对拍(…)…` 之后紧接 `### 批 0 其余部分(未落地)`。 - **改后**:同一位置 = `---` + `### 批 7 · 未接线落地(2026-09-13,`681e73c6^..` 至全批收口提交,**T21 落库时实测 59 个提交**)` 整节 + `---` + **原文的 `### 批 0 其余部分(未落地)` 与其正文逐字保留**。 - 🔴 首版实施中我误删了 `### 批 0 其余部分(未落地)` 标题行,**当场发现并逐字恢复**(`git diff` 复核:该节 11 个 `###` 标题在提交前与 HEAD 逐一对应)。 【七段结构(V5 探针 7/7 HIT)】交付 / 验收(三条验收兑现度表 + T21 落库时八闸读数)/ 规格漂移纠正 / 过程中纠正的计划错误(**第 1–12 例**逐条带出处与落位)/ 诚实代价 / 未做(登记,逐条带归属批次)/ 提交清单(59 个,按任务归组)。 【卡 Step 6 的 ①–⑨ 九项必含(探针 20/20 HIT)】 ① `structuredBlocks` 逐导出裁决 + **用例净 −7 的说明(8 删 − 1 迁 = 非 LOST)** ② `[[ts:ms]]` 残余**以实测为准**(两条串渲染链 + React 链芯片**均已可点** ⇒ §C10.2 期望成立;残余 = 两处**页内 seek**)③ `docs/tech-debt/` 归因(**是用户所有的决定**;`docs-check` 的 1 个差逐字归因到它)④ **音频两条 = 待产品裁决** ⑤ 未做清单(R4.1 的 5 个粘滞字段形态 / 带证据三轨的实现 / 审校模式的实现)⑥ 🔴 逐字「**归一 = 逻辑归一;观感统一未做,归批 8**」⑦ 🔴 读端角色变更(「并行真源」→「离线降级路径」)⑧ 🔴 散文对拍探针登记为「**批 8 的候选闸**」⑨ 🔴 `get_decision` 的 H7 结果(只做详情面那一片;**其余 5 项逐字登记批 8 输入**;只写「H7」+ 必要片段,未整段搬运)。 【T21 附加登记(台账指派,卡未逐条列)】 - 🔴 **§11-8「段① 的『落库』」口径逐字**:「段① 的『落库』= **会话生效态 + 记忆体**,非 `sessions` 表落列」(§C44.2 / §C45.1;供 T22 照抄) - 🔴 **§11-8「跨会话记住」全路径成立**:原 `source_window == None` 路径**必读不回**(§C51.4 的 Important I1),**已由 T19 的 `17d33095` 修复**(`memory_key_for_start` + 往返判据 + 负控)⇒ 验收表写「**全路径成立**」 - 🔴 **10 个贴边件清单**(T21 逐条 `countLines()` 实测 **10/10 与台账一致**)+ 「**任何后续编辑必须先拆件**」+ **就地更正一处台账路径错**:`NotesReadingColumn.tsx` 实为 `app/src/components/notes/`(§C49.5① 与派发语写的 `views/note/` 不存在) - 🔴 **D 的六条展示面是「设计决定」而非裁决**(§C54.6 逐字)⇒ **不得**写成「按规格实现」 - 🔴 **C7「重启后卡录制」覆盖面未覆盖**(触发口径偏离:该命令无心跳字段)⇒ 登记批 8 - 🔴 **计划勘误第 1–12 例**逐条落账(第 7–11 例 T12 已落;第 1–6 与第 12 例由 T21 落;与「控制方第 N 例」是两条序列,已注明勿混) - 🔴 **10 条技术债/批 8 输入**:`pr-check.yml` paths-filter 缺口 + 懒侧守卫三处无执行者 · 散文探针候选闸 · `@types/katex` 待查 · Rust `trim()` vs 前端 `parseTags` 不一致 · 新件 `position:"fixed"` 潜在陷阱 · `Surface` registry 对 legacy 无合法新增路径(余 2 处转批 8)· `commands_video.rs` 末尾换行门禁盲区 · 「subject ≤50」无机器判据 · 两处页内 seek · 音频两条(产品裁决) - 🔴 **懒侧余量薄两句**(§C47.3 逐字)+ **红点集合「成员会随运行漂移」**(不得简化成「只有 W1/A4」)+ **`node_modules` 事故**(§C23.5)+ **`fa45caf1`/`f7ac5d0f` 两树 (e) 不自洽**(§C16.2) 【门禁读数(串行,工作树;🔴 不是全批终态 —— 终态由 T22 出)】 - `node scripts/docs-check.mjs` ⇒ **exit 0** ·「扫描 **281** 个 Markdown 文件(检查 **181** 个)」五项全 ✅(**未新增/删除 `.md`** ⇒ 与批 7 工作树基线 281/181 逐字一致) - `node scripts/line-limits.mjs --full` ⇒ **exit 0** ·「>600 硬限 **0**(棘轮内)· 301–600 档 **121** · 登记条目 **121**」 - `node scripts/check-command-registry.mjs` ⇒ **exit 0** ·「✅ 命令注册一致:定义 **311** / 注册 **311** / 重复 **0**」 - `git diff --numstat -- docs/versions/v0.22.md` ⇒ **150 / 0**;`git diff` 的 `^-` 行数 = **0** - 🔴 **其余五闸(`tsc` / vitest / `bundle-budget` / `bundle-eager-graph` / `cargo`)本节不重跑** —— T21 的写集只有 `docs/**`,对它们零影响;引用 T12/T20 的读数一律标明来源与树。 【诚实边界】 - 本节**不是全批收口**:**未重跑五闸**、**未出验收终态**、**提交数「59」只在本节的规格提交 `f0f2998c` 上成立**(此后任何单元落库都会改变它)⇒ **全批终态一律以 T22 为准**。 - 凡**未由 T21 亲测**的数字逐字标「引自 §Cxx / Txx 报告,未独立复核」;T21 亲测项 = registry 311/311/0 · 两个门禁读数 · 10 个贴边件行数 · §9 前端零引用 11 条 · `update_fragment_group` 0 命中 · `video_profile_for_spec` / `KIND_TO_FORM` / `KIND_TO_TIER` 调用点 · 若干文件行数。 - 🔴 **`update_fragment_group`(#46) 的「接线」那一半未做**是 T21 的**实测发现**(卡 Step 4 的注文隐含它已做)⇒ 已同时回写规格 §9 该行 + 本节,并登记批 8。
Aparencia
added a commit
that referenced
this pull request
Sep 13, 2026
依据 = `rulings.md` **§C56.2**(裁决:这是批 7 的**交付缺口**,不是「批 8 输入」)+ **§C56.1**(规格 `:738` 处置栏逐字「补 UI(本批)」;计划 `:532`/`:2299`/`:2309` 三处指派一致)+ **§C57.1/§C57.5**(T23 交付 + 返工已逐项复核)。 形态 = **原文 + 就地加注**(上一轮的实测发现**逐字保留**、处置以加注**作废**)⇒ 本提交 **+8 行 / −0 行**。 【逐字对照:改了哪几行 / 原文是什么】 - **位点 1 = 规格 §9 表末 #46 行的状态更正注(`:745`)** · **原文(保留,一字未动)**:「…**批 7 只做"接线"那一半**(命令本身的生产调用点)。🔴 **但 T21 实测推翻了后半句的兑现**:…⇒ **「接线」那一半在本批未做**。**处置**:与 §C9.1 的裁决不冲突…⇒ **逐字登记为批 8 输入**,**不得**读成「本批 12 条补 UI 已全部接线」。」 · **加注(新增)**:「🔻 **收口更正(2026-09-13 · T21 追加轮;上一注的实测发现保留、处置作废)**」= 该「→ 批 8」处置**作废**(引 §C56.2 逐字)+ 规格处置栏与计划三处指派的逐字依据 + T23 三条 sha 与交付物 + **T21 独立复测 PROD 0 → 1**(落点 `FragmentGroupAction.tsx:92` 逐字载荷)+ 落点形态(`:71`/`:72` 的 feed 双道收口 · `{ fragmentId, groupId }` 的 camelCase 依据 `commands_fragments.rs:141-145` · `groupId: null` = 移出组)+ 判据 V7/V8/V9 + 🔴 **缺口成因**(计划口径正确且预警过;T20 的「6+4=10」吞掉第 11 个名字)。 - **位点 2 = 规格 §11-7 的批 7 收口注第 4 条(`:908`)** · **原文(保留,一字未动)**:「🔴 **残留 1 条挂着「补 UI(本批)」却仍零引用**:`update_fragment_group`(#46) 全 `app/src/**`(**含测试**)命中 **0 文件 / 0 处**…⇒ **登记为批 8 输入**,并见 §9 该行的状态更正注。」 · **加注(新增)**:「🔻 **收口更正(2026-09-13 · T21 追加轮;上面三条原读数一律保留为「T21 首轮」的历史读数)**」= 🔴 **残留 1 条 → 0 条** · 🔴 **前端零引用 11 → 10**(口径不变)· **有引用数 11 → 12**(本批实做补 UI = **11 条** = T20 的 6 + T23 的 1 + T18/T19 的 4)· 处置改为「已交付」。 【T21 追加轮实测(自跑,非转述)】 - `update_fragment_group` 前端命中:**PROD `app/src/components/FragmentGroupAction.tsx`(4)** · TEST `FeedFragmentList.test.tsx`(9) · `batch7UiWiring.test.tsx`(2);正控 `invoke(` **68** 个生产文件 · 负控 **0**。 - T23 三条提交的 `--numstat` 与 parent 链:`125eec85`(4 路径,parent `d0ada786`)→ `5f662811`(1 路径,parent `125eec85`)→ `5d59e332`(3 路径,parent `5f662811`);逐条 `git show --name-only -1` = 只列自己的路径。 - 行数(`countLines()`):`FeedFragmentList.tsx` **299** · `FragmentGroupAction.tsx` **155** · `FeedFragmentList.test.tsx` **299** · `batch7UiWiring.test.tsx` **218**。 【门禁读数(串行,工作树;与上一轮逐条对账)】 - `node scripts/docs-check.mjs` ⇒ **exit 0** ·「扫描 **281** 个 Markdown 文件(检查 **181** 个)」⇒ **与上游基线 281/181 逐字一致**(本提交未新增/删除 `.md`,且**未改**非本文档) - `node scripts/line-limits.mjs --full` ⇒ **exit 0** ·「>600 硬限 **0** · 301–600 档 **121** · 登记条目 **121**」⇒ **与上游逐字一致** - `node scripts/check-command-registry.mjs` ⇒ **exit 0** ·「定义 **311** / 注册 **311** / 重复 **0**」⇒ **与上游逐字一致**(T23 未新增命令) - `git diff --numstat -- <规格>` ⇒ **8 / 0**;`git diff` 的 `^-` 行数 = **0**(V2 继续成立) - 🔴 **结构自证**:本文件的 `#`–`####` 标题逐条对拍 = **HEAD 51 / 工作树 51 / 差异 0 处**(§C55.2 / §C56.4 的纪律 —— 「不改历史原文」不能只看 numstat 删除列) - 规格行数:**1022 → 1030** 【诚实边界】 - 🔴 **「删掉『登记为批 8 输入』的处置」按「就地作废」而非字面删行实现** —— 因为本轮**同时**被要求「规格 diff 仍必须只有 `+` 行、`−` 列为 0」(V2 继续有效)。字面删行会与该硬判据直接冲突 ⇒ 处置用加注**显式作废**(原文可读、结论唯一)。**如需字面删除,请明示——那会同时作废 V2。** - §C57.2 的**控制方派单缺陷**(`container` vs `feed` 地形)与三条新事实的落账**不在本提交**:本提交只改规格,`v0.22` 与 `docs/standards/**` 在后续两条提交里。
Aparencia
added a commit
that referenced
this pull request
Sep 13, 2026
依据 = `rulings.md` **§C56.2**(#46 处置作废 + 已交付)+ **§C56.3**(计划勘误第 13 例)+ **§C55.3**(贴边件清单「不是 10 条」的裁决与「全树扫描为唯一来源」)+ **§C57.2**(控制方派单缺陷的纪律)+ **§C57.4④**(实做数收口为 11)。 形态 = **原文 + 就地加注 / 追加**(本节的每一处旧文本都逐字保留,更正一律以「🔻 收口更正 / 补登」加注)⇒ 本提交 **+26 行 / −0 行**。 【逐字对照:改了哪几处 / 原文是什么】(行号为改动前的工作树行号) 1. **`:764`「补 UI 实做 10 条」** —— 原文(保留):「- **补 UI 实做 10 条**(§C9.1 逐字名单):… 判据件 `batch7UiWiring.test.tsx` **216 行**)。」 加注:**实做面收口为 11 条**;口径 = §C9.1 的「10」是计数口径、逐个列名 **11 个**(计划 `:2304` 自陈 + `:2305` 裁决「列全 11 个,不删任何一个」);**11 条逐名** + 第 11 条由 T23 交付(三条 sha + PROD 0→1);**规格 §10 的「12」仍不改**(差额 = `kb_search`,批 3 已交付);并更正 `batch7UiWiring.test.tsx` 的 **216 → 218 行**(T21 实测)。 2. **`:789-794` 规格漂移纠正表**(表后加注,**表格本体一字未动**)—— 原文(保留):三行分别写「实做 10 条」·「前端零引用 **24 → 11** … 残留 `update_fragment_group`」·「`#46`(… **T21 实测「接线」那一半未做**)」。 加注:① 实做 **10 → 11**;② 零引用 **11 → 10**、有引用 **11 → 12**、**残留 1 → 0**;③ `#46` **已由 T23 于本批补做**(原读数保留为过程记录,处置由「批 8 输入」改为「已交付」)。 3. **`:815-831` 贴边件清单(10 条表)** —— 原文(保留):10 行表 + 两条已有的 `>` 注。 加注:🔴 **范围声明**(该表 = **本批触碰过的件**,**不是全树**;**一律不得作为判据输入**)+ 🔴 **全树机器扫描读数**(**T21 追加轮自跑**:共 **579** 文件 · **≥300 = 35** · **295–299 = 21** · 合计 **56**)+ **对上游(§C55.3 的 578 / 35 / 20 / 55)的差额逐条归因**(新件 `FragmentGroupAction.tsx` ⇒ 文件数 +1;`FeedFragmentList.test.tsx` 297 → **299** ⇒ 295–299 档 +1;**≥300 档不变**)+ 🔴 **逐字纪律**「**手列清单一律不得作为判据输入;以全树脚本扫描为唯一来源**」+ 手列清单漏掉的两个恰 300/300 件 + T22 的两张表要求。 4. **`:848` 未做清单的 `#46 → 批 8` 行** —— 原文(保留):「- 🔴 **`update_fragment_group`(#46) 的「接线」那一半**(T21 实测前端命中 0)→ **批 8**。」 加注:**本行从「未做」清单撤回、移入「交付」**;并**逐字登记本条完整来历**(① 计划侧正确且预警过 → ② T20 计数口径吞掉第 11 个名字 → ③ **由 T21 的仪器发现** → ④ 控制方 §C56.2 判为批 7 交付缺口 → ⑤ T23 补做(含一次 T23 自己质疑、控制方改判的 **feed 地形返工**)→ ⑥ T21 追加轮更正)。 5. **`:810` 计划勘误段末(第 1–12 例)** —— 原文(保留):整段①②…⑫与出处行。 加注:🔻 **补登计划方第 13 例**(§C56.3)= 计划 `:2299`/`:532` 写 `{ id, groupId }`,Rust 真身 `commands_fragments.rs:141-145` 是 `fragment_id`/`group_id` ⇒ Tauri 2 camelCase ⇒ **JS 必须是 `{ fragmentId, groupId }`**(实际落库 `FragmentGroupAction.tsx:92`);教训「计划里凡 IPC 载荷键名都须用既有同族调用点对拍」;并注明**本段标题的「12」按本注读作 13 例**。 6. **同上(新开一块,单独标注序列)** —— 🔻 **另登记一条「控制方序列」的教训**(§C57.2;**控制方派单类错误在本批的第 14 例**):派单措辞「复用同文件既有形态」把 `promote_fragment_to_note`(**笔记去向 = container**)的先例误用为 `update_fragment_group`(**碎片归组 = feed**)的先例 ⇒ 由 T23 质疑、控制方取证后改判;🔴 **纪律逐字**:「复用同文件既有形态」**必须附带「该形态服务于哪个流程」**——**同一文件里的两个流程可以有不同的语义前提**;并**逐字标明它属控制方序列、不得写成「计划方第 14 例」**。 【T21 追加轮自跑读数(非转述)】 - 全树扫描:**579 文件 / ≥300 = 35 / 295–299 = 21 / 合计 56**(口径 `countLines()`,域 `app/src/**/*.{ts,tsx}`;文件逐条已存 `tmp/t21/probe-t21b.mjs` 输出)。 - T23 三条提交:`125eec85`(4 路径,parent `d0ada786`)· `5f662811`(1 路径,parent `125eec85`)· `5d59e332`(3 路径,parent `5f662811`);行数 `FeedFragmentList.tsx` **299** · `FragmentGroupAction.tsx` **155** · `FeedFragmentList.test.tsx` **299** · `batch7UiWiring.test.tsx` **218**。 【门禁读数(串行,工作树;与上游逐条对账)】 - `docs-check` ⇒ **exit 0** ·「扫描 **281** / 检查 **181**」⇒ 与上游 **281/181 逐字一致** - `line-limits --full` ⇒ **exit 0** ·「>600 硬限 **0** · 301–600 档 **121** · 登记条目 **121**」⇒ 与上游**逐字一致** - `check-command-registry` ⇒ **exit 0** ·「定义 **311** / 注册 **311** / 重复 **0**」⇒ 与上游**逐字一致** - `git diff --numstat -- v0.22` ⇒ **26 / 0**;`^-` 行数 = **0** - 🔴 **结构自证**:本文件 `#`–`####` 标题逐条对拍 = **HEAD 20 / 工作树 20 / 差异 0 处**;v0.22 行数 **958 → 984** 【诚实边界】 - 🔴 **「从『未做』清单移除」按「就地在原行下追加撤回声明」实现**,**未字面删行** —— 与规格侧同一理由:本批的**「原文 + 就地加注」体例**(本轮硬要求重申)优先于字面删除;撤回转义由「🔻 收口更正」**显式且唯一**。 - 全树扫描的**域不含 `scripts/**` 与 `.css`**(与 `line-limits.mjs` 的 `SOURCE_EXT` 一致)⇒ 该两个数**只在 `app/src/**/*.{ts,tsx}` 域内成立**;`scripts/check-bundle-budget.mjs`(300/300)**不在该域**,它只出现在上游的手列清单里。 - 计划勘误**第 13 例的键名更正**由控制方 §C56.3 登记;T21 只**落账**并核了 Rust 真身与前端实际载荷(`commands_fragments.rs:141-145` / `FragmentGroupAction.tsx:92`),**未**回溯计划文件(计划文件属 E1 写集)。
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.
Bumps wait-on from 9.0.10 to 9.1.0.
Release notes
Sourced from wait-on's releases.
Commits
30ec1419.1.0d8f61c0Merge pull request #220 from jeffbski/deps-2026-07-21aae2fceupdate minor depsDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)