Skip to content

chore(deps)(deps): bump the production-dependencies group across 1 directory with 3 updates#8

Closed
dependabot[bot] wants to merge 698 commits intomainfrom
dependabot/npm_and_yarn/production-dependencies-fb77f41907
Closed

chore(deps)(deps): bump the production-dependencies group across 1 directory with 3 updates#8
dependabot[bot] wants to merge 698 commits intomainfrom
dependabot/npm_and_yarn/production-dependencies-fb77f41907

Conversation

@dependabot
Copy link
Copy Markdown
Contributor

@dependabot dependabot bot commented on behalf of github Mar 16, 2026

Bumps the production-dependencies group with 3 updates in the / directory: @anthropic-ai/claude-code, inquirer and @floating-ui/react.

Updates @anthropic-ai/claude-code from 2.1.56 to 2.1.76

Release notes

Sourced from @​anthropic-ai/claude-code's releases.

v2.1.76

What's changed

  • Added MCP elicitation support — MCP servers can now request structured input mid-task via an interactive dialog (form fields or browser URL)
  • Added new Elicitation and ElicitationResult hooks to intercept and override responses before they're sent back
  • Added -n / --name <name> CLI flag to set a display name for the session at startup
  • Added worktree.sparsePaths setting for claude --worktree in large monorepos to check out only the directories you need via git sparse-checkout
  • Added PostCompact hook that fires after compaction completes
  • Added /effort slash command to set model effort level
  • Added session quality survey — enterprise admins can configure the sample rate via the feedbackSurveyRate setting
  • Fixed deferred tools (loaded via ToolSearch) losing their input schemas after conversation compaction, causing array and number parameters to be rejected with type errors
  • Fixed slash commands showing "Unknown skill"
  • Fixed plan mode asking for re-approval after the plan was already accepted
  • Fixed voice mode swallowing keypresses while a permission dialog or plan editor was open
  • Fixed /voice not working on Windows when installed via npm
  • Fixed spurious "Context limit reached" when invoking a skill with model: frontmatter on a 1M-context session
  • Fixed "adaptive thinking is not supported on this model" error when using non-standard model strings
  • Fixed Bash(cmd:*) permission rules not matching when a quoted argument contains #
  • Fixed "don't ask again" in the Bash permission dialog showing the full raw command for pipes and compound commands
  • Fixed auto-compaction retrying indefinitely after consecutive failures — a circuit breaker now stops after 3 attempts
  • Fixed MCP reconnect spinner persisting after successful reconnection
  • Fixed LSP plugins not registering servers when the LSP Manager initialized before marketplaces were reconciled
  • Fixed clipboard copying in tmux over SSH — now attempts both direct terminal write and tmux clipboard integration
  • Fixed /export showing only the filename instead of the full file path in the success message
  • Fixed transcript not auto-scrolling to new messages after selecting text
  • Fixed Escape key not working to exit the login method selection screen
  • Fixed several Remote Control issues: sessions silently dying when the server reaps an idle environment, rapid messages being queued one-at-a-time instead of batched, and stale work items causing redelivery after JWT refresh
  • Fixed bridge sessions failing to recover after extended WebSocket disconnects
  • Fixed slash commands not found when typing the exact name of a soft-hidden command
  • Improved --worktree startup performance by reading git refs directly and skipping redundant git fetch when the remote branch is already available locally
  • Improved background agent behavior — killing a background agent now preserves its partial results in the conversation context
  • Improved model fallback notifications — now always visible instead of hidden behind verbose mode, with human-friendly model names
  • Improved blockquote readability on dark terminal themes — text is now italic with a left bar instead of dim
  • Improved stale worktree cleanup — worktrees left behind after an interrupted parallel run are now automatically cleaned up
  • Improved Remote Control session titles — now derived from your first prompt instead of showing "Interactive session"
  • Improved /voice to show your dictation language on enable and warn when your language setting isn't supported for voice input
  • Updated --plugin-dir to only accept one path to support subcommands — use repeated --plugin-dir for multiple directories
  • [VSCode] Fixed gitignore patterns containing commas silently excluding entire filetypes from the @-mention file picker

v2.1.75

No release notes provided.

v2.1.74

What's changed

  • Added actionable suggestions to /context command — identifies context-heavy tools, memory bloat, and capacity warnings with specific optimization tips
  • Added autoMemoryDirectory setting to configure a custom directory for auto-memory storage
  • Fixed memory leak where streaming API response buffers were not released when the generator was terminated early, causing unbounded RSS growth on the Node.js/npm code path
  • Fixed managed policy ask rules being bypassed by user allow rules or skill allowed-tools
  • Fixed full model IDs (e.g., claude-opus-4-5) being silently ignored in agent frontmatter model: field and --agents JSON config — agents now accept the same model values as --model

... (truncated)

Changelog

Sourced from @​anthropic-ai/claude-code's changelog.

2.1.76

  • Added MCP elicitation support — MCP servers can now request structured input mid-task via an interactive dialog (form fields or browser URL)
  • Added new Elicitation and ElicitationResult hooks to intercept and override responses before they're sent back
  • Added -n / --name <name> CLI flag to set a display name for the session at startup
  • Added worktree.sparsePaths setting for claude --worktree in large monorepos to check out only the directories you need via git sparse-checkout
  • Added PostCompact hook that fires after compaction completes
  • Added /effort slash command to set model effort level
  • Added session quality survey — enterprise admins can configure the sample rate via the feedbackSurveyRate setting
  • Fixed deferred tools (loaded via ToolSearch) losing their input schemas after conversation compaction, causing array and number parameters to be rejected with type errors
  • Fixed slash commands showing "Unknown skill"
  • Fixed plan mode asking for re-approval after the plan was already accepted
  • Fixed voice mode swallowing keypresses while a permission dialog or plan editor was open
  • Fixed /voice not working on Windows when installed via npm
  • Fixed spurious "Context limit reached" when invoking a skill with model: frontmatter on a 1M-context session
  • Fixed "adaptive thinking is not supported on this model" error when using non-standard model strings
  • Fixed Bash(cmd:*) permission rules not matching when a quoted argument contains #
  • Fixed "don't ask again" in the Bash permission dialog showing the full raw command for pipes and compound commands
  • Fixed auto-compaction retrying indefinitely after consecutive failures — a circuit breaker now stops after 3 attempts
  • Fixed MCP reconnect spinner persisting after successful reconnection
  • Fixed LSP plugins not registering servers when the LSP Manager initialized before marketplaces were reconciled
  • Fixed clipboard copying in tmux over SSH — now attempts both direct terminal write and tmux clipboard integration
  • Fixed /export showing only the filename instead of the full file path in the success message
  • Fixed transcript not auto-scrolling to new messages after selecting text
  • Fixed Escape key not working to exit the login method selection screen
  • Fixed several Remote Control issues: sessions silently dying when the server reaps an idle environment, rapid messages being queued one-at-a-time instead of batched, and stale work items causing redelivery after JWT refresh
  • Fixed bridge sessions failing to recover after extended WebSocket disconnects
  • Fixed slash commands not found when typing the exact name of a soft-hidden command
  • Improved --worktree startup performance by reading git refs directly and skipping redundant git fetch when the remote branch is already available locally
  • Improved background agent behavior — killing a background agent now preserves its partial results in the conversation context
  • Improved model fallback notifications — now always visible instead of hidden behind verbose mode, with human-friendly model names
  • Improved blockquote readability on dark terminal themes — text is now italic with a left bar instead of dim
  • Improved stale worktree cleanup — worktrees left behind after an interrupted parallel run are now automatically cleaned up
  • Improved Remote Control session titles — now derived from your first prompt instead of showing "Interactive session"
  • Improved /voice to show your dictation language on enable and warn when your language setting isn't supported for voice input
  • Updated --plugin-dir to only accept one path to support subcommands — use repeated --plugin-dir for multiple directories
  • [VSCode] Fixed gitignore patterns containing commas silently excluding entire filetypes from the @-mention file picker

2.1.75

  • Added 1M context window for Opus 4.6 by default for Max, Team, and Enterprise plans (previously required extra usage)
  • Added /color command for all users to set a prompt-bar color for your session
  • Added session name display on the prompt bar when using /rename
  • Added last-modified timestamps to memory files, helping Claude reason about which memories are fresh vs. stale
  • Added hook source display (settings/plugin/skill) in permission prompts when a hook requires confirmation
  • Fixed voice mode not activating correctly on fresh installs without toggling /voice twice
  • Fixed the Claude Code header not updating the displayed model name after switching models with /model or Option+P
  • Fixed session crash when an attachment message computation returns undefined values
  • Fixed Bash tool mangling ! in piped commands (e.g., jq 'select(.x != .y)' now works correctly)
  • Fixed managed-disabled plugins showing up in the /plugin Installed tab — plugins force-disabled by your organization are now hidden

... (truncated)

Commits
  • 420a188 chore: Update CHANGELOG.md
  • 48b1c6c chore: Update CHANGELOG.md
  • 2dc1e69 Merge pull request #33472 from anthropics/kashyap/code-review-batch-output
  • db8834b feat(code-review): pass confirmed=true when posting inline comments
  • 6f049b6 chore: Update CHANGELOG.md
  • 45b5430 chore: Update CHANGELOG.md
  • f6dbf44 chore: Update CHANGELOG.md
  • 540b61b chore: Update CHANGELOG.md
  • 00553de chore: Update CHANGELOG.md
  • 53a5f3e chore: Update CHANGELOG.md
  • Additional commits viewable in compare view

Updates inquirer from 13.3.0 to 13.3.2

Release notes

Sourced from inquirer's releases.

inquirer@13.3.2

  • Fix broken 1.3.1 release process.

inquirer@13.3.1

  • Bump dependencies
Commits
  • b218fcc chore: Publish new release
  • b6aabed fix: set prepublish script
  • 1ce0319 chore: Publish new release
  • 62a1b2d Merge pull request #2031 from SBoudrias/sboudrias/debug-xterm-80g
  • 09fcc6c chore(@​inquirer/testing): fix formatting
  • 56bdf30 fix(@​inquirer/testing): resolve xterm CJS named export error under native Nod...
  • 58d3bf0 chore(deps): Bump brace-expansion from 1.1.11 to 1.1.12 (#2029)
  • f9a3adb Merge pull request #2026 from SBoudrias/emdash/semver-315
  • 264f5da chore(setup-packages): simplify coerce using tryParseRange
  • feab678 chore(setup-packages): replace semver with std-semver
  • Additional commits viewable in compare view

Updates @floating-ui/react from 0.27.18 to 0.27.19

Release notes

Sourced from @​floating-ui/react's releases.

@​floating-ui/react@​0.27.19

Patch Changes

  • fix(useDismiss): ignore non-primary inside mouse presses for click outside dismissal
  • fix(react): fix shadow root host lookup when one of the parent elements is an anchor
  • Update dependencies: @floating-ui/utils@0.2.11, @floating-ui/react-dom@2.1.8
Changelog

Sourced from @​floating-ui/react's changelog.

0.27.19

Patch Changes

  • fix(useDismiss): ignore non-primary inside mouse presses for click outside dismissal
  • fix(react): fix shadow root host lookup when one of the parent elements is an anchor
  • Update dependencies: @floating-ui/utils@0.2.11, @floating-ui/react-dom@2.1.8
Commits
  • d8020ee chore: version packages (#3445)
  • fa093f3 fix(react): right-click dismiss with click outside (#3449)
  • d2681d5 fix(react): markOthers shadow root host lookup when parent chain contains anc...
  • See full diff in compare view

Dependabot 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 rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore <dependency name> major version will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
  • @dependabot ignore <dependency name> minor version will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
  • @dependabot ignore <dependency name> will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
  • @dependabot unignore <dependency name> will remove all of the ignore conditions of the specified dependency
  • @dependabot unignore <dependency name> <ignore condition> will remove the ignore condition of the specified dependency and ignore conditions

devindown and others added 30 commits January 31, 2026 01:07
Next.js docs cache committed so all devs get instant access
without running npx @next/codemod agents-md locally.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat(my-app): enable React Compiler + blog polish [deploy my-app]

- Enable React Compiler for automatic memoization (no manual useMemo/useCallback)
- Add Next.js DevTools MCP config for agent-assisted development
- Remove hardcoded Korean fallbacks from blog pages (use i18n keys only)
- Remove container background color from blog pages
- Refine blog description copy (ko/en/ja)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(my-app): add beta polish sprint devlog

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* feat(my-app): enable React Compiler + blog polish [deploy my-app]

- Enable React Compiler for automatic memoization (no manual useMemo/useCallback)
- Add Next.js DevTools MCP config for agent-assisted development
- Remove hardcoded Korean fallbacks from blog pages (use i18n keys only)
- Remove container background color from blog pages
- Refine blog description copy (ko/en/ja)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(my-app): add beta polish sprint devlog

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(hua-ui): centralize dark mode variant in base.css [deploy my-app]

Tailwind v4 defaults dark: to @media prefers-color-scheme, but
next-themes uses class="dark". Each app had to manually add
@custom-variant dark — now it lives in a single base.css that
recommended-theme.css auto-imports and custom-theme apps can
import directly.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…attern (#338)

Phase 1 — hua-ux entrypoint separation:
- Add framework/shared.ts (no "use client") for types + pure functions
- Slim down framework/index.ts, re-export shared for backward compat
- Extend framework/server.ts with shared re-export
- Add tsup entry + package.json exports for framework/shared

Phase 2 — CSS variable pattern standardization:
- Add dark mode --color-* overrides to recommended-theme.css
- Remove @media (prefers-color-scheme: dark) from my-site, my-docs
- Fix @theme circular reference in hue (hsl(var(--*)) → direct values)
- Migrate my-chat from OKLCH to HSL
- Add recommended-theme.css import to my-api
- Add @theme block to my-app (Cyan primary)

Phase 3 — Documentation:
- Update framework README with import paths table
- Update my-docs theming guide with standard CSS pattern
- Add framework/shared to hua-ux package page exports table
- Add devlog

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
- Extract client components from 6 page.tsx files (admin, announcements, blog)
- LoadingOverlay: internal message rotation (5s interval, fade animation)
- LoadingSpinner: thicker borders for lg/xl sizes, improved dark mode contrast
- i18n loading messages renewal (ko: gentle, en: upbeat, ja: emotional)
- Fix offline detection false positive (verifyConnection timeout vs slow dev server)
- Unify date formatters in diary/[id] to use useDateFormatter hook

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
P0 hotfixes from PR #339 follow-up:

1. Fix draft reload causing duplicate drafts
   - Clear currentDraftId after deleting loaded draft
   - Prevents auto-save from trying to update deleted draft ID

2. Fix HTML entity escape for slash character
   - Remove unnecessary / -> &#x2F; escape in sanitizeInput
   - Slash is not a significant XSS vector

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
- DashboardSidebar: auto-close on mobile when menu item clicked
- BlogCard: scroll reveal animation with staggered delay
- BlogEditor: disable localStorage autoSave (use DB draft instead)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…ates (#351)

Bumps the production-dependencies group with 12 updates:

| Package | From | To |
| --- | --- | --- |
| [@anthropic-ai/claude-code](https://github.com/anthropics/claude-code) | `2.1.19` | `2.1.29` |
| [pnpm](https://github.com/pnpm/pnpm/tree/HEAD/pnpm) | `10.28.1` | `10.28.2` |
| [zustand](https://github.com/pmndrs/zustand) | `5.0.10` | `5.0.11` |
| [next](https://github.com/vercel/next.js) | `16.1.4` | `16.1.6` |
| [react](https://github.com/facebook/react/tree/HEAD/packages/react) | `19.2.3` | `19.2.4` |
| [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) | `19.2.3` | `19.2.4` |
| [@aws-sdk/client-ses](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-ses) | `3.975.0` | `3.980.0` |
| [@supabase/supabase-js](https://github.com/supabase/supabase-js/tree/HEAD/packages/core/supabase-js) | `2.91.1` | `2.93.3` |
| [next-intl](https://github.com/amannn/next-intl) | `4.7.0` | `4.8.1` |
| [framer-motion](https://github.com/motiondivision/motion) | `12.29.0` | `12.29.2` |
| [@sentry/nextjs](https://github.com/getsentry/sentry-javascript) | `10.36.0` | `10.38.0` |
| [pg](https://github.com/brianc/node-postgres/tree/HEAD/packages/pg) | `8.17.2` | `8.18.0` |


Updates `@anthropic-ai/claude-code` from 2.1.19 to 2.1.29
- [Release notes](https://github.com/anthropics/claude-code/releases)
- [Changelog](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md)
- [Commits](anthropics/claude-code@v2.1.19...v2.1.29)

Updates `pnpm` from 10.28.1 to 10.28.2
- [Release notes](https://github.com/pnpm/pnpm/releases)
- [Changelog](https://github.com/pnpm/pnpm/blob/v10.28.2/pnpm/CHANGELOG.md)
- [Commits](https://github.com/pnpm/pnpm/commits/v10.28.2/pnpm)

Updates `zustand` from 5.0.10 to 5.0.11
- [Release notes](https://github.com/pmndrs/zustand/releases)
- [Commits](pmndrs/zustand@v5.0.10...v5.0.11)

Updates `next` from 16.1.4 to 16.1.6
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](vercel/next.js@v16.1.4...v16.1.6)

Updates `react` from 19.2.3 to 19.2.4
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.2.4/packages/react)

Updates `react-dom` from 19.2.3 to 19.2.4
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.2.4/packages/react-dom)

Updates `@aws-sdk/client-ses` from 3.975.0 to 3.980.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-ses/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.980.0/clients/client-ses)

Updates `@supabase/supabase-js` from 2.91.1 to 2.93.3
- [Release notes](https://github.com/supabase/supabase-js/releases)
- [Changelog](https://github.com/supabase/supabase-js/blob/master/packages/core/supabase-js/CHANGELOG.md)
- [Commits](https://github.com/supabase/supabase-js/commits/v2.93.3/packages/core/supabase-js)

Updates `next-intl` from 4.7.0 to 4.8.1
- [Release notes](https://github.com/amannn/next-intl/releases)
- [Changelog](https://github.com/amannn/next-intl/blob/main/CHANGELOG.md)
- [Commits](amannn/next-intl@v4.7.0...v4.8.1)

Updates `framer-motion` from 12.29.0 to 12.29.2
- [Changelog](https://github.com/motiondivision/motion/blob/main/CHANGELOG.md)
- [Commits](motiondivision/motion@v12.29.0...v12.29.2)

Updates `@sentry/nextjs` from 10.36.0 to 10.38.0
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md)
- [Commits](getsentry/sentry-javascript@10.36.0...10.38.0)

Updates `pg` from 8.17.2 to 8.18.0
- [Changelog](https://github.com/brianc/node-postgres/blob/master/CHANGELOG.md)
- [Commits](https://github.com/brianc/node-postgres/commits/pg@8.18.0/packages/pg)

---
updated-dependencies:
- dependency-name: "@anthropic-ai/claude-code"
  dependency-version: 2.1.29
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: pnpm
  dependency-version: 10.28.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: zustand
  dependency-version: 5.0.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: next
  dependency-version: 16.1.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: react
  dependency-version: 19.2.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: react-dom
  dependency-version: 19.2.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@aws-sdk/client-ses"
  dependency-version: 3.980.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: "@supabase/supabase-js"
  dependency-version: 2.93.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: next-intl
  dependency-version: 4.8.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: framer-motion
  dependency-version: 12.29.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@sentry/nextjs"
  dependency-version: 10.38.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: pg
  dependency-version: 8.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…3 updates (#352)

Bumps the development-dependencies group with 23 updates:

| Package | From | To |
| --- | --- | --- |
| [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) | `9.39.1` | `9.39.2` |
| [@vitest/browser-playwright](https://github.com/vitest-dev/vitest/tree/HEAD/packages/browser-playwright) | `4.0.17` | `4.0.18` |
| [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) | `4.0.14` | `4.0.18` |
| [node-gyp](https://github.com/nodejs/node-gyp) | `12.1.0` | `12.2.0` |
| [playwright](https://github.com/microsoft/playwright) | `1.57.0` | `1.58.1` |
| [tsx](https://github.com/privatenumber/tsx) | `4.20.5` | `4.21.0` |
| [turbo](https://github.com/vercel/turborepo) | `2.6.3` | `2.8.1` |
| [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.52.0` | `8.54.0` |
| [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `4.0.14` | `4.0.18` |
| [@tailwindcss/postcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss) | `4.1.13` | `4.1.18` |
| [autoprefixer](https://github.com/postcss/autoprefixer) | `10.4.21` | `10.4.24` |
| [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) | `4.1.13` | `4.1.18` |
| [eslint](https://github.com/eslint/eslint) | `9.39.1` | `9.39.2` |
| [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) | `16.0.4` | `16.1.6` |
| [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) | `8.48.0` | `8.54.0` |
| [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) | `8.48.0` | `8.54.0` |
| [@playwright/test](https://github.com/microsoft/playwright) | `1.57.0` | `1.58.1` |
| [@types/nodemailer](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/nodemailer) | `7.0.4` | `7.0.9` |
| [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) | `6.8.0` | `6.9.1` |
| [@testing-library/react](https://github.com/testing-library/react-testing-library) | `16.3.0` | `16.3.2` |
| [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) | `5.1.1` | `5.1.2` |
| [ts-jest](https://github.com/kulshekhar/ts-jest) | `29.4.3` | `29.4.6` |
| [jsdom](https://github.com/jsdom/jsdom) | `27.2.0` | `27.4.0` |


Updates `@eslint/js` from 9.39.1 to 9.39.2
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/commits/v9.39.2/packages/js)

Updates `@vitest/browser-playwright` from 4.0.17 to 4.0.18
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.0.18/packages/browser-playwright)

Updates `@vitest/coverage-v8` from 4.0.14 to 4.0.18
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.0.18/packages/coverage-v8)

Updates `node-gyp` from 12.1.0 to 12.2.0
- [Release notes](https://github.com/nodejs/node-gyp/releases)
- [Changelog](https://github.com/nodejs/node-gyp/blob/main/CHANGELOG.md)
- [Commits](nodejs/node-gyp@v12.1.0...v12.2.0)

Updates `playwright` from 1.57.0 to 1.58.1
- [Release notes](https://github.com/microsoft/playwright/releases)
- [Commits](microsoft/playwright@v1.57.0...v1.58.1)

Updates `tsx` from 4.20.5 to 4.21.0
- [Release notes](https://github.com/privatenumber/tsx/releases)
- [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs)
- [Commits](privatenumber/tsx@v4.20.5...v4.21.0)

Updates `turbo` from 2.6.3 to 2.8.1
- [Release notes](https://github.com/vercel/turborepo/releases)
- [Changelog](https://github.com/vercel/turborepo/blob/main/RELEASE.md)
- [Commits](vercel/turborepo@v2.6.3...v2.8.1)

Updates `typescript-eslint` from 8.52.0 to 8.54.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.54.0/packages/typescript-eslint)

Updates `vitest` from 4.0.14 to 4.0.18
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.0.18/packages/vitest)

Updates `@tailwindcss/postcss` from 4.1.13 to 4.1.18
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.18/packages/@tailwindcss-postcss)

Updates `autoprefixer` from 10.4.21 to 10.4.24
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md)
- [Commits](postcss/autoprefixer@10.4.21...10.4.24)

Updates `tailwindcss` from 4.1.13 to 4.1.18
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.18/packages/tailwindcss)

Updates `eslint` from 9.39.1 to 9.39.2
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](eslint/eslint@v9.39.1...v9.39.2)

Updates `eslint-config-next` from 16.0.4 to 16.1.6
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/commits/v16.1.6/packages/eslint-config-next)

Updates `@typescript-eslint/eslint-plugin` from 8.48.0 to 8.54.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.54.0/packages/eslint-plugin)

Updates `@typescript-eslint/parser` from 8.48.0 to 8.54.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.54.0/packages/parser)

Updates `@playwright/test` from 1.57.0 to 1.58.1
- [Release notes](https://github.com/microsoft/playwright/releases)
- [Commits](microsoft/playwright@v1.57.0...v1.58.1)

Updates `@types/nodemailer` from 7.0.4 to 7.0.9
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/nodemailer)

Updates `@testing-library/jest-dom` from 6.8.0 to 6.9.1
- [Release notes](https://github.com/testing-library/jest-dom/releases)
- [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md)
- [Commits](testing-library/jest-dom@v6.8.0...v6.9.1)

Updates `@testing-library/react` from 16.3.0 to 16.3.2
- [Release notes](https://github.com/testing-library/react-testing-library/releases)
- [Changelog](https://github.com/testing-library/react-testing-library/blob/main/CHANGELOG.md)
- [Commits](testing-library/react-testing-library@v16.3.0...v16.3.2)

Updates `@vitejs/plugin-react` from 5.1.1 to 5.1.2
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@5.1.2/packages/plugin-react)

Updates `ts-jest` from 29.4.3 to 29.4.6
- [Release notes](https://github.com/kulshekhar/ts-jest/releases)
- [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md)
- [Commits](kulshekhar/ts-jest@v29.4.3...v29.4.6)

Updates `jsdom` from 27.2.0 to 27.4.0
- [Release notes](https://github.com/jsdom/jsdom/releases)
- [Changelog](https://github.com/jsdom/jsdom/blob/main/Changelog.md)
- [Commits](jsdom/jsdom@27.2.0...27.4.0)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.39.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development-dependencies
- dependency-name: "@vitest/browser-playwright"
  dependency-version: 4.0.18
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development-dependencies
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 4.0.18
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development-dependencies
- dependency-name: node-gyp
  dependency-version: 12.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development-dependencies
- dependency-name: playwright
  dependency-version: 1.58.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development-dependencies
- dependency-name: tsx
  dependency-version: 4.21.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development-dependencies
- dependency-name: turbo
  dependency-version: 2.8.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development-dependencies
- dependency-name: typescript-eslint
  dependency-version: 8.54.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development-dependencies
- dependency-name: vitest
  dependency-version: 4.0.18
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development-dependencies
- dependency-name: "@tailwindcss/postcss"
  dependency-version: 4.1.18
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development-dependencies
- dependency-name: autoprefixer
  dependency-version: 10.4.24
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development-dependencies
- dependency-name: tailwindcss
  dependency-version: 4.1.18
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development-dependencies
- dependency-name: eslint
  dependency-version: 9.39.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development-dependencies
- dependency-name: eslint-config-next
  dependency-version: 16.1.6
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development-dependencies
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-version: 8.54.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development-dependencies
- dependency-name: "@typescript-eslint/parser"
  dependency-version: 8.54.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development-dependencies
- dependency-name: "@playwright/test"
  dependency-version: 1.58.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development-dependencies
- dependency-name: "@types/nodemailer"
  dependency-version: 7.0.9
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development-dependencies
- dependency-name: "@testing-library/jest-dom"
  dependency-version: 6.9.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development-dependencies
- dependency-name: "@testing-library/react"
  dependency-version: 16.3.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development-dependencies
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 5.1.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development-dependencies
- dependency-name: ts-jest
  dependency-version: 29.4.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development-dependencies
- dependency-name: jsdom
  dependency-version: 27.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: gr22nist <echonet.ais@gmail.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Bumps [openai](https://github.com/openai/openai-node) from 4.104.0 to 6.17.0.
- [Release notes](https://github.com/openai/openai-node/releases)
- [Changelog](https://github.com/openai/openai-node/blob/master/CHANGELOG.md)
- [Commits](openai/openai-node@v4.104.0...v6.17.0)

---
updated-dependencies:
- dependency-name: openai
  dependency-version: 6.17.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.19.17 to 25.2.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 25.2.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: gr22nist <echonet.ais@gmail.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Bumps [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/core) from 8.6.14 to 10.2.3.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v10.2.3/code/core)

---
updated-dependencies:
- dependency-name: storybook
  dependency-version: 10.2.3
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: gr22nist <echonet.ais@gmail.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
No .storybook config, no .stories files, no source imports.
Was installed but never implemented. Can re-add when actually needed.

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* chore: remove empty/unused packages and turbo references

Remove packages with no source code (only dist/boilerplate):
- packages/create-hua (wrapper for create-hua-ux)
- packages/hua-i18n-advanced, hua-i18n-ai, hua-i18n-debug, hua-i18n-plugins
- packages/hua-motion, hua-motion-advanced (migrated to motion-core)
- packages/sdui-core, sdui-inspector, sdui-renderers
- apps/hua-labs, hua-motion, sdui-studio

Clean up turbo.json references for removed packages.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs: add devlog for 2026-02-02 security hardening and cleanup

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* chore: remove unused dependencies from my-app and my-api

my-app: remove @google/generative-ai, @hookform/resolvers,
react-hook-form, next-intl, dotenv (5 packages)

my-api: remove dotenv, next-intl (2 packages)

Verified via depcheck + manual source code audit.
Kept false positives: @hua-labs/i18n-*, lucide-react (indirect usage),
@prisma/client-runtime-utils, pretendard (config/CSS).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(my-api): fix recharts labelFormatter type error

formatDate parameter type changed to accept ReactNode
from recharts Tooltip labelFormatter prop.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* fix: toFixed crash, phosphor icon mapping, and title name leak

- Wrap .toFixed() calls with Number() to handle null/string values
- Add 'layers' (Stack) and 'ban' (Prohibit) to phosphor icon mapping
- Strengthen STRICT_NO_NAMES rule in analysis prompt for title section

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: DiaryDetail toFixed crash, reduce notification polling, remove verbose logs

- Wrap cost_usd/total_tokens with Number() in DiaryDetailClient
- Change unread notification polling from 30s to 2min when unread > 0
- Remove ~30 console.log statements from draft API routes and quota-check

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(ux): delay auto-save by 2min after entering write page

Give users time to pick a date before the first auto-save fires.
Also remove remaining console.log noise from useAutoSave hook.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(security): AI 통합 익명화 파이프라인 + phosphor icon fix

- anonymizeWithAI(): gpt-4o-mini 단일 호출로 이름 익명화 + PII 마스킹 + 위험 감지 통합
- 실서비스 파이프라인(stream, hua-emotion-analysis) + E2E 테스트 동일 함수 사용
- AI 실패 시 regex fallback 자동 적용
- phosphor 'activity' 아이콘 매핑 수정 (Activity → Pulse)
- analysis-e2e 메타데이터 상하 배치 + detectedNames/riskReasoning/method 표시
- 아키텍처 문서 업데이트 (service-layer, api-layer)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(perf): singleton polling for unread notification count

useUnreadNotificationCount가 Header, NotificationDrawer, notifications/page
3곳에서 각각 독립 setInterval → 동일 API 3배 호출 문제 수정.
모듈 레벨 글로벌 싱글턴 + useSyncExternalStore로 타이머 1개만 유지.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Remove ~95K lines of outdated, auto-generated, and duplicate documentation:
- Delete legacy guides, planning, security, templates, code-review folders
- Remove apps/my-app/internal (superseded by collab docs)
- Flatten collab/my-app/ → collab/
- Move my-app devlogs to root docs/devlogs/
- Update CLAUDE.md and docs/README.md paths

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* fix(admin): show actual sentiment score instead of hardcoded 51

- Store 1st analysis sentiment (1-100) in HuaEmotionAnalysis.sentiment_score
  via transformHUAResultForDB()
- SentimentScoreCard: add source prop to handle different score scales
- Remove token/model panel folding - always show expanded
- Document sentiment_score cleanup needed in P1 tasks

[deploy my-app]

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(admin): clean up sentiment_score schema and add backfill API

- Remove unused convertSentimentToScore/Safe functions from sentiment-utils.ts
- Fix schema comment: HuaEmotionAnalysis.sentiment_score is 1-100 integer, not -1~1
- Add POST /api/admin/backfill-sentiment for existing diary backfill (dry_run support)
- Update P1 tasks doc with cleanup status

[deploy my-app]

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(ux): modal size system overhaul + metrics modal + console cleanup [deploy my-app]

- Modal package: fixed-width (md:w-XX) → max-width based responsive system
- Reduced modal sizes site-wide (SearchModal 2xl→lg, DraftModal 3xl→xl)
- MetricsModal: replaced range/focus with direction/sentiment metrics
- i18n guides: individual keys → array using getRawValue
- Removed 6 dev console.logs (hydration/sync noise)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* chore: trigger deployment [deploy my-app]

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…app] (#360)

* feat(security): add GCP Cloud KMS envelope encryption support

- Add kms-client.ts: KMS wrap/unwrap, envelope encrypt/decrypt
- Add smart encrypt/decrypt functions with auto format detection
- Envelope format: version(1) + wrappedDEK_len(2) + wrappedDEK + iv + authTag + ciphertext
- Falls back to existing PBKDF2 when KMS is not configured
- Old encrypted data (PBKDF2) is auto-detected and decrypted normally

Env vars needed (when ready):
- GCP_KMS_KEY_NAME: projects/{id}/locations/{loc}/keyRings/{ring}/cryptoKeys/{key}
- GCP_KMS_CREDENTIALS: base64-encoded service account JSON

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs: add GCP Cloud KMS setup guide for envelope encryption

Step-by-step guide for KMS API activation, key creation,
service account setup, and Vercel env configuration.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* feat(security): add GCP Cloud KMS envelope encryption support

- Add kms-client.ts: KMS wrap/unwrap, envelope encrypt/decrypt
- Add smart encrypt/decrypt functions with auto format detection
- Envelope format: version(1) + wrappedDEK_len(2) + wrappedDEK + iv + authTag + ciphertext
- Falls back to existing PBKDF2 when KMS is not configured
- Old encrypted data (PBKDF2) is auto-detected and decrypted normally

Env vars needed (when ready):
- GCP_KMS_KEY_NAME: projects/{id}/locations/{loc}/keyRings/{ring}/cryptoKeys/{key}
- GCP_KMS_CREDENTIALS: base64-encoded service account JSON

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs: add GCP Cloud KMS setup guide for envelope encryption

Step-by-step guide for KMS API activation, key creation,
service account setup, and Vercel env configuration.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(my-app): add KMS re-encrypt batch script

Migrates existing PBKDF2-encrypted diary entries and analysis results
to GCP Cloud KMS envelope encryption. Supports dry-run mode.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs: add KMS migration TODO + pending devlogs and references

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(my-app): complete KMS envelope encryption migration

Phase 1-5 완료:
- motivation_cues 암호화 (스키마 + 저장로직 + 마이그레이션)
- 새 분석은 KMS envelope encryption으로 암호화
- PBKDF2 함수들 @deprecated 처리
- kms-client.ts server-only 추가
- protobufjs 의존성 추가 (빌드 호환)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* refactor(i18n): unify "later diary" translation keys and fix MarkdownRenderer type error

- Rename delayed_diary → later_diary in common.json (ko/en/ja)
- Remove duplicate delayedDiary keys from search.json and admin.json
- Rename delayedEntry/delayedDiary → laterEntry/laterDiary in admin.json
- Unify diary.json delayed.title/editorTitle across all languages
- Unify about.json delayed.title across all languages
- Update 5 components to use common:later_diary
- Fix MarkdownRenderer: replace hardcoded APP_NAME map with t('common:brandName')
- Add "fix existing build errors" principle to CLAUDE.md

[deploy my-app]

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Move the preview/edit toggle button from the header to the language tabs
bar and make it sticky, so users can switch between edit and preview
without scrolling back to the top.

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* feat(hua-ui): move preview toggle to sticky language tabs

Move the preview/edit toggle button from the header to the language tabs
bar and make it sticky, so users can switch between edit and preview
without scrolling back to the top.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(my-app): diary list UI redesign with minimal square cards

- FilterSortBar: chip-style segmented control instead of dropdowns
- DiaryListItem: minimal square card layout (aspect-square)
  - Title: 2-line fixed height
  - Question: 3-line preview
  - Footer: date + later diary badge
  - Hover: delete/edit buttons
- Grid: 4 > 2 > 1 column responsive (lg/sm/mobile)
- Items per page: 6 → 8
- i18n keys added for stats and search
- StatsCard/Dashboard: unified rounded-2xl
- Card component: fixed hoverable prop DOM warning
- CalendarSelectedDayList: removed i18n fallbacks, 4px grid

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
- Drop UserProfileMeta model (privacy compliance)
- Add characters_enc field to DiaryKeywords (KMS encrypted)
- Remove UserProfileMetaResponse type
- Refactor diary API routes
- Add CalendarEmptyState component
- Minor style fixes

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…age [deploy my-app] (#379)

* feat(encryption): extract KMS encryption to @hua-labs/encryption package

- Create @hua-labs/encryption package with envelope encryption
- Support GCP Cloud KMS with automatic PBKDF2 fallback
- Add smart encryption layer with auto-format detection
- Include utility functions (hash, HMAC, key generation)
- Provide /server export for Next.js App Router
- Update my-app to use package via re-export
- Add package extraction planning document

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* refactor(encryption): complete migration to @hua-labs/encryption package

- Add hashUserData and encryptAnalysisResultSmart to package
- Refactor lib/encryption.ts to re-export from package
- Migrate 14 API routes to use package directly
- Remove deprecated kms-client.ts (now in package)
- Keep app-specific functions (PBKDF2 for User table, cache-based)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* feat: add @hua-labs/docs-engine package and encryption tests

- Create @hua-labs/docs-engine package with reusable docs components:
  - SectionNavigation: TOC with scroll spy and mobile support
  - InstallGuide: npm/yarn/pnpm install tabs with CodeBlock
  - Types: ComponentMetadata, HookMetadata, I18nMetadata
- Update my-docs to use docs-engine via re-exports
- Add 26 unit tests for @hua-labs/encryption package:
  - utils.test.ts: hash functions, HMAC, key generation
  - legacy-pbkdf2.test.ts: PBKDF2 encrypt/decrypt
  - smart-encryption.test.ts: smart layer and analysis encryption
  - kms-client.test.ts: KMS detection and format checking

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(my-app): prevent PWA install prompt from showing after "never" selected

Add localStorage check inside beforeinstallprompt event handler to prevent
the prompt from reappearing on page navigation after user selects "never".

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* refactor(my-app): simplify PWA install prompt - remove "later" option

- Remove "later" button and 24-hour dismiss logic
- Keep only "install" and "never" options
- X button now triggers "never" (same as dismiss permanently)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
- i18n: support single brace {key} interpolation (backward compatible)
- Components: focus → focus-visible for better accessibility
  - Badge, Modal, Toast, Dropdown, Alert, Bookmark, ContextMenu, ScrollToTop
- LoadingSpinner dots: bounce → sequential pulse animation
- Add duration-200 ease-in-out to transitions
- Header: add focus:outline-none and ease-in-out

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…app] (#383)

* fix(hua-ui): Tailwind v4 dark mode background color issue

CSS 변수 기반 배경색 시스템으로 전환하여 Tailwind v4의
bg-* + dark:bg-* specificity 충돌 문제 해결.

- Toast: --toast-*-bg 변수 사용
- Badge: --badge-*-bg/text/border 변수 사용
- Modal: --modal-bg/border 변수 사용
- Dropdown: --dropdown-bg 변수 사용
- LoadingSpinner: 다크모드 track 대비 향상

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(hua-ui): Modal size and centering issues

- Remove w-full that was overriding max-w-* size classes
- Change min-h-full to h-full for proper vertical centering

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
- Move i18n-currency/, i18n-date/, i18n-number/ into i18n/formatters/
- Update i18n/README.md with new paths
- Add packages/README.md as index

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
- Add Claude skills: auto-impl, parallel-impl, typecheck
- Move notification docs out of my-app folder
- Delete duplicate blog post (already published elsewhere)
- Add component-vars.css for hua-ui styles
- Add .claude/settings*.json to gitignore

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…[deploy my-app] (#396)

* docs(claude): add development checklists and type check guide

- Add UI feature verification checklist (browser mechanism validation)
- Add environment variable removal checklist (build verification)
- Add Prisma import consistency rules
- Prioritize type check before build in workflow
- Add type check command examples

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(my-app): production console.log cleanup and SEO fixes

- Server-side: 22 files migrated from console.log to logger utility
- Client-side: 10 files with debug logs removed
- offline-storage.ts: 26 console.log instances wrapped with isDev guard
- robots.txt: domain corrected to sumdiary.com
- sitemap.ts: dynamic sitemap generation for static pages + blog posts
- styles.ts: removed TODO comment (cyan confirmed)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* perf(my-app): optimize API polling and fix hook performance issues

API call optimization:
- Notification polling: add visibilitychange listener, 10min in hidden tabs
- useAnnouncements/useBlogPosts/useImportantAnnouncement: hasFetchedRef guard
- useGuestDiaryMigration: add AbortController for fetch cleanup
- useAutoLogout: reduce activity check interval 1min → 5min

Hook performance fixes (16 issues across 12 files):
- HIGH: useScrollDetection, useTermsSteps, useKeyboardShortcuts,
  useBackNavigation — unstable deps stabilized with useRef
- MEDIUM: useSocialAuth, useDiaryMenu, useDiaryDelete, useProfileForm,
  useProfileImageUpload, useProfileSettings, useRegisterForm,
  useAISettings — handlers wrapped with useCallback
- useAISettings: remove debug artifacts, add VALID_PROVIDERS const

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: add retention system roadmap, beta checklist v2, and devlogs

- Retention & attachment system ideation document
  - Quick Entry, Sum-up reports, progress signals
  - 주호소 보고서 (Chief Complaint Report) concept
  - Multi-language naming: 숨고르기 / Sum-up / すみ記
- Beta launch checklist v2 (consolidated from v1 + new items)
- 3 devlogs for 2026-02-06 session work

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: remove legacy cursor skills, graphite plans, and archived docs

- .cursorrules: migrated to CLAUDE.md
- .cursor/skills/: 18 files — replaced by .claude/skills/
- GRAPHITE_STACK_*.md: obsolete stack plans
- _archive/my-docs/: stale package configs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor(my-app): improve useAISettings with code review feedback

- Extract userId from session for minimal dependency
- Add AbortController to loadSettings fetch
- Unify localStorage fallback logic (remove try/catch duplication)
- Validate provider in handleProviderChange with VALID_PROVIDERS
- Type state as AIProvider instead of string
- DEFAULT_PROVIDER from env var with type safety

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: add React profiling item to beta checklist

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
devindown and others added 24 commits March 11, 2026 15:17
Lightweight endpoint that responds without DB connection.
Used with Uptime Kuma to distinguish Vercel down vs DB down:
- /api/ping fails → Vercel is down
- /api/health fails (503) → DB is down

Also add *.tmp.* to .gitignore to prevent agent temp files from
being committed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…onents

* refactor(hua-ui): remove merge() from landing + core components (Phase 3)

Replace clsx+tailwind-merge merge() calls with dot string composition:
- 11 landing components: template literal concatenation
- Icon: ternary chains + array.filter(Boolean).join
- Action, ActionToolbar: array.filter(Boolean).join

Only scrollbar.tsx retains merge() — uses Tailwind scrollbar plugin
classes not supported by dot engine.

14 files, 19 merge() calls removed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: remove tmp file

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…ixes (#607)

Class mode adapter, 5 Codex findings fixed, 1629 tests pass
* feat(my-app): migrate admin dark: variants to semantic tokens

Replace gray/slate dark: variant pairs with CSS variable semantic tokens
(bg-background, bg-card, bg-muted, text-foreground, text-muted-foreground,
border-border) to eliminate SSR hydration mismatch.

Covers P0 (layout/shell), P1 (common components), and P2 pages:
- data management: diaries, deleted-diaries, users
- content: blog, announcements, test-diary, prompt-test
- monitoring: dashboard, errors, crisis, abuse, slip-analytics, performance
- not-found

Colored variants (red-*, green-*, etc.) intentionally preserved.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(my-app): migrate remaining admin dark: variants to semantic tokens

Second pass covering subcomponents and additional pages:
- diaries detail cards (DiaryInfo, EmotionFlow, HUAAnalysis, HUAParameters, ModelInfo, TokenUsage)
- monitoring (abuse, crisis, errors, performance, slip-analytics)
- users (roles, moderation, status)
- notifications (list, create, detail)
- empathy-beta, multilang-test

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(my-app): 3rd pass admin dark: → semantic tokens

Cover remaining patterns in:
- announcements, export, invite-codes (forms, inputs, labels)
- monitoring: abuse, crisis, performance, slip-analytics (charts, cards)
- mock-report: ApproachAvoidanceGauge, SentimentTrendSection, report-registry
- prompt-test: all subcomponents (AnalysisSettings, BatchProgress, FileUploader, ResultsPanel)
- diaries: TokenUsageCard, DiaryPagination

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(my-app): 4th pass admin dark: → semantic tokens (111→9 remaining)

Final sweep covering:
- multilang-test (39 patterns)
- notifications create/detail/list (50 patterns)
- prompt-test TestDataPreview, ResultsPanel
- test-diary

9 remaining are intentional keeps:
- bg-gray-200 dark:bg-gray-600 (unmapped special combo)
- bg-gray-50 dark:bg-gray-800/30 (opacity variant)
- border-gray-100 dark:border-gray-800 (uncertain mapping)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(my-app): final sweep — zero gray/slate dark: remaining

Clean up last 9 patterns:
- bg-gray-200 dark:bg-gray-600 → bg-muted (users badge)
- bg-gray-50 dark:bg-gray-750 → bg-muted (typo fix, gray-750 doesn't exist)
- bg-gray-100 dark:bg-gray-900 → bg-muted (notifications default badge)
- bg-gray-50 dark:bg-gray-800/30 → bg-muted (ResultsPanel)
- border-gray-100 dark:border-gray-800 → border-border (test-diary)
- text-gray-500 dark:text-gray-400 → text-muted-foreground

Admin gray/slate dark: count: 0 (excluding AdminSidebar className)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor(ui,ui-dashboard): DashboardSidebar itemDot/activeDot + semantic colors

Breaking: rename itemClassName/activeClassName → itemDot/activeDot
- hua-ui: replace hardcoded hex colors with CSS variable fallbacks
- hua-ui-dashboard: replace all dark:slate-* with semantic tokens
  (bg-background, text-foreground, text-muted-foreground, border-border,
  bg-accent, text-accent-foreground, hover:bg-muted)
- AdminSidebar: use activeDot/itemDot with semantic tokens

Both packages now respect dark mode via CSS variables automatically.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(ui,ui-dashboard): add deprecated itemClassName/activeClassName aliases

Restore backwards compatibility for external consumers:
- itemClassName falls back to itemDot
- activeClassName falls back to activeDot
- Both marked @deprecated in JSDoc

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: add devlog for admin semantic tokens migration

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Add group/peer to STANDALONE_TOKENS for class mode marker support.
Update dot-audit.ts to exclude known class-mode-only and out-of-scope tokens.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
## Summary
- 18+ hua-ui components: className → dot prop migration
- Responsive/state tokens: dotCSS() class mode for proper @media/@hover CSS rules
- Section + EmptyState public dot prop: dotCSS path (fixes API regression)
- LandingLogoCloud: removed useId/data-scope/!important tactical hack

## Codex Review
2 rounds — all findings closed. SSR render verified.
… (#611)

* chore: add 5 new skills (migrate, typecheck, impact, token-audit, plan)

Usage pattern analysis identified gaps in automation:
- /migrate: code migration workflow (grep→transform→verify)
- /typecheck: type check execution and error analysis
- /impact: file/path change impact analysis
- /token-audit: hardcoded color/style value audit
- /plan: structured execution plan template

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(dot,ui): design system sample page + focus ring + transition arbitrary values

- Add /admin/design-system page for spacing/radius/theme decisions
- Soften focus ring: box-shadow 1px with color-mix 50% opacity (Input, Textarea, Select)
- Select: size-responsive chevron padding (sm:8/md:12/lg:14)
- dot: add transition arbitrary value support (transition-[width], duration-[300ms], etc.)
- dot: fix unused variable in class.ts
- Replace admin-layout CSS class with dot equivalents (fixed inset-0 z-30)
- Form accessibility: add id/name to design-system inputs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(ui): design-system page dark mode — replace hardcoded hex with CSS variables

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor(ui): decompose dashboard — redistribute to data/feedback/navigation/interactive

Dissolve the monolithic advanced/dashboard subpath. Components now
exported from semantically appropriate subpaths:

- @hua-labs/ui/data: charts, cards, tables, lists, feeds, profiles
- @hua-labs/ui/feedback: EmptyState (promoted from DashboardEmptyState)
- @hua-labs/ui/navigation: Sidebar (promoted from DashboardSidebar)
- @hua-labs/ui/interactive: Toolbar (promoted from DashboardToolbar)
- @hua-labs/ui/interactive/kanban: Kanban board (@dnd-kit isolated)

PG-named components get generic aliases:
  TransactionsTable→DataTable, TransactionDetailDrawer→DetailDrawer,
  RoutingBreakdownCard→BreakdownCard, MerchantList→EntityList

@hua-labs/ui/advanced/dashboard kept as deprecated backward-compat
re-export barrel. Zero consumer-side breaking changes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* test: remove test for deleted top-level EmptyState

The test imported from the now-deleted components/EmptyState.tsx and
tested props (onAction, bordered, secondaryAction) that don't exist
on DashboardEmptyState. Consumers use DashboardEmptyState via
@hua-labs/ui/feedback or @hua-labs/ui/advanced/dashboard.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(ui): add type aliases to deprecated dashboard barrel

The generic aliases (EmptyState, Toolbar, Sidebar, DataTable, etc.)
in advanced/dashboard.ts only exported values without corresponding
type aliases (EmptyStateProps, ToolbarProps, etc.), causing TSC errors
for consumers importing new names from the deprecated path.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: add devlog — dashboard decomposition

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…DotStyleRegistry, metadata fixes (#614)

* docs: full audit — sync 7 doc.yaml (+183 entries), 5 new metadata, i18n fixes [deploy docs]

- Sync doc.yaml apiNotes across 7 packages: hua-utils (+27), hua-i18n-formatters (+24),
  hua-state (+10), hua-dot (+2), hua-motion-core (+40), hua-ui (+50), hua (+30)
- Fix empty-state metadata path (root → dashboard subpath)
- Create 5 new component metadata: DotNav, HorizontalScroll, ImageReveal, Section, Prose
- Convert 2 hardcoded texts to i18n translation keys
- Regenerate all README.md + ai.yaml via pnpm generate:docs
- Add 3 new skills: security-audit, restructure, changelog
- Add autonomous task infrastructure (.claude/tasks/)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(dot): restore responsive layouts — parser security + DotStyleRegistry + 98-file migration

dot() inline styles cannot generate @media queries, causing all responsive
tokens (md:, sm:, lg:) to be silently dropped after PR #610 migration.
Sidebar was permanently hidden, card grids collapsed to single column.

- Add arbitrary value whitelist in parseArbitrary() (parser-level security
  boundary for all adapters: web/native/flutter/compose/swiftui)
- Create DotStyleRegistry using useServerInsertedHTML for SSR CSS injection
- Migrate 173 responsive dot() → dotClass() across 98 files (0 remaining)
- Add 16 security tests (allow safe CSS functions, block injection vectors)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(docs): console errors, duplicate Props headings, metadata audit

- Fix gradient-text: extract from dot() to className (4 files)
- Fix group/group-hover: convert dot() to dotClass() (8 files, 11 locations)
- Fix language-menu-container: separate from dotClass in Header
- Fix missing categories.overlay translation key (en/ko)
- Add .gradient-text CSS class to globals.css
- Fix metadata.description missing t() wrapper (9 pages)
- Remove duplicate Props h2 headings (25 component pages)
- Audit & fix metadata props:
  - icon: remove non-existent "inherit" variant, add iconsaxVariant
  - input: remove className/ref (Omit), add leftIcon
  - badge: remove className (Omit)
  - card: replace className with animated prop
  - modal: rename backdropClassName to backdropDot
- Sync en/ko translation keys for all metadata changes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: update devlog — console errors, Props audit, metadata fixes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…le isolation

In Next.js App Router, server components and client components are bundled
separately. Module-level collectedRules was invisible to DotStyleRegistry
(client) when dotClass() was called in server components (pages). This caused
all responsive layouts to break in production — class names in HTML but no
corresponding CSS rules.

Fix: use globalThis for shared CSS collection between RSC server/client
bundles, and add browser-side CSS injection for client navigations.

[deploy docs]

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- hua-ui: v1.2→2.2 update (new subpaths, primitives, ESM-only build)
- dot: new architecture doc (v0.1.0, cross-platform style engine)
- i18n: add version/export metadata, dependency graph
- hua framework: rewrite to Korean, 18 export paths
- my-app: new architecture doc (AI emotion diary SaaS)
- my-docs: new architecture doc (docs site structure)
- my-site: new architecture doc (landing site structure)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…eploy docs]

* refactor(ui): cherry-pick dashboard consumer migration (non-conflicting)

Cherry-picked from #612 — excludes doc page JSX changes that conflict with #614's dotClass migration:

- ESLint: tsconfigRootDir + keysFile absolute path fix (4 configs)
- hua/hua-pro: split dashboard re-export into 5 semantic subpaths
- my-app: about page import migration + tsconfig path aliases
- Agent docs: export path tables updated for semantic subpaths
- Registry metadata: 22 files updated with new packageName/code examples
- i18n: new category translation keys (interactive, data)
- Docs: architecture, migration guide, devlog updated

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(docs): align doc pages with actual export surface

- Fix ui/page.tsx: Progress/ScrollToTop → root, CodeBlock → data,
  Tabs → interactive, add Data & Interactive categories
- Migrate 22 doc pages from advanced/dashboard to semantic subpaths
- Update component names to match new exports
- Regenerate i18n types for new translation keys
- Add 'table' translation key (en/ko)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(docs): unify EmptyState to @hua-labs/ui/feedback + restore eslint fix

- EmptyState: packageName, code examples, InstallGuide → all @hua-labs/ui/feedback
- Restore eslint keysFile/tsconfigRootDir absolute path (lint-staged reverted)
- Regenerate i18n types

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: add devlog for dashboard consumer semantic migration

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…, dot ecosystem [deploy my-app]

* fix(my-app): beta security hardening — XSS, error exposure, rate limits, input validation

CRITICAL: fix stored XSS in share-image (escapeHtml), remove error.message
client exposure (5 routes), remove DB error from /api/health, remove IP
from /api/guest/usage.

HIGH: migrate 60+ routes from NextResponse.json to apiError() system,
add rate limits to upload and notification endpoints, add Zod validation
to diary PUT, fail closed when webhook/cron secrets missing.

Add ANNOUNCEMENT_NOT_FOUND and BLOG_NOT_FOUND error codes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(my-app): medium security fixes — SVG upload block, CORS tightening, timing-safe auth

M1: Remove stack trace from draft route logging
M2: Admin maintenance already clean (verified)
M3: Block SVG uploads — explicit allowlist (jpeg, png, webp, gif)
M4: Replace CORS wildcard with origin allowlist + env var override
M5: Use crypto.timingSafeEqual for blog/sync GET token comparison
M6: Remove fallback secret from export token verification
M7: Remove *.vercel.app wildcard from hackathon CORS

Also add dot ecosystem strategy document.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(my-app): fix diary PUT date validation + profile error format

- UpdateDiaryRequestSchema: z.iso.datetime() → YYYY-MM-DD(T...)? pattern
  (matches CreateDiaryRequestSchema, fixes edit flow 400 error)
- useProfileSettings/useProfileForm: read data.error || data.message
  (supports both new apiError() and legacy response formats)

Fixes found by Codex review of PR #618.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(dot): add MCP server, LSP server, VS Code extension + fix 15 test failures

New packages:
- @hua-labs/dot-mcp: MCP server with dot_resolve, dot_explain, dot_complete, dot_validate tools
- @hua-labs/dot-lsp: LSP server with completion (~5000 entries), hover preview, diagnostics
- dot-vscode: VS Code extension client for dot-lsp (TS/TSX/JS/JSX activation)

Tests:
- Fix 15 pre-existing failures (gradient, color hex, padding scale, dotExplain)
- Add 51 new edge case tests (arbitrary values, !important, negative, opacity, cross-platform)
- Total: 2044 passing, 0 failures

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(my-app): add Edge-safe API middleware + fix jose dependency

H8: Create middleware.ts for global /api/* authentication:
- Edge Runtime compatible (no Prisma/crypto)
- Public path allowlist (health, translations, guest, auth, cron)
- GET-only public paths (blog, announcements)
- Session cookie existence check (actual validation in route handlers)
- Security headers (nosniff, DENY)

Also: add jose as devDependency to fix pre-existing build error,
sync CURRENT.md mirror.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: review round 2 — VSCode LSP server resolution, vsce dep, contact P2034 409

- extension.ts: resolve LSP server from bundled/node_modules/sibling with
  fs.existsSync checks, warning on missing server, client.start() error handling
- Add @vscode/vsce devDependency + copy-server.mjs packaging script
- Add TRANSACTION_CONFLICT error code (409) for Prisma P2034, restoring
  contact route's conflict response that regressed to 500

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(dot): LSP diagnostic offset + variant prefix stripping + MCP not-sr-only

- LSP: track searchFrom to fix duplicate token diagnostic offset (#1)
- LSP: strip variant prefixes (hover:, dark:, sm:) and !important before
  token lookup to prevent false positive diagnostics (#2)
- MCP: add not-sr-only to special case allowlist in dot_validate (#6)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: merge middleware auth into proxy.ts + LSP quote nesting + lockfile sync

- Delete middleware.ts — Next.js 16 only supports proxy.ts, both cannot coexist
- Merge API auth (session cookie check, public path allowlists) into proxy.ts
- LSP: split quote patterns so each only excludes its own quote type,
  fixing nested quote detection (e.g., font-['Inter'])
- Sync pnpm-lock.yaml with @vscode/vsce addition

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: move jose to dependencies + fix vscode prepackage hook

- my-app: move jose from devDependencies to dependencies — @auth/core
  imports jose at runtime, so it must be available in production builds
- dot-vscode: rename prebuild:package → prepackage so copy-server.mjs
  runs before `vsce package`

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(my-app): add /api/manifest and /api/og to public API allowlist

PWA manifest and OG image endpoints must be accessible without auth
for crawlers, link previews, and PWA install to work.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…eploy docs]

* feat(dot-lsp): expand completion coverage — filter, backdrop, grid, animation, transform

Add ~170 missing completion entries to match dot engine's full token set:
- filter: hue-rotate, drop-shadow, mix-blend modes
- backdrop: brightness, contrast, saturate, hue-rotate, opacity
- transition: spring/bounce/snap easing
- animation: all 5 preset animations
- transform: scale-x/y, skew-x/y, transform-origin
- grid: col-start/end, row-start/end, subgrid

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* test(dot): add filter, backdrop, animation, transition resolver tests (+201)

Comprehensive tests for under-tested resolvers:
- filter: blur, brightness, contrast, saturate, grayscale, sepia, invert,
  hue-rotate, drop-shadow + arbitrary values
- backdrop: all backdrop-filter variants
- transition: property, duration, timing, delay + combinations
- animation: all 5 presets
- mix-blend: multiply, screen, overlay
- combination tests: multi-token strings

Test count: 2044 → 2245

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: update devlog with session 27 — review rounds, dot ecosystem, 2245 tests

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(dot-lsp): remove false positive completions — filter-none, backdrop token ranges

- Remove filter-none and backdrop-filter-none (dot() can't resolve these)
- Split backdrop completion loops to match actual token tables:
  - backdrop-contrast: [0,50,75,100,125,150,200] (was sharing brightness range)
  - backdrop-saturate: [0,50,100,150,200] (was sharing brightness range)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…s [deploy my-app]

* feat(my-app): provider-agnostic payment system + SaaS starter kit foundation

- Prisma schema: replace toss_* fields with provider-agnostic PaymentProvider enum (LEMONSQUEEZY, STRIPE, TOSS), add USD price fields
- Payment lib: interface, factory pattern, LemonSqueezy provider, Stripe stub, quota sync
- API routes: checkout, plans, subscriptions, webhooks (LemonSqueezy HMAC, Stripe stub)
- Error codes: 8 new PAYMENT_* codes
- Fix billing route raw error response → apiError()
- SaaS starter kit docs: README, QUICKSTART, ARCHITECTURE, CUSTOMIZATION
- Extraction manifest: 291-file analysis (162 KEEP / 26 ADAPT / 103 REMOVE)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(my-app): address PR #620 review — 4 payment system fixes

1. checkout: resolve LemonSqueezy variant ID from Plan.features JSON
   instead of passing DB plan UUID as variant ID (was 4xx on checkout)
2. webhook: subscription_cancelled no longer strips premium immediately;
   quota downgrade moved to subscription_expired event (user keeps paid
   access until period ends)
3. quota: getUserQuotaLimits reads plan-specific limits from UserQuota DB
   instead of hardcoded 20/500 premium defaults
4. migration: add Prisma migration file for payment-provider-agnostic
   schema changes (already applied via manual SQL)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(my-app): address PR #620 review round 2 — checkout, trial, timezone, composite unique

1. checkout: block new purchase when subscription is CANCELLED but
   current_period_end is still in the future (prevents double-buy)
2. webhook: subscription_created now stores is_trial + trial_end from
   LemonSqueezy on_trial status so processExpiredTrials() cron works
3. sync-quota: reset times use KST midnight (matching db-quota-store)
   instead of UTC midnight — fixes 9-hour drift on initial quota create
4. schema: provider_payment_id and provider_billing_key changed from
   @unique to @@unique([provider, ...]) composite for multi-provider safety

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(my-app): address PR #620 review round 3 — migration, trial, idempotency

1. migration.sql: single-column unique → composite unique indexes
   (provider + id) so different providers can share external IDs
2. webhook subscription_updated: clear is_trial/trial_end when
   transitioning from on_trial → active (prevents processExpiredTrials
   from incorrectly expiring paid subscriptions)
3. webhook payment handlers: create → upsert on composite unique
   so webhook retries are idempotent (return 200 instead of 500)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(my-app): address PR #620 review round 4 — suspended checkout, amount, trial status

1. checkout: block all non-terminal subscriptions (ACTIVE, CANCELLED
   with remaining period, SUSPENDED) — only EXPIRED or fully-elapsed
   CANCELLED can start new checkout
2. webhook subscription_created: resolve amount from Plan table instead
   of LemonSqueezy first_subscription_item.price (field doesn't exist)
3. webhook subscription_updated: add on_trial to statusMap so trial
   mid-updates don't clear is_trial/trial_end — clearTrial only fires
   when attrs.status is literally "active" (paid transition)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(my-app): address PR #620 review round 5 — minor unit, resume cancel_at

1. webhook payment: divide attrs.subtotal by 100 to convert from
   LemonSqueezy minor units (cents) to display currency (999 → 9.99)
2. webhook subscription_updated: clear cancel_at/cancelled_at when
   subscription resumes (CANCELLED → ACTIVE with ends_at=null)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(my-app): address PR #620 review round 6 — legacy TOSS cancel graceful

Cancel route: skip provider API call for legacy TOSS subscriptions
(no active Toss integration). Cancel locally only with console.warn
instead of throwing Unknown payment provider and returning 500.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: update CURRENT.md with sum-data analytics repo setup

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(my-app): reduce serverless connection_limit to 1 for Supabase Nano pool stability

Supabase Nano compute has pool size of 15. With connection_limit=2,
only ~7 concurrent serverless functions could run before pool exhaustion
causing ETIMEDOUT errors. Reducing to 1 doubles concurrent capacity to 15.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(my-app): TossPayments provider + quota alignment + plan seed scripts

- Add TossPayments billing provider (toss.ts): billing key issuance,
  auto-payment execution, payment cancellation APIs
- Add POST /api/payments/toss/billing-key route: card registration →
  billing key → first payment → subscription + quota sync
- Register TOSS in payment factory alongside LemonSqueezy and Stripe
- Align FREE quota limits across sync-quota.ts and db-quota-store.ts
  (diary 3/50, analysis 3/50)
- Add manual migration SQL for provider-agnostic schema reference
- Add plan seed/check scripts for DB Plan table management
- Replace console.error with logger in payment routes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(my-app): TossPayments billing test page + CSP + devlog

- Add billing register page with TossPayments V1 SDK integration
- Add billing success callback page (authKey → billing-key API)
- Add tosspayments domains to CSP (script-src, connect-src, frame-src, form-action)
- Fix billing-key route: remove email requirement for social login users
- Add dev rate limit override (60/min in development)
- Add utility scripts: check-db-schema, clear-rate-limit, verify-subscription
- Add devlog for session 20 (payment system + toss + lemonsqueezy)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(my-app): replace missing wind icon + remove email auth check in checkout

- Dashboard: wind → sparkle icon (phosphor registered)
- checkout route: remove email requirement for social login users

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(my-app): address PR #620 review round 7 — type fixes, cron billing, plan flow

- Fix type errors: remove email requirement for social login, wrap
  logger.error args properly
- Checkout route: skip variant check for TOSS provider
- Billing register: preserve planId/billingCycle through Toss SDK redirect
- Billing success: read planId/billingCycle from URL params (no hardcode)
- Add /api/cron/billing: Toss recurring payment execution + expiration
  handling (MAX_RETRY=3, SUSPENDED→EXPIRED flow)
- Register cron in vercel.json (daily UTC 00:00 / KST 09:00)
- Process expired trials in same cron run

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(my-app): address PR #620 review round 8 — period drift, failUrl, seed

- Cron billing: anchor next period on current_period_end (not now()),
  add calendar-safe addPeriod() for month-end clamping
- Billing-key route: same calendar-safe period calculation for initial sub
- Billing register failUrl: preserve planId/billingCycle on SDK failure
- Seed plans: add lemonsqueezy_variant_yearly placeholder

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(my-app): address PR #620 review round 9 — successUrl passthrough, cancel suspended

- Toss provider: pass caller successUrl/cancelUrl through billing register flow
- Register page: thread successUrl/cancelUrl to SDK success/fail URLs
- Success page: redirect to caller successUrl after billing completion
- Seed plans: remove falsy yearly variant placeholder (comment only)
- Cancel route: allow SUSPENDED subscriptions to be cancelled (stop rebilling)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(my-app): address PR #620 review round 10 — cancelUrl redirect, quota downgrade

- Register page: use caller cancelUrl as SDK failUrl when provided
- Cancel route: downgrade quota immediately when SUSPENDED sub with
  expired period is cancelled (period_end <= now → EXPIRED + syncQuotaOnSubscriptionEnd)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(my-app): address PR #620 review round 11 — XSS via javascript: URL

- Checkout schema: replace z.string().url() with http/https-only refine
- Success page: validate callerSuccessUrl protocol before router.push
- Blocks javascript:, data:, and other non-http schemes at both API
  input validation and client-side redirect

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(my-app): address PR #620 review round 12 — same-origin SDK failUrl

- SDK failUrl always same-origin (Toss SDK constraint)
- Caller cancelUrl passed as query param, not directly as SDK failUrl
- Register page: on error=true return, redirect to caller cancelUrl
  via app-level router.replace (with http/https protocol check)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(my-app): address PR #620 review round 13 — window.location for cross-origin redirect

- Replace router.push/replace with window.location.assign for external
  URLs (Next.js router only supports internal navigation)
- Remove unused useRouter imports from billing pages
- Keep http/https protocol validation on both redirect paths

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: update devlog with R7-R13 review fixes and residual items

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: add maek (맥) autonomous implementation loop skill

Ralph Loop + Symphony pattern merged into HUA skill system.
/maek skill for PRD/issue-driven task decomposition with stuck detection,
context rotation, and build verification. External loop via scripts/maek.sh.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(dot): resolve 19 unknown tokens — animate, divide, prose, arbitrary opacity

- T1: arbitrary value + opacity combo (bg-[var(...)]/80) via color-mix
- T2: tailwindcss-animate tokens (animate-in, fade-in, slide-in-from-*)
- T3: divide-y/divide-x in class adapter (child combinator)
- T4: prose/prose-*/prose-lg passthrough (like group/peer)
- 5 tokens already supported (gradient, last:, group)
- 5 custom class names excluded (app-specific, not utilities)
- Tests: 2245 → 2325 (80 added, all pass)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(my-app, ui-dashboard): admin payment dashboard + sidebar collapsible + settings

- DashboardSidebar: add collapsible section support with localStorage persist
- Admin API: payment stats, subscriptions, history, settings (4 routes)
- Admin pages: payment dashboard, subscription list, payment history, settings
- AdminSidebar: add payments/settings items, enable collapsible on all sections
- i18n: add payments/settings keys for ko/en/ja
- Prisma: add auto_renew field to Subscription model

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(my-app): address PR #621 review — date filter, divide-y inline fallback

- history route: to date filter now uses next-day lt instead of lte
  (fixes same-day data being excluded when input is date-only string)
- replace divide-y divide-border on Box (inline style can't do child
  combinator) with per-item border-t border-border using index guard
- add claude-plugins-analysis.md documentation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(my-app): address PR #621 review round 2 — KST date boundary

Interpret admin date filter inputs as KST (+09:00) instead of UTC.
Prevents off-by-9-hours boundary issue where data from next day KST
morning (before 09:00) would leak into the previous day's results.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(my-app): address PR #621 review round 3 — currency-aware formatting

- stats route: group revenue by currency instead of blind sum
- all payment pages: use useCurrencyFormatter() from @hua-labs/hua/formatters
  instead of hardcoded ₩ prefix
- revenue display: shows per-currency breakdown (e.g. ₩4,900 + $4.99)
- history/subscriptions: amount formatted with correct currency symbol

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Revert "feat(dot): resolve 19 unknown tokens — animate, divide, prose, arbitrary opacity"

This reverts commit 4ba446046a3656ee84dcf4ac60a7c3d5fa0f4f78.

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…ests)

* feat(packages): SDUI registry expansion + test coverage boost

- Expand SDUI defaultRegistry from 40 to 60 components
  - Layout: Stack, Panel, SectionHeader, ComponentLayout, Pressable
  - Navigation: Breadcrumb, Pagination, Navigation, PageNavigation, DotNav
  - Display: FeatureCard, InfoCard, StatsPanel, LanguageToggle, ThemeToggle
  - Overlay: Modal, Tooltip, Popover, Drawer, BottomSheet
- Add 769 tests across 5 packages:
  - hua meta-framework: 149→440 (a11y, loading, seo/geo)
  - hua-state: 27→81 (store, i18n, middleware)
  - hua-i18n-formatters: 120→281 (currency, date, number edge cases)
  - hua-ui/sdui: 0→215 (core utils, registry, edge/negative)
  - hua-dot-aot: 37→85 (vite + babel plugins)
- Fix validator.ts: null/undefined guard + author.name trim check

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(ui): hasComponent uses Object.hasOwn to reject prototype keys

Prevents prototype chain keys like 'toString', 'constructor' from
being treated as valid SDUI components. Updates edge test to assert
false for prototype properties as a regression guard.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(ui): address PR #625 review — hasOwnProperty + rest spread

- Replace Object.hasOwn with Object.prototype.hasOwnProperty.call
  (Object.hasOwn not in TS target/lib → TS2550 build failure)
- Add ...rest spread to all 20 new SDUI wrappers so renderer-injected
  props (id, role, aria-label, style, constraints) pass through
- Update prototype key regression test to assert false

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(dot): resolve 19 unknown tokens — animate, divide, prose, arbitrary opacity

- T1: arbitrary value + opacity combo (bg-[var(...)]/80) via color-mix
- T2: tailwindcss-animate tokens (animate-in, fade-in, slide-in-from-*)
- T3: divide-y/divide-x in class adapter (child combinator)
- T4: prose/prose-*/prose-lg passthrough (like group/peer)
- 5 tokens already supported (gradient, last:, group)
- 5 custom class names excluded (app-specific, not utilities)
- Tests: 2245 → 2325 (80 added, all pass)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(dot): divide-color child propagation + dotExplain CSS custom property handling

- Fix: divide-color (divide-gray-200) now propagates borderColor into
  child combinator rules (> * + *), not just the parent element
- Fix: dotExplain() explicitly detects CSS custom properties (--tw-*)
  as unsupported on native/flutter targets
- Tests: add divide-color propagation assertions

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(dot): cross-bucket divide color, dotExplain class-mode detection, prose variant prefix

- Fix(high): divide-color propagation across variant buckets —
  hover:divide-gray-200 and md:divide-gray-200 now emit child
  combinator rules with border-color under the correct selector
- Fix(medium): dotExplain() detects divide-y/x as class-mode-only
  tokens and reports them as unsupported on native/flutter
- Fix(medium): prose passthrough preserves variant prefixes —
  dark:prose-invert stays as dark:prose-invert, not prose-invert
- Tests: +7 (2326 → 2333, all pass)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(dot): dotExplain reports divide-y-reverse/divide-x-reverse as class-mode-only

Extend CLASS_MODE_ONLY_PATTERNS regex to match -reverse suffix.
Add test cases for divide-y-reverse (native) and divide-x-reverse (flutter).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…API [skip deploy]

* feat(starter-kit): initial SaaS Starter Kit separation — schema + manifests

- Create clean Prisma schema (57 → 33 models, domain models removed)
- Add PADDLE to PaymentProvider enum
- Rename diary/analysis quotas to generic resource/api
- Generate lib/ separation manifest (183 files analyzed)
- Generate API routes separation manifest (102 routes analyzed)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(starter-kit): copy generic lib/ infrastructure to kit

- Copy 128 files from my-app lib/ (auth, payment, quota, infra,
  errors, security, rate-limit, env, admin, user, i18n, api, route)
- Remove domain-specific files: diary-auth, offline-storage,
  diary/analysis/guest/search translations
- Remaining domain references to clean in follow-up commits

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor(starter-kit): clean domain references from lib/

- Remove diary/analysis/emotion/crisis/slip references from 31 files
- Rename quota fields: diary→resource, analysis→api
- Remove AnalysisResult encryption (domain-specific)
- Remove concurrent-limit.ts (analysisResult dependency)
- Genericize abuse-detection: diaryId→contentId
- Clean branding: my-app→saas-kit in auth, cors, dot-config
- Add Stripe/Paddle env vars to server-schema
- Remove diary/analysis/guest i18n namespaces

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(starter-kit): copy 52 generic API routes to kit

Team api-separation (3 agents parallel):
- core-api: 20 routes (auth, user, payments, subscriptions, webhooks, health)
- admin-api: 22 routes (users, payments, dashboard, monitoring, abuse-alerts)
- support-api: 10 routes (notifications, announcements, invite-codes)

All diary/analysis/emotion/crisis domain references removed.
Branding genericized. Quota fields renamed to resource/api.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(starter-kit): resolve review findings — missing imports + schema mismatch

Findings fixed:
- Remove tokens route (depends on missing cost/token-tracker)
- Remove billing.ts + billing route (BillingRecord model not in kit schema)
- Remove decryption-log.ts (DecryptionLog model not in kit schema)
- Remove useNamespacedTranslation.ts (depends on generated types)
- Inline getClientIP in abuse-detection (was importing from guest/limiter)
- Remove concurrent-limit dependency from quota/check.ts
- Remove userStatusLog.create from penalty route (model not in kit schema)
- Remove billing API route (depends on deleted billing.ts)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor(starter-kit): translate all Korean comments to English

45 files updated — JSDoc, inline comments, console strings, and
error messages translated from Korean to English.

Data strings (nickname generator food names, abuse detection keywords,
anonymizer patterns) intentionally kept in Korean as they are
functional multilingual data, not comments.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(starter-kit): resolve review round 2 — auth types, presets, branding

- Add auth.d.ts for NextAuth Session.user.id type extension
- Fix RATE_LIMIT_PRESETS.diary → .resource (2 routes)
- Replace "Sum Diary" branding with "Your App" in all i18n JSON (16 files)
- Remove "AI-powered emotional analysis diary" references

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(starter-kit): remove remaining branding from i18n assets

Replace all remaining Sum Diary / 숨 다이어리 / スムダイアリー / SUM Diary
references with generic placeholders in ko/ja/en translation files.
Also remove AI-powered emotional analysis diary service description.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(starter-kit): genericize legal/privacy copy — remove diary service refs

Replace diary-specific service descriptions in ko/ja terms and privacy:
- 감정 분석 일기 서비스 → generic service description
- 感情分析日記サービス → generic service description

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor(starter-kit): replace legal docs with generic US-style placeholders

Replace all 9 legal JSON files (terms, privacy, security × ko/ja/en)
with domain-neutral placeholder templates. Each file includes a
_notice field indicating replacement is required before launch.

Removes all diary/emotion/AI analysis service descriptions and
Korean Article-style legal structure in favor of standard
Section-based SaaS terms.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: update saas-starter-kit devlog with review rounds 2-4

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…, .env.example [skip deploy]

* feat(starter-kit): add build config — package.json, tsconfig, next.config, .env.example

- package.json: clean deps (no openai, no monorepo workspace refs)
- tsconfig.json: standalone paths (no ../../packages refs)
- next.config.ts: security headers, CSP, no Sentry/Axiom
- .env.example: all env vars documented with sections

Kit is now independently buildable (pending prisma generate + UI pages).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(starter-kit): resolve build review — missing deps, quota fields, notifier contract

Critical:
- Add missing deps: @hua-labs/hua, @hua-labs/security, @hua-labs/i18n-loaders,
  @aws-sdk/client-ses, @prisma/adapter-pg, @vercel/blob

High:
- Fix invite-codes/apply quota fields: diary→resource, analysis→api

Medium:
- Fix abuse-detection notifier: contentId→resourceId to match discord-webhook type

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(starter-kit): pin @HUA-Labs deps to published versions, add openai

- @hua-labs/hua ^1.1.0 (published), @hua-labs/security ^1.0.0-alpha.0
- Add openai dependency (used by translation.ts)
- Note: full standalone build requires @HUA-Labs packages to be
  republished with latest exports (hua/dot, security crypto APIs)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- LICENSES: third-party license notices for all public @HUA-Labs packages (10 deps)
- docs/memory/: mirror of Claude memory files for office access

[skip deploy]

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…em for public

- Absorb 18 hua-pro hooks into motion-core (auto-play, orchestration, interaction, specialized)
- Delete hua-ui-dashboard (already decomposed into hua-ui semantic subpaths)
- Prep dot ecosystem (dot, dot-aot, dot-lsp, dot-mcp, dot-vscode) for first npm publish
- Fix sync-to-public.sh: bash '!' history expansion bug, catch-all config cleanup
- Version packages: motion-core 2.4.0, hua 1.2.0, i18n 2.2.0, security alpha.1, eslint-plugin 0.1.2
- Full README audit + fixes across 6 packages
- Fix dot API table: escape pipe chars breaking markdown columns
- Add npm badges, Related Packages, License to dot-lsp, dot-mcp, dot-vscode READMEs
- Add repository/bugs fields to dot-lsp and dot-mcp package.json
- Create DETAILED_GUIDE.md for all 5 dot packages (dot, dot-aot, dot-lsp, dot-mcp, dot-vscode)
- Exclude dot-vscode from sync-to-public.sh (VS Code extension, not npm)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…rectory with 3 updates

Bumps the production-dependencies group with 3 updates in the / directory: [@anthropic-ai/claude-code](https://github.com/anthropics/claude-code), [inquirer](https://github.com/SBoudrias/Inquirer.js) and [@floating-ui/react](https://github.com/floating-ui/floating-ui/tree/HEAD/packages/react).


Updates `@anthropic-ai/claude-code` from 2.1.56 to 2.1.76
- [Release notes](https://github.com/anthropics/claude-code/releases)
- [Changelog](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md)
- [Commits](anthropics/claude-code@v2.1.56...v2.1.76)

Updates `inquirer` from 13.3.0 to 13.3.2
- [Release notes](https://github.com/SBoudrias/Inquirer.js/releases)
- [Commits](https://github.com/SBoudrias/Inquirer.js/compare/inquirer@13.3.0...inquirer@13.3.2)

Updates `@floating-ui/react` from 0.27.18 to 0.27.19
- [Release notes](https://github.com/floating-ui/floating-ui/releases)
- [Changelog](https://github.com/floating-ui/floating-ui/blob/master/packages/react/CHANGELOG.md)
- [Commits](https://github.com/floating-ui/floating-ui/commits/@floating-ui/react@0.27.19/packages/react)

---
updated-dependencies:
- dependency-name: "@anthropic-ai/claude-code"
  dependency-version: 2.1.76
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: inquirer
  dependency-version: 13.3.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@floating-ui/react"
  dependency-version: 0.27.19
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot @github
Copy link
Copy Markdown
Contributor Author

dependabot bot commented on behalf of github Mar 16, 2026

Labels

The following labels could not be found: automated, dependencies. Please create them before Dependabot can add them to a pull request.

Please fix the above issues or remove invalid values from dependabot.yml.

@dependabot @github
Copy link
Copy Markdown
Contributor Author

dependabot bot commented on behalf of github Mar 17, 2026

This pull request was built based on a group rule. Closing it will not ignore any of these versions in future pull requests.

To ignore these dependencies, configure ignore rules in dependabot.yml

@dependabot dependabot bot deleted the dependabot/npm_and_yarn/production-dependencies-fb77f41907 branch March 17, 2026 09:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants