| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat: make Pod the public roster surface (#5776) * feat: make Pod the public roster surface Signed-off-by: CodeWhale Bot <bot@codewhale.net> * fix(tui): localize pod workers modal and restore fleet receipt compatibility Review-fix follow-up for the Pod public surface: - /pod workers modal routes all previously hardcoded English through tr() with 38 new MessageIds across all 15 shipped locales; a zh-Hans render test asserts no English leakage. - /pod workers means current-session sub-agents and /pod status the durable ledger, pinned per locale by a new localization test. - Durable receipt detail prefixes restored to the established fleet: spelling (lane render_detail, tui status_lines, resume detail) with regression tests at both layers; serde wire keys unchanged. Local proof (RUST_MIN_STACK=33554432, --locked): localization 49/49, fleet::control 11/11, subagents 33/33, commands fleet group 13/13, codewhale-lane 62/62; cargo fmt --check clean; locale key-set hash identical across all 15 packs. Signed-off-by: CodeWhale Bot <bot@codewhale.net> --------- Signed-off-by: CodeWhale Bot <bot@codewhale.net> Co-authored-by: CodeWhale Bot <bot@codewhale.net> | 4 天前 | |
feat: make Pod the public roster surface (#5776) * feat: make Pod the public roster surface Signed-off-by: CodeWhale Bot <bot@codewhale.net> * fix(tui): localize pod workers modal and restore fleet receipt compatibility Review-fix follow-up for the Pod public surface: - /pod workers modal routes all previously hardcoded English through tr() with 38 new MessageIds across all 15 shipped locales; a zh-Hans render test asserts no English leakage. - /pod workers means current-session sub-agents and /pod status the durable ledger, pinned per locale by a new localization test. - Durable receipt detail prefixes restored to the established fleet: spelling (lane render_detail, tui status_lines, resume detail) with regression tests at both layers; serde wire keys unchanged. Local proof (RUST_MIN_STACK=33554432, --locked): localization 49/49, fleet::control 11/11, subagents 33/33, commands fleet group 13/13, codewhale-lane 62/62; cargo fmt --check clean; locale key-set hash identical across all 15 packs. Signed-off-by: CodeWhale Bot <bot@codewhale.net> --------- Signed-off-by: CodeWhale Bot <bot@codewhale.net> Co-authored-by: CodeWhale Bot <bot@codewhale.net> | 4 天前 | |
feat(web): Tideline deep-ocean refresh + new whale mark Visual-language alignment with the Tideline TUI and the new brand asset: - web/ palette re-grounded to the TUI WHALE_* tokens: deep-ocean dark is the default everywhere; the docs light sheet becomes an opt-in block carrying the LIGHT_* tokens (fixed two defects found by render inspection: the white mark vanishing on the light sheet and near-black button ink on cobalt). - New brand mark integrated: traced SVG silhouette on the deep-blue tile (app/icon.svg), favicon.ico (16+32), apple-icon (180), web-app icons (192/512), new web app manifest, rebuilt OG card (mark + wordmark + identity phrase on the gradient, 1200x630). - nav wordmark = new mark + name/tag; seal chips restyled; every bg-ink-as-dark idiom that would have inverted to ivory slabs fixed across components and pages. - tailwind accents resolve through CSS vars so the docs light sheet re-themes; Fraunces/Noto Serif SC display loads dropped (Tideline typography: display = body family at heading weight). Contract tests updated where product intent changed (blue-stage, docs-theme, public-copy pins); the contracts themselves are preserved. No route, copy, dictionary, or media-manifest changes. Verified (integrator re-ran): check:facts OK; check:docs PASS; npm test 40 files / 341 tests all pass; npm run build clean (624 static pages incl. the new asset routes); asset routes live-checked on the production server (200s with correct content types). Render inspection at 390/768/1440 for home + docs, mobile menu, focus ring, docs light toggle, install, models, community, zh home, OG card — captures under /tmp/cw-captures/ (recorded in the Ops ledger). Refs #5573. No-Issue: Tideline program slice per the takeover plan. | 5 天前 | |
fix(web): harden community API boundaries Canonicalize scheduled draft storage and validate admin draft mutations. Bound login request parsing and isolate public feed requests from server credentials. Signed-off-by: Hunter B <hmbown@gmail.com> | 1 个月前 | |
fix(web): harden community API boundaries Canonicalize scheduled draft storage and validate admin draft mutations. Bound login request parsing and isolate public feed requests from server credentials. Signed-off-by: Hunter B <hmbown@gmail.com> | 1 个月前 | |
docs(public): align release facts with runtime Derive website sandbox facts from explicit runtime capability markers instead of source filenames. Document actual platform wrappers, narrow model and audit claims, and make two-package/three-command installs exact. Verify release assets under their manifest filenames before renaming them, with an executable contract test for every Unix snippet. Refresh localized README receipts and keep source-candidate toolCount at 66. Signed-off-by: Hunter B <hmbown@gmail.com> | 1 个月前 | |
fix(web): harden community API boundaries Canonicalize scheduled draft storage and validate admin draft mutations. Bound login request parsing and isolate public feed requests from server credentials. Signed-off-by: Hunter B <hmbown@gmail.com> | 1 个月前 | |
fix(web): give content-watch drafts canonical identities The content watchers looked drafts up under draft:linkcheck:* and draft:semantic-drift:* but saveDraft wrote them under draft:triage:*, so the dedup check was dead code and every cron run re-drafted known findings. Draft IDs were also truncated slugs (collidable at 80 chars) and the semantic-drift model output was fanned out to KV unbounded. - Extend AgentDraft.type with linkcheck | semantic-drift and add one canonical draftStorageKey() used by saveDraft, hasFreshDraft, the watchers, and the /admin client. - Deterministic watcher IDs: readable slug + 64-bit SHA-256 suffix over the finding's full identity (URL; page+claim+evidence+replacement), max 80 chars. Unchanged findings dedup; changed findings land as new drafts; long IDs with identical slug prefixes no longer collide. - Validate and cap semantic-drift model output (10 drafts/run, field shape/length checks) before any KV writes. - Truthful admin labels for the two watcher draft types. - Align hasFreshDraft calls in triage/pr-review with the types those drafts are actually saved under (triage, pr-review) — the issue/pr aliases never matched either. Fixes #4453 Fake-KV tests cover first-run creation, unchanged re-run dedup, changed-finding re-draft, truncated-prefix collisions, and bounded model output. Web gates: 73 tests, check:facts, check:docs, eslint, tsc --noEmit, next build. Signed-off-by: Hunter B <hmbown@gmail.com> | 1 个月前 | |
test: Add tests for validateSession Adds comprehensive test coverage for `validateSession` in `web/lib/community-agent.ts` covering missing edge cases, regex boundaries, missing params, and correct interaction with the Cloudflare KV store. Co-authored-by: Hmbown <101357273+Hmbown@users.noreply.github.com> | 1 个月前 | |
fix(web): harden community API boundaries Canonicalize scheduled draft storage and validate admin draft mutations. Bound login request parsing and isolate public feed requests from server credentials. Signed-off-by: Hunter B <hmbown@gmail.com> | 1 个月前 | |
docs: align the v0.9.6 public surface Document Work and To-do as the two product concepts, synchronize every shipped locale, publish the six-tool and typed-image contracts, and keep static web generation offline while live GitHub chrome refreshes after deployment. | 24 天前 | |
fix(web): give content-watch drafts canonical identities The content watchers looked drafts up under draft:linkcheck:* and draft:semantic-drift:* but saveDraft wrote them under draft:triage:*, so the dedup check was dead code and every cron run re-drafted known findings. Draft IDs were also truncated slugs (collidable at 80 chars) and the semantic-drift model output was fanned out to KV unbounded. - Extend AgentDraft.type with linkcheck | semantic-drift and add one canonical draftStorageKey() used by saveDraft, hasFreshDraft, the watchers, and the /admin client. - Deterministic watcher IDs: readable slug + 64-bit SHA-256 suffix over the finding's full identity (URL; page+claim+evidence+replacement), max 80 chars. Unchanged findings dedup; changed findings land as new drafts; long IDs with identical slug prefixes no longer collide. - Validate and cap semantic-drift model output (10 drafts/run, field shape/length checks) before any KV writes. - Truthful admin labels for the two watcher draft types. - Align hasFreshDraft calls in triage/pr-review with the types those drafts are actually saved under (triage, pr-review) — the issue/pr aliases never matched either. Fixes #4453 Fake-KV tests cover first-run creation, unchanged re-run dedup, changed-finding re-draft, truncated-prefix collisions, and bounded model output. Web gates: 73 tests, check:facts, check:docs, eslint, tsc --noEmit, next build. Signed-off-by: Hunter B <hmbown@gmail.com> | 1 个月前 | |
fix(web): align site brand strings and tidy redesign leftovers Follow-ups to the #4362 documentation-led redesign, addressing the four non-blocking findings from its review: - Align user-visible brand strings across all web pages to the "Codewhale" wordmark the redesign introduced (repo URLs and the Hmbown/CodeWhale slug are untouched). - Deduplicate the homepage topic special-cases: topicHref() and TopicList now share one TOPIC_PAGE_OVERRIDES map instead of two hardcoded id lists that could drift. - Replace the stale pre-rebrand ink rgba(14,14,16,...) with the palette ink rgb(27,34,48) in globals.css and the mobile menu divider. - Remove the dead .site-install-link CSS now that the desktop nav no longer renders an Install button. Verified with eslint, 42 web tests, check-docs, and a full Next.js production build (39 pages). Prepared with agent assistance. | 1 个月前 | |
test(web): spawn the deploy preflight script by a decoded path (#5503) lib/deploy-preflight.test.ts spawns check-cloudflare-deploy-env.mjs by URL.pathname, which stays percent-encoded. In a checkout under a path with non-ASCII characters the spawned filename does not exist, node exits on module-not-found, and the 7 cases in the file that spawn the script fail on the exit code — reading as a missing-credentials failure when nothing about the environment is wrong. The other 5 read package.json and the workflow file directly and are unaffected. fileURLToPath decodes it, which is what the scripts under web/scripts/ already do. | 17 天前 | |
web: publish FAQ and organization structured data, llms.txt, and docs crumbs The public FAQ now emits FAQPage JSON-LD from the same 40 Q&A pairs the page renders. The locale layout carries a stable Organization/WebSite graph so SoftwareApplication can reference it. /llms.txt is generated from the docs registry; robots allows it; middleware does not locale-prefix it. Docs pages get a Home → Docs → topic trail and a matching BreadcrumbList. Cloudflare Images is not enabled. Verified: 92 vitest files in the touched web surface passed in the implementing session. | 16 天前 | |
web: publish FAQ and organization structured data, llms.txt, and docs crumbs The public FAQ now emits FAQPage JSON-LD from the same 40 Q&A pairs the page renders. The locale layout carries a stable Organization/WebSite graph so SoftwareApplication can reference it. /llms.txt is generated from the docs registry; robots allows it; middleware does not locale-prefix it. Docs pages get a Home → Docs → topic trail and a matching BreadcrumbList. Cloudflare Images is not enabled. Verified: 92 vitest files in the touched web surface passed in the implementing session. | 16 天前 | |
fix(web): resolve public /signin /signup /auth/callback 404s (#5780) * fix(web): resolve public /signin /signup /auth/callback 404s Bare auth URLs were locale-prefixed into /en/signin, /en/signup, and /en/auth/callback, which had no pages. Keep sign-in and create-account as locale-aware public routes that use the canonical mark and send the person to the CWC app, hop OAuth callbacks to app.codewhale.net with the query intact, and fold /login /register aliases. Local CLI use is not presented as requiring an account. Closes #5767 Signed-off-by: CodeWhale Bot <bot@codewhale.net> * docs(changelog): record public auth routes and Pod receipts Unblock version-drift: #5776 landed on main without a CHANGELOG receipt, which fails every subsequent PR. #5767 is the public /signin /signup /auth/callback fix this branch ships. Signed-off-by: CodeWhale Bot <bot@codewhale.net> --------- Signed-off-by: CodeWhale Bot <bot@codewhale.net> Co-authored-by: CodeWhale Bot <bot@codewhale.net> | 4 天前 | |
feat: make Pod the public roster surface (#5776) * feat: make Pod the public roster surface Signed-off-by: CodeWhale Bot <bot@codewhale.net> * fix(tui): localize pod workers modal and restore fleet receipt compatibility Review-fix follow-up for the Pod public surface: - /pod workers modal routes all previously hardcoded English through tr() with 38 new MessageIds across all 15 shipped locales; a zh-Hans render test asserts no English leakage. - /pod workers means current-session sub-agents and /pod status the durable ledger, pinned per locale by a new localization test. - Durable receipt detail prefixes restored to the established fleet: spelling (lane render_detail, tui status_lines, resume detail) with regression tests at both layers; serde wire keys unchanged. Local proof (RUST_MIN_STACK=33554432, --locked): localization 49/49, fleet::control 11/11, subagents 33/33, commands fleet group 13/13, codewhale-lane 62/62; cargo fmt --check clean; locale key-set hash identical across all 15 packs. Signed-off-by: CodeWhale Bot <bot@codewhale.net> --------- Signed-off-by: CodeWhale Bot <bot@codewhale.net> Co-authored-by: CodeWhale Bot <bot@codewhale.net> | 4 天前 | |
feat(web): add /docs/guide and /docs/vocabulary routes The guide topic flips hasPage true and gains a real page instead of linking out to the repository; vocabulary is a new core-concepts topic. Both are registered in docs-map.ts and app/sitemap.ts, so the docs index, navigation, and sitemap stay in agreement. /docs/guide renders the shared four-step path and the pending real-session media slot. /docs/vocabulary renders the execution nouns, modes and permission postures, route-identity provenance fields, the Consultant advisory role, and the measurement principles — including the explicit statement that this site publishes no benchmark leaderboard. docs/fleet now reads its vocabulary from the shared module rather than an inline copy, so the definitions cannot drift between pages. Tests: docs-ia.test.ts covers information architecture; docs-navigation.test.ts is updated for guide's new local-page routing. Harvested from the #3413 web-maturity lane. | 1 个月前 | |
docs(web): align the public surface with Blue Stage (#4587) * docs(web): align the public surface with Blue Stage Carry the TUI's semantic Blue Stage palette into the website, keep Signal Gold on the whale and human-attention accents, and enforce the cross-surface token contract in tests. Route existing Install and Providers topics to their first-party pages and document the loopback-only browser client's real bootstrap and authentication boundaries. Signed-off-by: Hunter B <hmbown@gmail.com> * docs: keep translated READMEs in public-surface parity Mirror the browser-client command and guide link across all six translated READMEs, with the source stamp updated to the exact English README. This restores the repository translation gate without translating or reordering executable commands. Signed-off-by: Hunter B <hmbown@gmail.com> --------- Signed-off-by: Hunter B <hmbown@gmail.com> | 1 个月前 | |
feat(web): Tideline deep-ocean refresh + new whale mark Visual-language alignment with the Tideline TUI and the new brand asset: - web/ palette re-grounded to the TUI WHALE_* tokens: deep-ocean dark is the default everywhere; the docs light sheet becomes an opt-in block carrying the LIGHT_* tokens (fixed two defects found by render inspection: the white mark vanishing on the light sheet and near-black button ink on cobalt). - New brand mark integrated: traced SVG silhouette on the deep-blue tile (app/icon.svg), favicon.ico (16+32), apple-icon (180), web-app icons (192/512), new web app manifest, rebuilt OG card (mark + wordmark + identity phrase on the gradient, 1200x630). - nav wordmark = new mark + name/tag; seal chips restyled; every bg-ink-as-dark idiom that would have inverted to ivory slabs fixed across components and pages. - tailwind accents resolve through CSS vars so the docs light sheet re-themes; Fraunces/Noto Serif SC display loads dropped (Tideline typography: display = body family at heading weight). Contract tests updated where product intent changed (blue-stage, docs-theme, public-copy pins); the contracts themselves are preserved. No route, copy, dictionary, or media-manifest changes. Verified (integrator re-ran): check:facts OK; check:docs PASS; npm test 40 files / 341 tests all pass; npm run build clean (624 static pages incl. the new asset routes); asset routes live-checked on the production server (200s with correct content types). Render inspection at 390/768/1440 for home + docs, mobile menu, focus ring, docs light toggle, install, models, community, zh home, OG card — captures under /tmp/cw-captures/ (recorded in the Ops ledger). Refs #5573. No-Issue: Tideline program slice per the takeover plan. | 5 天前 | |
docs(public): align release facts with runtime Derive website sandbox facts from explicit runtime capability markers instead of source filenames. Document actual platform wrappers, narrow model and audit claims, and make two-package/three-command installs exact. Verify release assets under their manifest filenames before renaming them, with an executable contract test for every Unix snippet. Refresh localized README receipts and keep source-candidate toolCount at 66. Signed-off-by: Hunter B <hmbown@gmail.com> | 1 个月前 | |
fix(web): list Eden AI on the website provider surface The Edenai ProviderKind (#5422) was missing from PROVIDER_LABEL_MAP, so derive-facts warned and the website advertised 44 routes while the runtime registry carries 45 listable providers. Add the label/env row to both the build-time and cron drift maps, regenerate facts.generated.ts, and move the source-candidate providerCount to 45. | 19 天前 | |
chore(web): regenerate facts for the request_plugin_install tool The new request_plugin_install tool bumps the workspace tool count from 74 to 75, so web/lib/facts.generated.ts goes stale and the web Lint & Type Check gate fails check-facts. Regenerate it. Signed-off-by: CodeWhale Bot <bot@codewhale.net> | 6 天前 | |
fix(web): validate fact snapshot provenance Reject malformed, half-populated source provenance before KV precedence is evaluated. Require published-release URLs to match the canonical GitHub tag URL and cover poisoned snapshot cases. Signed-off-by: Hunter B <hmbown@gmail.com> | 1 个月前 | |
fix(web): validate fact snapshot provenance Reject malformed, half-populated source provenance before KV precedence is evaluated. Require published-release URLs to match the canonical GitHub tag URL and cover poisoned snapshot cases. Signed-off-by: Hunter B <hmbown@gmail.com> | 1 个月前 | |
web: publish FAQ and organization structured data, llms.txt, and docs crumbs The public FAQ now emits FAQPage JSON-LD from the same 40 Q&A pairs the page renders. The locale layout carries a stable Organization/WebSite graph so SoftwareApplication can reference it. /llms.txt is generated from the docs registry; robots allows it; middleware does not locale-prefix it. Docs pages get a Home → Docs → topic trail and a matching BreadcrumbList. Cloudflare Images is not enabled. Verified: 92 vitest files in the touched web surface passed in the implementing session. | 16 天前 | |
web: publish FAQ and organization structured data, llms.txt, and docs crumbs The public FAQ now emits FAQPage JSON-LD from the same 40 Q&A pairs the page renders. The locale layout carries a stable Organization/WebSite graph so SoftwareApplication can reference it. /llms.txt is generated from the docs registry; robots allows it; middleware does not locale-prefix it. Docs pages get a Home → Docs → topic trail and a matching BreadcrumbList. Cloudflare Images is not enabled. Verified: 92 vitest files in the touched web surface passed in the implementing session. | 16 天前 | |
fix(web): enforce source-backed public facts Align English and Chinese public copy with the canonical tools, permission labels, privacy boundary, candidate/release split, roadmap state, and install channels. Expand the machine-readable matrix and drift tests, add verifiable FAQ source links, and cover canonical/hreflang/Open Graph/Twitter metadata on previously incomplete routes. Signed-off-by: Hunter B <hmbown@gmail.com> | 1 个月前 | |
fix(web): enforce source-backed public facts Align English and Chinese public copy with the canonical tools, permission labels, privacy boundary, candidate/release split, roadmap state, and install channels. Expand the machine-readable matrix and drift tests, add verifiable FAQ source links, and cover canonical/hreflang/Open Graph/Twitter metadata on previously incomplete routes. Signed-off-by: Hunter B <hmbown@gmail.com> | 1 个月前 | |
docs: align the v0.9.6 public surface Document Work and To-do as the two product concepts, synchronize every shipped locale, publish the six-tool and typed-image contracts, and keep static web generation offline while live GitHub chrome refreshes after deployment. | 24 天前 | |
docs: align the v0.9.6 public surface Document Work and To-do as the two product concepts, synchronize every shipped locale, publish the six-tool and typed-image contracts, and keep static web generation offline while live GitHub chrome refreshes after deployment. | 24 天前 | |
fix(web): align installs with the single runtime Advertise codewhale and the release/npm codew convenience name without exposing the retired codewhale-tui install surface. Keep Cargo truthful: codewhale-cli installs only codewhale unless the user defines an alias. Verified with focused public-surface tests, facts/docs/locale checks, ESLint, and diff checking. | 27 天前 | |
fix(web): detect Intel Macs for the install snippet via client hints (#5168) detectFromBrowserSignals declared 'macos-x64' in its Arch union but could never return it: every non-Windows, non-Linux UA fell through to 'macos-arm64', silently handing Intel Mac users the Apple Silicon binary snippet. Since Big Sur the macOS UA reports 'Intel Mac OS X' on Apple Silicon too, so UA parsing fundamentally cannot distinguish the two — only User-Agent Client Hints can. The component already requests architecture/bitness hints; the detector now honors them on the macOS branch (x86 -> macos-x64). Without hints the default stays arm64 (every Mac sold since late 2020) and the page's existing arch chooser remains the honest fallback, so nobody is silently misdetected. Vitest pins: x86 hint -> macos-x64, arm hint -> macos-arm64, and the deliberate no-hint arm64 default on the frozen Intel UA. Agent-assisted change. | 1 个月前 | |
fix(web): detect Intel Macs for the install snippet via client hints (#5168) detectFromBrowserSignals declared 'macos-x64' in its Arch union but could never return it: every non-Windows, non-Linux UA fell through to 'macos-arm64', silently handing Intel Mac users the Apple Silicon binary snippet. Since Big Sur the macOS UA reports 'Intel Mac OS X' on Apple Silicon too, so UA parsing fundamentally cannot distinguish the two — only User-Agent Client Hints can. The component already requests architecture/bitness hints; the detector now honors them on the macOS branch (x86 -> macos-x64). Without hints the default stays arm64 (every Mac sold since late 2020) and the page's existing arch chooser remains the honest fallback, so nobody is silently misdetected. Vitest pins: x86 hint -> macos-x64, arm hint -> macos-arm64, and the deliberate no-hint arm64 default on the frozen Intel UA. Agent-assisted change. | 1 个月前 | |
web: publish FAQ and organization structured data, llms.txt, and docs crumbs The public FAQ now emits FAQPage JSON-LD from the same 40 Q&A pairs the page renders. The locale layout carries a stable Organization/WebSite graph so SoftwareApplication can reference it. /llms.txt is generated from the docs registry; robots allows it; middleware does not locale-prefix it. Docs pages get a Home → Docs → topic trail and a matching BreadcrumbList. Cloudflare Images is not enabled. Verified: 92 vitest files in the touched web surface passed in the implementing session. | 16 天前 | |
fix(kimi): support API-key setup for Kimi Code | 3 个月前 | |
fix(web): replace pricing and legal 404s with honest pages Signed-off-by: CodeWhale Bot <bot@codewhale.net> | 6 天前 | |
fix(web): replace pricing and legal 404s with honest pages Signed-off-by: CodeWhale Bot <bot@codewhale.net> | 6 天前 | |
feat: make Pod the public roster surface (#5776) * feat: make Pod the public roster surface Signed-off-by: CodeWhale Bot <bot@codewhale.net> * fix(tui): localize pod workers modal and restore fleet receipt compatibility Review-fix follow-up for the Pod public surface: - /pod workers modal routes all previously hardcoded English through tr() with 38 new MessageIds across all 15 shipped locales; a zh-Hans render test asserts no English leakage. - /pod workers means current-session sub-agents and /pod status the durable ledger, pinned per locale by a new localization test. - Durable receipt detail prefixes restored to the established fleet: spelling (lane render_detail, tui status_lines, resume detail) with regression tests at both layers; serde wire keys unchanged. Local proof (RUST_MIN_STACK=33554432, --locked): localization 49/49, fleet::control 11/11, subagents 33/33, commands fleet group 13/13, codewhale-lane 62/62; cargo fmt --check clean; locale key-set hash identical across all 15 packs. Signed-off-by: CodeWhale Bot <bot@codewhale.net> --------- Signed-off-by: CodeWhale Bot <bot@codewhale.net> Co-authored-by: CodeWhale Bot <bot@codewhale.net> | 4 天前 | |
web: de-slop the site copy (voice sheet + rewritten surfaces) Add docs/design/WEB_VOICE.md and rewrite the English and Chinese copy on the homepage, /install, /models, /community, the docs portal lede, the shared getting-started steps, and the pending-recording notes: short declarative sentences, plain words instead of internal vocabulary (source candidate, provider routes, permission posture, law, receipt, ledger, dogfood), no self-narration about honesty, no stale version numbers in copy. Tests updated only where they pinned the removed wording: public-copy (source labels, provider count, credit eyebrow), docs-ia, public-surface-contract (figcaption), media-manifest (pending note). No-Issue: owner request 2026-08-17 — website copy still reads like internal documentation | 18 天前 | |
feat: make Pod the public roster surface (#5776) * feat: make Pod the public roster surface Signed-off-by: CodeWhale Bot <bot@codewhale.net> * fix(tui): localize pod workers modal and restore fleet receipt compatibility Review-fix follow-up for the Pod public surface: - /pod workers modal routes all previously hardcoded English through tr() with 38 new MessageIds across all 15 shipped locales; a zh-Hans render test asserts no English leakage. - /pod workers means current-session sub-agents and /pod status the durable ledger, pinned per locale by a new localization test. - Durable receipt detail prefixes restored to the established fleet: spelling (lane render_detail, tui status_lines, resume detail) with regression tests at both layers; serde wire keys unchanged. Local proof (RUST_MIN_STACK=33554432, --locked): localization 49/49, fleet::control 11/11, subagents 33/33, commands fleet group 13/13, codewhale-lane 62/62; cargo fmt --check clean; locale key-set hash identical across all 15 packs. Signed-off-by: CodeWhale Bot <bot@codewhale.net> --------- Signed-off-by: CodeWhale Bot <bot@codewhale.net> Co-authored-by: CodeWhale Bot <bot@codewhale.net> | 4 天前 | |
fix(web): resolve public /signin /signup /auth/callback 404s (#5780) * fix(web): resolve public /signin /signup /auth/callback 404s Bare auth URLs were locale-prefixed into /en/signin, /en/signup, and /en/auth/callback, which had no pages. Keep sign-in and create-account as locale-aware public routes that use the canonical mark and send the person to the CWC app, hop OAuth callbacks to app.codewhale.net with the query intact, and fold /login /register aliases. Local CLI use is not presented as requiring an account. Closes #5767 Signed-off-by: CodeWhale Bot <bot@codewhale.net> * docs(changelog): record public auth routes and Pod receipts Unblock version-drift: #5776 landed on main without a CHANGELOG receipt, which fails every subsequent PR. #5767 is the public /signin /signup /auth/callback fix this branch ships. Signed-off-by: CodeWhale Bot <bot@codewhale.net> --------- Signed-off-by: CodeWhale Bot <bot@codewhale.net> Co-authored-by: CodeWhale Bot <bot@codewhale.net> | 4 天前 | |
fix(web): replace pricing and legal 404s with honest pages Signed-off-by: CodeWhale Bot <bot@codewhale.net> | 6 天前 | |
fix(web): resolve the next/font variables the type utilities were meant to use `tailwind.config.ts` already carries the note that naming a family here without pointing at its `next/font` variable "only produced a utility that silently fell back to sans-serif" — that was fixed for `display` and left unfixed for the other three. `body`, `cjk`, and `mono` still named bare font stacks, and `globals.css` `.font-cjk` did the same while `.font-display` two lines above resolved `var(--font-display)` correctly. The visible cost was Noto Serif SC: `app/[locale]/layout.tsx` loads it through `next/font` and binds `--font-cjk`, nothing referenced that variable, so the download was dead weight and every `.font-cjk` anchor fell through to whatever serif the reader happened to have. `body` and `mono` resolved only because IBM Plex Sans and JetBrains Mono were also named literally — they were one rename away from the same silent fallback. All four families now lead with their variable and keep the literal stack as the fallback behind it. Also emits `twitter:image:alt`. `openGraph.images` passes the full descriptor including `alt`, but the Twitter block passed a bare URL string; Next only backfills twitter images from Open Graph when `twitter.images` is absent entirely, so the card shipped on every route with no alt text. The `page-meta.test.ts` expectation moves to the object form with it. Verified: `npx vitest run` in web/ — 30 files, 271 tests, all passing; `npx tsc --noEmit` clean. | 16 天前 | |
feat: make Pod the public roster surface (#5776) * feat: make Pod the public roster surface Signed-off-by: CodeWhale Bot <bot@codewhale.net> * fix(tui): localize pod workers modal and restore fleet receipt compatibility Review-fix follow-up for the Pod public surface: - /pod workers modal routes all previously hardcoded English through tr() with 38 new MessageIds across all 15 shipped locales; a zh-Hans render test asserts no English leakage. - /pod workers means current-session sub-agents and /pod status the durable ledger, pinned per locale by a new localization test. - Durable receipt detail prefixes restored to the established fleet: spelling (lane render_detail, tui status_lines, resume detail) with regression tests at both layers; serde wire keys unchanged. Local proof (RUST_MIN_STACK=33554432, --locked): localization 49/49, fleet::control 11/11, subagents 33/33, commands fleet group 13/13, codewhale-lane 62/62; cargo fmt --check clean; locale key-set hash identical across all 15 packs. Signed-off-by: CodeWhale Bot <bot@codewhale.net> --------- Signed-off-by: CodeWhale Bot <bot@codewhale.net> Co-authored-by: CodeWhale Bot <bot@codewhale.net> | 4 天前 | |
fix(web): admin digest post returns real GitHub Issue outcome instead of silent no-op (#5180) * Initial plan * fix(web): digest post returns real GitHub Issue URL instead of false ok:true The admin digest "post" action was returning `{ ok: true, action: "digest-skipped" }` without posting anything or marking the draft as posted. This caused the draft to reappear in Pending forever — a false success receipt. Fix: digest drafts are now posted as new GitHub Issues (using the existing MAINTAINER_GITHUB_PAT + REST API). The response includes the real issue `number` and `url`; `draft.posted` is set to true and the draft is stored back. GitHub API failures propagate as 502 errors, never as ok:true. Tests: two new source-contract tests in public-api-security.test.ts pin both paths — happy path (real url/number returned) and error path (502, not ok:true). Closes #5178 --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> | 1 个月前 | |
fix(web): resolve public /signin /signup /auth/callback 404s (#5780) * fix(web): resolve public /signin /signup /auth/callback 404s Bare auth URLs were locale-prefixed into /en/signin, /en/signup, and /en/auth/callback, which had no pages. Keep sign-in and create-account as locale-aware public routes that use the canonical mark and send the person to the CWC app, hop OAuth callbacks to app.codewhale.net with the query intact, and fold /login /register aliases. Local CLI use is not presented as requiring an account. Closes #5767 Signed-off-by: CodeWhale Bot <bot@codewhale.net> * docs(changelog): record public auth routes and Pod receipts Unblock version-drift: #5776 landed on main without a CHANGELOG receipt, which fails every subsequent PR. #5767 is the public /signin /signup /auth/callback fix this branch ships. Signed-off-by: CodeWhale Bot <bot@codewhale.net> --------- Signed-off-by: CodeWhale Bot <bot@codewhale.net> Co-authored-by: CodeWhale Bot <bot@codewhale.net> | 4 天前 | |
fix(web): resolve public /signin /signup /auth/callback 404s (#5780) * fix(web): resolve public /signin /signup /auth/callback 404s Bare auth URLs were locale-prefixed into /en/signin, /en/signup, and /en/auth/callback, which had no pages. Keep sign-in and create-account as locale-aware public routes that use the canonical mark and send the person to the CWC app, hop OAuth callbacks to app.codewhale.net with the query intact, and fold /login /register aliases. Local CLI use is not presented as requiring an account. Closes #5767 Signed-off-by: CodeWhale Bot <bot@codewhale.net> * docs(changelog): record public auth routes and Pod receipts Unblock version-drift: #5776 landed on main without a CHANGELOG receipt, which fails every subsequent PR. #5767 is the public /signin /signup /auth/callback fix this branch ships. Signed-off-by: CodeWhale Bot <bot@codewhale.net> --------- Signed-off-by: CodeWhale Bot <bot@codewhale.net> Co-authored-by: CodeWhale Bot <bot@codewhale.net> | 4 天前 | |
fix(web): localize footer legal links and make alias redirects permanent Address the two open review findings on the pricing/legal rescue: - footerLegalLinks now takes the ChromeDict like its sibling generators and sources labels from new footerPricing/footerTerms/footerPrivacy keys, added to ChromeDict and all 18 locale dictionaries, so the footer legal links render localized for every routed locale (zh included) instead of hardcoded English. docs-ia.test.ts now asserts the labels match the dictionary per locale, closing the test gap. - The /legal, /privacy, and /terms alias pages use permanentRedirect instead of the temporary redirect: these are canonical permanent aliases for the moved pricing/legal home. Signed-off-by: CodeWhale Bot <bot@codewhale.net> | 6 天前 | |
feat(web): Tideline deep-ocean refresh + new whale mark Visual-language alignment with the Tideline TUI and the new brand asset: - web/ palette re-grounded to the TUI WHALE_* tokens: deep-ocean dark is the default everywhere; the docs light sheet becomes an opt-in block carrying the LIGHT_* tokens (fixed two defects found by render inspection: the white mark vanishing on the light sheet and near-black button ink on cobalt). - New brand mark integrated: traced SVG silhouette on the deep-blue tile (app/icon.svg), favicon.ico (16+32), apple-icon (180), web-app icons (192/512), new web app manifest, rebuilt OG card (mark + wordmark + identity phrase on the gradient, 1200x630). - nav wordmark = new mark + name/tag; seal chips restyled; every bg-ink-as-dark idiom that would have inverted to ivory slabs fixed across components and pages. - tailwind accents resolve through CSS vars so the docs light sheet re-themes; Fraunces/Noto Serif SC display loads dropped (Tideline typography: display = body family at heading weight). Contract tests updated where product intent changed (blue-stage, docs-theme, public-copy pins); the contracts themselves are preserved. No route, copy, dictionary, or media-manifest changes. Verified (integrator re-ran): check:facts OK; check:docs PASS; npm test 40 files / 341 tests all pass; npm run build clean (624 static pages incl. the new asset routes); asset routes live-checked on the production server (200s with correct content types). Render inspection at 390/768/1440 for home + docs, mobile menu, focus ring, docs light toggle, install, models, community, zh home, OG card — captures under /tmp/cw-captures/ (recorded in the Ops ledger). Refs #5573. No-Issue: Tideline program slice per the takeover plan. | 5 天前 | |
fix(release): promote tested v0.9.11 nonbenchmark candidate Promotes the fully gated non-benchmark candidate while preserving the benchmark tree exactly from the prior release-PR head. Signed-off-by: CodeWhale Bot <bot@codewhale.net> | 13 天前 | |
feat: make Pod the public roster surface (#5776) * feat: make Pod the public roster surface Signed-off-by: CodeWhale Bot <bot@codewhale.net> * fix(tui): localize pod workers modal and restore fleet receipt compatibility Review-fix follow-up for the Pod public surface: - /pod workers modal routes all previously hardcoded English through tr() with 38 new MessageIds across all 15 shipped locales; a zh-Hans render test asserts no English leakage. - /pod workers means current-session sub-agents and /pod status the durable ledger, pinned per locale by a new localization test. - Durable receipt detail prefixes restored to the established fleet: spelling (lane render_detail, tui status_lines, resume detail) with regression tests at both layers; serde wire keys unchanged. Local proof (RUST_MIN_STACK=33554432, --locked): localization 49/49, fleet::control 11/11, subagents 33/33, commands fleet group 13/13, codewhale-lane 62/62; cargo fmt --check clean; locale key-set hash identical across all 15 packs. Signed-off-by: CodeWhale Bot <bot@codewhale.net> --------- Signed-off-by: CodeWhale Bot <bot@codewhale.net> Co-authored-by: CodeWhale Bot <bot@codewhale.net> | 4 天前 | |
web: publish FAQ and organization structured data, llms.txt, and docs crumbs The public FAQ now emits FAQPage JSON-LD from the same 40 Q&A pairs the page renders. The locale layout carries a stable Organization/WebSite graph so SoftwareApplication can reference it. /llms.txt is generated from the docs registry; robots allows it; middleware does not locale-prefix it. Docs pages get a Home → Docs → topic trail and a matching BreadcrumbList. Cloudflare Images is not enabled. Verified: 92 vitest files in the touched web surface passed in the implementing session. | 16 天前 | |
fix(release): promote tested v0.9.11 nonbenchmark candidate Promotes the fully gated non-benchmark candidate while preserving the benchmark tree exactly from the prior release-PR head. Signed-off-by: CodeWhale Bot <bot@codewhale.net> | 13 天前 | |
fix(web): stop cutting GitHub titles through the middle of a character Defect: the homepage wire strip shortened long titles with `title.slice(0, 70)`, and the roadmap summaries with `stripped.slice(0, 137)`. `slice` counts UTF-16 code units, so when the cut lands between the two halves of a surrogate pair the output ends in a lone surrogate. GitHub issue, pull request and release titles carry emoji routinely; the reader sees U+FFFD — the black-diamond question mark — immediately before the ellipsis. Verified: a title of 69 ASCII characters followed by U+1F40B yields a string whose last code unit is 0xD83D. The same `.length` test also miscounted: an astral character was two characters toward the budget, so a 40-emoji title was treated as 80 characters and truncated at 35. Fix: one code-point-safe `truncateChars` in lib/truncate.ts, used by both surfaces. Character budgets and thresholds are unchanged (70 for the ticker; cut at 140, keep 137 for roadmap notes), so nothing but the broken cut moves. Also corrected a false comment in summarizeReleaseBody: it claimed to strip trailing emoji, which it has never done. Evidence: lib/truncate.test.ts. Restoring `value.slice(...)` in the helper fails "never splits an astral character in half" (a lone surrogate survives the well-formed-pair filter) and "counts code points, not UTF-16 code units". The last case pins both call sites onto the shared rule. npm test 322 passed, npm run lint clean, npx tsc --noEmit clean. Implemented with agent assistance. Signed-off-by: Hunter Bown <hmbown@gmail.com> | 15 天前 | |
fix(web): highlight search matches using the source string's own indices Defect: both search surfaces carried an identical `highlight()` that took `idx` from `text.toLowerCase()` and then sliced `text` with it: const lower = text.toLowerCase(); const idx = lower.indexOf(q); text.slice(idx, idx + q.length) That assumes lowercasing preserves length. It does not — `"İ"` (U+0130, Turkish dotted capital I) lowercases to two code units, so every index after one is off by one. Searching "stanbul" in "İstanbul kurulumu" marks "tanbul " instead of "stanbul": the highlight starts and ends one character late. Turkish is a routed locale (`tr`), and the search haystack is where localized copy is headed. Fix: `highlightSpan()` in lib/search-utils.ts — the module that exists so the search components' pure logic can be unit-tested — folds case one character at a time and keeps a position map, so the three returned pieces are cut at real character boundaries and always reassemble the input exactly. Both components now call it instead of repeating the arithmetic. Scope, honestly: no string in the current haystack contains a length-changing character, so this is a latent bug rather than an observed one. It is still wrong output for valid input, and it was wrong in two places. Evidence: lib/search-utils.test.ts. Restoring the lowercased-index implementation fails "keeps indices in the source string when lowercasing changes length" with `expected 'tanbul ' to be 'stanbul'`. The last case pins both components onto the shared rule. npm test 327 passed, npm run lint clean, npx tsc --noEmit clean. Implemented with agent assistance. Signed-off-by: Hunter Bown <hmbown@gmail.com> | 15 天前 | |
fix(web): highlight search matches using the source string's own indices Defect: both search surfaces carried an identical `highlight()` that took `idx` from `text.toLowerCase()` and then sliced `text` with it: const lower = text.toLowerCase(); const idx = lower.indexOf(q); text.slice(idx, idx + q.length) That assumes lowercasing preserves length. It does not — `"İ"` (U+0130, Turkish dotted capital I) lowercases to two code units, so every index after one is off by one. Searching "stanbul" in "İstanbul kurulumu" marks "tanbul " instead of "stanbul": the highlight starts and ends one character late. Turkish is a routed locale (`tr`), and the search haystack is where localized copy is headed. Fix: `highlightSpan()` in lib/search-utils.ts — the module that exists so the search components' pure logic can be unit-tested — folds case one character at a time and keeps a position map, so the three returned pieces are cut at real character boundaries and always reassemble the input exactly. Both components now call it instead of repeating the arithmetic. Scope, honestly: no string in the current haystack contains a length-changing character, so this is a latent bug rather than an observed one. It is still wrong output for valid input, and it was wrong in two places. Evidence: lib/search-utils.test.ts. Restoring the lowercased-index implementation fails "keeps indices in the source string when lowercasing changes length" with `expected 'tanbul ' to be 'stanbul'`. The last case pins both components onto the shared rule. npm test 327 passed, npm run lint clean, npx tsc --noEmit clean. Implemented with agent assistance. Signed-off-by: Hunter Bown <hmbown@gmail.com> | 15 天前 | |
fix(web/admin): zh admin pre-fills and publishes bodyZh instead of bodyEn (#5179) * Initial plan * fix: zh admin pre-fills and publishes bodyZh not bodyEn startEdit always set editBody to draft.bodyEn regardless of locale. Change to isZh ? draft.bodyZh : draft.bodyEn so the /zh admin textarea pre-fills the Chinese body. Also fix the "Posted" preview row which displayed bodyEn unconditionally — now respects isZh in the same way. Add a test asserting that POST /api/admin/post with lang=zh and no editedBody sends the zh body to GitHub, not the English one. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> | 1 个月前 | |
web: publish FAQ and organization structured data, llms.txt, and docs crumbs The public FAQ now emits FAQPage JSON-LD from the same 40 Q&A pairs the page renders. The locale layout carries a stable Organization/WebSite graph so SoftwareApplication can reference it. /llms.txt is generated from the docs registry; robots allows it; middleware does not locale-prefix it. Docs pages get a Home → Docs → topic trail and a matching BreadcrumbList. Cloudflare Images is not enabled. Verified: 92 vitest files in the touched web surface passed in the implementing session. | 16 天前 | |
web: publish FAQ and organization structured data, llms.txt, and docs crumbs The public FAQ now emits FAQPage JSON-LD from the same 40 Q&A pairs the page renders. The locale layout carries a stable Organization/WebSite graph so SoftwareApplication can reference it. /llms.txt is generated from the docs registry; robots allows it; middleware does not locale-prefix it. Docs pages get a Home → Docs → topic trail and a matching BreadcrumbList. Cloudflare Images is not enabled. Verified: 92 vitest files in the touched web surface passed in the implementing session. | 16 天前 | |
web: publish FAQ and organization structured data, llms.txt, and docs crumbs The public FAQ now emits FAQPage JSON-LD from the same 40 Q&A pairs the page renders. The locale layout carries a stable Organization/WebSite graph so SoftwareApplication can reference it. /llms.txt is generated from the docs registry; robots allows it; middleware does not locale-prefix it. Docs pages get a Home → Docs → topic trail and a matching BreadcrumbList. Cloudflare Images is not enabled. Verified: 92 vitest files in the touched web surface passed in the implementing session. | 16 天前 | |
web: publish FAQ and organization structured data, llms.txt, and docs crumbs The public FAQ now emits FAQPage JSON-LD from the same 40 Q&A pairs the page renders. The locale layout carries a stable Organization/WebSite graph so SoftwareApplication can reference it. /llms.txt is generated from the docs registry; robots allows it; middleware does not locale-prefix it. Docs pages get a Home → Docs → topic trail and a matching BreadcrumbList. Cloudflare Images is not enabled. Verified: 92 vitest files in the touched web surface passed in the implementing session. | 16 天前 | |
test(web): avoid Cloudflare globals in installer test Keep the static installer unit test independent of Cloudflare worker global types so the regular web TypeScript check can run in CI. | 2 个月前 | |
fix(web): serve install script before app fallback Route /install.sh through the Cloudflare static asset binding before the OpenNext app handler so the documented curl installer receives a shell script instead of the prerendered website shell. Fixes #3582. | 2 个月前 | |
fix(web): stop cutting GitHub titles through the middle of a character Defect: the homepage wire strip shortened long titles with `title.slice(0, 70)`, and the roadmap summaries with `stripped.slice(0, 137)`. `slice` counts UTF-16 code units, so when the cut lands between the two halves of a surrogate pair the output ends in a lone surrogate. GitHub issue, pull request and release titles carry emoji routinely; the reader sees U+FFFD — the black-diamond question mark — immediately before the ellipsis. Verified: a title of 69 ASCII characters followed by U+1F40B yields a string whose last code unit is 0xD83D. The same `.length` test also miscounted: an astral character was two characters toward the budget, so a 40-emoji title was treated as 80 characters and truncated at 35. Fix: one code-point-safe `truncateChars` in lib/truncate.ts, used by both surfaces. Character budgets and thresholds are unchanged (70 for the ticker; cut at 140, keep 137 for roadmap notes), so nothing but the broken cut moves. Also corrected a false comment in summarizeReleaseBody: it claimed to strip trailing emoji, which it has never done. Evidence: lib/truncate.test.ts. Restoring `value.slice(...)` in the helper fails "never splits an astral character in half" (a lone surrogate survives the well-formed-pair filter) and "counts code points, not UTF-16 code units". The last case pins both call sites onto the shared rule. npm test 322 passed, npm run lint clean, npx tsc --noEmit clean. Implemented with agent assistance. Signed-off-by: Hunter Bown <hmbown@gmail.com> | 15 天前 | |
fix(web): stop cutting GitHub titles through the middle of a character Defect: the homepage wire strip shortened long titles with `title.slice(0, 70)`, and the roadmap summaries with `stripped.slice(0, 137)`. `slice` counts UTF-16 code units, so when the cut lands between the two halves of a surrogate pair the output ends in a lone surrogate. GitHub issue, pull request and release titles carry emoji routinely; the reader sees U+FFFD — the black-diamond question mark — immediately before the ellipsis. Verified: a title of 69 ASCII characters followed by U+1F40B yields a string whose last code unit is 0xD83D. The same `.length` test also miscounted: an astral character was two characters toward the budget, so a 40-emoji title was treated as 80 characters and truncated at 35. Fix: one code-point-safe `truncateChars` in lib/truncate.ts, used by both surfaces. Character budgets and thresholds are unchanged (70 for the ticker; cut at 140, keep 137 for roadmap notes), so nothing but the broken cut moves. Also corrected a false comment in summarizeReleaseBody: it claimed to strip trailing emoji, which it has never done. Evidence: lib/truncate.test.ts. Restoring `value.slice(...)` in the helper fails "never splits an astral character in half" (a lone surrogate survives the well-formed-pair filter) and "counts code points, not UTF-16 code units". The last case pins both call sites onto the shared rule. npm test 322 passed, npm run lint clean, npx tsc --noEmit clean. Implemented with agent assistance. Signed-off-by: Hunter Bown <hmbown@gmail.com> | 15 天前 | |
feat(web): put contributors on the homepage wire The ticker printed `ISS #1234 title · 3h` for whatever the issues and pulls endpoints last touched. It proved the repo was awake and nothing else: no merges, no releases, no names, and English chrome on nine translated pages. It now reports events, in the reader's language, with the person who did the work named: - Merged pull requests carry the contributor's handle. `merged_at`, `author_association`, and the login all arrive in the list payload we already fetch, so naming @bistack or @shenjackyuanjie beside their merge costs nothing extra. - Opened and closed issues carry who filed them. - Releases appear. That is the one added endpoint — `/releases?per_page=5`, cached an hour, ~1 request/hour. Three cached calls total, ~13 req/h unauthenticated against GitHub's 60/h/IP, and no per-item follow-ups. - GitHub's own FIRST_TIME_CONTRIBUTOR verdict marks a newcomer's contribution. Copied verbatim, never inferred from the size of the window we happened to fetch, and it stops on its own as GitHub recomputes it. Two honesty fixes the live render forced: Each verb is now dated by its own event — `merged_at`, `closed_at`, `published_at` — not by `updatedAt`. An issue opened in March and commented on this morning was reading as "opened, 12 minutes ago". Drafts are gone from the strip. A draft is its author's own not-ready marker, and on this repo agents open them in batches: five of the twenty items in the first live check were draft PRs from one bot, crowding out the merges. They return the moment they are opened or merged. A busy week could also bury the newest release entirely, so a release published in the last sixty days keeps a slot — carrying its real date, so a quiet quarter still reads as a quiet quarter rather than pinning an old tag beside today's merges. Verbs, the by-line, the first-contribution mark, and the strip's aria-label are dictionary keys in all ten locales; titles, tags, and handles are the repository's own record and stay verbatim. Ages format through CLDR off the locale's existing `dateLocale`, the same way the masthead already sets its date, with the compact English form as fallback where Intl data is missing. Empty stays empty: an unreachable or fully-filtered feed removes the strip rather than rendering a skeleton. Reduced motion now lets the frozen track scroll instead of clipping every entry past the fold. Verified: tsc, check:locales, check:facts, check:docs, 248 tests, lint, and a 288-page production build all clean. Live `next dev` against the real repo rendered 15 entries on /en and /zh — merges by @Inference1 and @h3c-hexin, issues by @vFONGv, @bistack, @shenjackyuanjie, @rafaelcavalheri, the v0.9.3 release, Chinese verbs and relative times throughout. Pointed at an unreachable repo, both locales render fully with no ticker and no leaked dictionary tokens. | 1 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 4 天前 | ||
| 4 天前 | ||
| 5 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 24 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 17 天前 | ||
| 16 天前 | ||
| 16 天前 | ||
| 4 天前 | ||
| 4 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 5 天前 | ||
| 1 个月前 | ||
| 19 天前 | ||
| 6 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 16 天前 | ||
| 16 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 24 天前 | ||
| 24 天前 | ||
| 27 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 16 天前 | ||
| 3 个月前 | ||
| 6 天前 | ||
| 6 天前 | ||
| 4 天前 | ||
| 18 天前 | ||
| 4 天前 | ||
| 4 天前 | ||
| 6 天前 | ||
| 16 天前 | ||
| 4 天前 | ||
| 1 个月前 | ||
| 4 天前 | ||
| 4 天前 | ||
| 6 天前 | ||
| 5 天前 | ||
| 13 天前 | ||
| 4 天前 | ||
| 16 天前 | ||
| 13 天前 | ||
| 15 天前 | ||
| 15 天前 | ||
| 15 天前 | ||
| 1 个月前 | ||
| 16 天前 | ||
| 16 天前 | ||
| 16 天前 | ||
| 16 天前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 15 天前 | ||
| 15 天前 | ||
| 1 个月前 |