| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
refactor(api): enforce the interceptor's throw contract in the type system, and fix copy-count failure semantics handleApiError is annotated `: never`. The response interceptor only produces a rejection because this function always throws, but its signature was (error) => void — the type system had no idea that failure is propagated by throwing rather than by returning. With `: never`, tsc rejects any reachable end point: a stray `if (!error?.response) return;` — the shape that silently resolves undefined into every caller on timeouts and DNS failures — no longer compiles, and every refactor inherits the guarantee. fetchAllCopyCounts returned {} on failure. {} is truthy, so callers could not tell "the backend is down" from "nobody has copied these", and copy counts are display data: rendered as 0 they are a wrong number rather than an error. It now follows the existing pattern in myspace.ts — return the cached copy when there is one, throw when there is not. The truthy check also became an explicit emptiness check, because an empty server response reduces to {} and would otherwise be treated as a valid cache entry and never refreshed. The function has no call sites yet; the doc comment says so, so nobody builds on the assumption that it cannot throw. | 14 天前 | |
fix(i18n): unify AI Short and polish native localizations across all 17 locales | 28 天前 | |
perf(render): keep array and object identity stable so unrelated updates stop re-rendering whole lists Three instances of the same mistake: writing a fresh reference where the previous value would do, which defeats every React.memo boundary below it. useSpaceItems — the effect depends on the whole userAuth, so a single favorite re-runs it. That favorite also rewrites the item's updatedAt, so the "identical, skip" branch can never match and setSpaceItems unconditionally rebuilt the array from scratch. Every entry is a new object literal, so SpaceItemRow's memo fails for all N rows, not just the one that changed. The existing isSilentRefresh flag suppressed the skeleton but not the rebuild. Now the array reference is only replaced when an entry actually differs. That guard also needed item.tags || [] replaced with a shared frozen empty array: with no tags that expression allocates a new [] every time, which would make the reference comparison always fail and the guard a no-op. SearchBar — the unfiltered branch wrote [] unconditionally. favorites.loves is a dependency and the optimistic favorite update builds a new array each time, so tapping the heart with no filter active still ran this branch and swapped the reference. HomePage — setVoteDeltas({}) passes an object literal, so Object.is is never true and every call forces a render. Now returns prev when already empty. SearchBar and HomePage sit on the anonymous homepage, the hottest path. useSpaceItems only helps logged-in users, since MySpace is not loaded for guests. | 14 天前 | |
refactor: comprehensively restructure project architecture, logic, and functionality | 9 个月前 | |
fix(i18n): unify AI Short and polish native localizations across all 17 locales | 28 天前 | |
chore(data): refresh the prompt library and drop the unused tag colour 重新生成提示词数据:18 种语言的 prompt_*.json、按 id 切分的 cards/、首页默认集 default/, 以及 constants.tsx 里的 id 顺序(按累计复制热度排)。条目数仍为 279,本次是各语种译文与 热度权重的刷新。 tags.tsx 不再从 @ant-design/colors 取色:那个包只为了几个 color[5] 常量而进依赖,改成直接 写死色值,26 个标签定义不变。 | 1 个月前 | |
feat(user): rework the account, MySpace and prompt-management surfaces | 1 个月前 | |
perf(homepage): optimize rendering, touch target size, and heading semantics 1. 为 tracker.js 配置 fetchpriority="low",降低第三方分析脚本对首屏核心资源的带宽争抢; 2. 新增 .cardDeferred(content-visibility: auto),对首屏折叠线下的卡片延迟渲染计算; 3. 为 .showcaseCardLink 增加垂直 padding(达到 25px 高度),满足 WCAG 2.2 AA target-size >= 24px 规范要求,并保持 display: inline 避免破坏 line-clamp; 4. 规范全站标题层级(H1 页面标题 -> H2 分类区块 -> H3 卡片标题),消除跨级跳跃; 5. 补充标准 mobile-web-app-capable meta 标签,消除现代 Chrome 废弃警告。 | 1 个月前 | |
fix(i18n): audit all 17 locales against native UI conventions and fix 857 strings | 26 天前 | |
feat(user): rework the account, MySpace and prompt-management surfaces | 1 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 14 天前 | ||
| 28 天前 | ||
| 14 天前 | ||
| 9 个月前 | ||
| 28 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 26 天前 | ||
| 1 个月前 |