Skip to content

Bump next from 15.5.13 to 15.5.14#2

Closed
dependabot[bot] wants to merge 40 commits intomainfrom
dependabot/npm_and_yarn/next-15.5.14
Closed

Bump next from 15.5.13 to 15.5.14#2
dependabot[bot] wants to merge 40 commits intomainfrom
dependabot/npm_and_yarn/next-15.5.14

Conversation

@dependabot
Copy link
Copy Markdown
Contributor

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

Bumps next from 15.5.13 to 15.5.14.

Release notes

Sourced from next's releases.

v15.5.14

[!NOTE] This release is backporting bug fixes. It does not include all pending features/changes on canary.

Core Changes

  • feat(next/image): add lru disk cache and images.maximumDiskCacheSize (#91660)
  • Fix(pages-router): restore Content-Length and ETag for /_next/data/ JSON responses (#90304)

Credits

Huge thanks to @​styfle and @​lllomh for helping!

Commits
  • d7b012d v15.5.14
  • 2b05251 [backport] feat(next/image): add lru disk cache and `images.maximumDiskCacheS...
  • f88cee9 Backport: Fix(pages-router): restore Content-Length and ETag for /_next/data/...
  • See full diff in compare view

Dependabot compatibility score

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 this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    You can disable automated security fix PRs for this repo from the Security Alerts page.

RaghavChamadiya and others added 30 commits March 23, 2026 16:14
Critical:
- Fix LanceDB filter injection by escaping single quotes in page_id
- Update tool count from 13 to 16 across all docs and docstrings

Major:
- Resolve real embedder (gemini/openai) from env/config instead of
  always using MockEmbedder in MCP server — fixes search_codebase
  and get_why semantic search
- Fix CLI semantic search to try LanceDB then FTS instead of empty store
- Fix co-change count key mismatch ("co_change_count" vs "count")
  that caused get_co_changes and get_file_history to return zero counts
- Fix get_why excluding all decisions (include_proposed was False but
  all 23 decisions are "proposed")
- Pass repo_path to resolve_provider in update_cmd

Minor:
- HTML export now renders markdown via markdown/mistune library
- Add startup validation warnings when wiki.db is missing
- Lower get_dead_code min_confidence default from 0.6 to 0.5

Update MCP_AND_STATE_REVIEW.md to mark fixed issues.
The DecisionRecord model was added to models.py but the test's expected
table set was not updated to include "decision_records".
…mmand

MCP tool consolidation:
- get_context(targets, include?) replaces get_module_docs, get_file_docs,
  get_symbol, get_file_history, get_codebase_ownership, get_stale_pages
- get_risk(targets) replaces get_hotspots, get_co_changes
- get_why(query?) merges get_decisions, get_why, get_decision_health into
  3-mode tool (NL search, path-based, health dashboard)
- Unchanged: get_overview, search_codebase, get_dependency_path,
  get_dead_code, get_architecture_diagram

Search fixes:
- FTS fallback now triggers on empty vector results (not just exceptions)
- FTS query builder strips stop words, uses OR + prefix matching
- init_cmd.py uses LanceDB when available instead of always InMemoryVectorStore

New wikicode reindex command:
- Embeds existing wiki pages + decisions into LanceDB
- No LLM calls, only embedding API calls
- Supports --embedder gemini|openai|auto

Updated docs: ARCHITECTURE.md, MCP_AND_STATE_REVIEW.md, server README
All 35 MCP tests pass (30 unit + 5 integration)
…existing test failures

MCP server (9 fixes):
- Fix operator precedence bug in get_overview that duplicated module descriptions
- Fix get_context module LIKE prefix matching sibling modules (add trailing /)
- Fix search_codebase page_type filter returning 0 results (over-fetch 3x)
- Fix search_codebase confidence_score always None (batch-lookup from DB)
- Standardize get_dependency_path error returns to consistent structure
- Fix get_dead_code docstring default (0.6 -> 0.5)
- Move get_dead_code safe_only filter to SQL WHERE clause
- Replace incomplete Mermaid node sanitization with regex
- Sort architecture diagram edges by PageRank before 50-edge cap

Job system / state (2 fixes):
- state.json total_pages now queries actual DB count instead of last job
- complete_page() clamps total_pages = max(total_pages, completed_pages)

Graph persistence (migration 0004):
- Add edge_type column to graph_edges (nullable, default "imports")
- Persist edge_type through CRUD layer and init_cmd
- MCP get_dependency_path uses real edge_type instead of hardcoded "imports"

Install fix:
- Add wikicode-server as explicit dependency of wikicode-cli

Code quality:
- Move deferred click import to top of helpers.py

Test fixes (6 pre-existing failures):
- Fix _sort_level_files test (method never existed, use inline sort)
- Fix git_indexer test (use tmp_path instead of sample_repo under git)
- Fix builtin provider count (5 -> 6)
- Fix FakeConfig missing max_pages_pct
- Fix unsupported language test (SQL is now passthrough)
- Fix Gemini max_output_tokens test (intentionally omitted)

All 633 tests pass.
…aming

Adds an interactive chat feature to the repo landing page where users can
converse with their codebase. The LLM agent has access to all 8 MCP tools,
streams responses via SSE, and renders tool results in an artifact panel.

Backend:
- ChatProvider protocol extending BaseProvider with stream_chat() for
  streaming + tool use (Anthropic, OpenAI, Gemini, Ollama, LiteLLM)
- Agentic loop in chat router with tool execution and conversation persistence
- Tool registry (chat_tools.py) as single source of truth for schemas
- Provider config management (API keys, active provider/model selection)
- DB migration 0005: conversations + chat_messages tables
- SSE endpoint: POST /api/repos/{repo_id}/chat/messages
- Provider endpoints: GET/PATCH/POST/DELETE /api/providers/*

Frontend:
- useChat hook with POST-based SSE parsing via ReadableStream
- useProviders hook for provider management
- ChatInterface with empty state (suggestions) and active state (messages)
- ChatMessage, ToolCallBlock, ChatMarkdown, ArtifactPanel, ModelSelector
- ConversationHistory dropdown for switching between past conversations
- Repo landing page restructured from static overview to chat-first

Gemini-specific: agentic loop runs inside stream_chat() using native Content
objects to preserve thought_signature on function call parts.
…e intelligence

get_dead_code: Transform from flat list to tiered refactor plan
- Organize findings into high/medium/low confidence tiers with impact estimates
- Add tier, directory, owner filter params and group_by rollup views
- Per-directory and per-owner aggregation for targeted cleanup

get_risk: Add trend analysis, risk classification, and impact surface
- Risk velocity (increasing/stable/decreasing) from 30d vs 90d commit rates
- Risk type classification (churn-heavy/bug-prone/high-coupling/stable)
- Impact surface: top 3 critical dependents by pagerank via reverse dep BFS

get_why: Intent archaeology with target-aware search and git fallback
- Add targets param to anchor natural language search to specific files
- Expand keyword scoring to all decision fields with weighted matching
- Link commits to decisions via keyword overlap in origin story
- Git archaeology fallback when no decisions found: file commits,
  cross-file reference search, and live git log when local repo exists
- Decision alignment scoring against sibling files

46 tests passing (12 new)
Rename all Python package directories, imports, references, configs,
docs, tests, and frontend from wikicode/codewiki to repowise.
…iltering

- Make the 500 commit limit configurable via --commit-limit flag and
  config.yaml (default 500, max 5000). Add commit_count_capped column
  to git_metadata so downstream tools can warn when history is truncated.
- Un-skip revert commits (high signal for risk and decision archaeology).
  Add "revert" to DECISION_SIGNAL_KEYWORDS.
- Lower minimum message length from 20 to 12 to capture short but
  meaningful commits like "fix auth race".
- Split skip prefixes into hard (Merge) and soft (chore, ci, style,
  build, release, Bump). Soft-skipped commits are rescued when they
  contain decision-signal keywords like "migrate", "deprecate", etc.
- Add git intelligence audit doc with phased improvement plan.
…, temporal decay

- Track lines added/deleted per file (90d window) via git log --numstat.
  Compute avg_commit_size to distinguish churn from volatility. Surface
  as change_magnitude in get_risk output.
- Classify commits into feature/refactor/fix/dependency categories using
  regex patterns. Store as commit_categories_json. Derive change_pattern
  ("feature-active", "primarily refactored", "bug-prone", etc.) in get_risk.
- Add recent_owner (90d window) alongside historical primary_owner. Compute
  bus_factor (authors needed for 80% coverage) and contributor_count. Surface
  bus-factor-risk in get_risk when single maintainer on mature files.
- Apply exponential temporal decay to co-change scoring (tau=180 days).
  Recent co-changes weigh more than stale ones. Add last_co_change date
  to co-change partner entries for actionable recency signal.
- Enrich get_context ownership with recent_owner and bus_factor.
Fix test mocks to use the new git log format (%x00%ct) with timestamps.
Adjust count assertion for decay-weighted float scores. Fix below-threshold
test to properly mock git.log instead of iter_commits.
…t, merge signals, smart staleness

- Add --follow-renames flag (opt-in, persisted to config) to track files
  across git renames via git log --follow. Detects and stores original_path
  so get_context and get_why reflect true file history.
- Fix incremental update gap: repowise update now persists re-indexed git
  metadata to the DB (was previously lost) and recomputes churn percentiles
  across all files via recompute_git_percentiles(). Hotspot detection stays
  fresh without full re-init.
- Extract PR/MR numbers from commit messages (regex: #123, (#456), !42)
  and store in significant_commits_json entries. Enriches get_why origin
  stories with PR context without requiring GitHub API access.
- Track merge_commit_count_90d per file — files appearing in many merge
  commits are coordination bottlenecks. Surfaced in get_risk output.
- Upgrade decision staleness with keyword conflict detection: when recent
  commits contain conflict signals (replace, deprecate, migrate away, etc.)
  that overlap with the decision's text, staleness score gets a 0.3 boost.
  Deduplicates staleness logic by routing crud.py through DecisionExtractor.
- get_overview: Add git_health section with hotspot count, avg bus factor,
  files with bus factor 1, repo-wide churn trend, and top churn modules.
- search_codebase: Boost search results by git freshness — files changed
  in last 30d get +20% relevance, 90d gets +10%. Re-sorts after boost.
- get_dependency_path: When no import path exists, check co-change data
  and return co_change_signal with count, last date, and explanation of
  logical coupling without import dependency.
- get_architecture_diagram: Add show_heat parameter that annotates Mermaid
  nodes with churn heat colors (red >=75th pctl, yellow >=40th, green rest)
  using classDef hot/warm/cold styles.
- get_dead_code: Add last_meaningful_change field to findings by looking
  up the most recent significant commit (feature/fix, not chore/style)
  from git metadata. Stronger signal than last_commit_at for dead code age.
- Add ui.py: ASCII art banner, brand color (#F59520), interactive mode
  selection (full/index-only/advanced), provider setup with inline API
  key entry, phase headers, completion panels
- Rewrite init flow: banner → mode select → provider setup → phased
  progress with Rule headers → rich completion Panel with stats
- Advanced mode: configure commit limit, follow renames, skip tests/infra,
  concurrency, exclude patterns interactively
- Index-only as first-class: equal prominence, richer completion stats,
  "What's next" guidance with actionable commands
- Update identity: "codebase intelligence for developers and AI" across
  CLI help, banner, MCP config, and package docstrings
…ence

- Show provider signup URLs when key is missing (Google AI Studio,
  OpenAI, Anthropic Console, Ollama)
- Save API key to .repowise/.env on confirmation (auto-gitignored)
- Load .repowise/.env on startup so keys persist across sessions
- Gemini as default/recommended provider
Compact 2-line lowercase using block characters instead of thin
box-drawing. Clearly reads "repowise" with the dot on 'i'.
Dead code detection and decision extraction now show animated
spinners instead of appearing frozen. structlog and httpx debug
output suppressed so progress indicators stay visible.
- Move lancedb from optional [search] extra to core dependencies
  so users don't need extra install steps before running init
- Add google-genai as core dependency (was only installed manually)
- Downgrade RAG embed/search failure logs from warning to debug
- Add spinners for dead code and decision extraction phases
- Suppress structlog debug/info output during init for clean UX
Git timeout warnings, RAG search failures, and provider debug lines
are not actionable for users. Only show actual errors; progress bars
and summary lines handle all user-facing feedback.
30s was too tight on Windows where git operations are slower,
causing important files (mcp_server.py, init_cmd.py, test files)
to get partial data. 90s gives enough headroom without stalling
the overall pipeline.
Per-file indexing (git log + blame per file) and co-change analysis
(single git log --name-only) were running sequentially. They are
independent — co-change only needs the tracked file list, not
per-file results. Now they run in parallel via asyncio.gather,
cutting git indexing wall time significantly.

Also show a "Finalizing git analysis..." spinner after co-change
progress completes so the UI doesn't appear stuck.
When asyncio.wait_for timed out a file, the underlying thread kept
running git log/blame. asyncio.run() then blocked for minutes during
cleanup waiting for those orphaned threads.

Fix: use a dedicated ThreadPoolExecutor and shut it down with
wait=False after gather returns, so timed-out threads are abandoned
immediately. Also set timeout to 45s (up from 30s for Windows, but
not 90s which just delays the inevitable for truly slow files).
The estimator was predicting 50 pages but 103 were generated:
- file_page: counted only budget-capped top-N by PageRank, missed
  files qualifying via betweenness > 0 or entry_point status
- symbol_spotlight: was being budget-capped to 0
- cross_package: completely missing from estimator
- infra_page: was being suppressed by budget cap
- gemini: missing from cost table (showed $0.00)

Fix: mirror the generator's actual selection logic — compute
pr_threshold from budget, but count ALL files passing the
significance filter. Add cross_package, gemini pricing.
Also make progress bar auto-expand if actual count exceeds estimate.
- Shorten diagram node labels to parent/filename for readability
- Exclude test fixtures and test files from entry points in get_overview
- Add framework-loaded files (conftest.py, alembic/env.py, __main__.py,
  config files) to dead code skip list
- Exclude fixture/sample_repo directories from dead code detection
- Replace always-1.0 confidence_score in search with score-relative values
- Clip cross-module nodes to a single [external] stub in module-scoped
  architecture diagrams
Split the 2479-line monolithic mcp_server.py into a mcp_server/ package:
- _state.py: shared mutable globals
- _server.py: FastMCP instance, lifespan, entry points
- _helpers.py: shared utilities (_get_repo, _is_path, etc.)
- tool_overview.py, tool_context.py, tool_risk.py, tool_why.py,
  tool_search.py, tool_dependency.py, tool_dead_code.py, tool_diagram.py
- __init__.py: re-exports for full backward compatibility

No functionality change. All existing import paths preserved via __init__.py
re-exports and a state proxy for test fixture compatibility.
- Filter parsed_files to only files in affected.regenerate before calling
  generate_all(), fixing bug where all ~100 pages were regenerated on every
  update instead of just the changed ones (98 pages → 14 pages)
- Load .repowise/.env in update and reindex commands so API keys are found
  without requiring env vars to be set manually
- Move dry-run exit to after affected page computation so --dry-run shows
  the page count; defer provider resolution to after dry-run check
- Add post-commit git hook for automatic wiki updates
- Temporarily disable git re-indexer in update (hangs on Windows)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sharing a single GitPython Repo across executor threads caused
subprocess handle leaks on Windows (and potential race conditions
on all platforms). Each thread now opens and closes its own Repo.

Applied to both index_repo and index_changed_files. Re-enabled
git re-indexing in the update command.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace the 807-line D3 force-directed canvas with React Flow for
declarative node/edge rendering and ELK.js for deterministic
hierarchical layout.

Key changes:
- Hierarchical module drill-down: click a module to explore its
  internal structure (sub-modules + files), with breadcrumb navigation
- Path finder: collapsible side panel with autocomplete (sorted by
  pagerank), animated path highlighting with marching-ants edges
- Right-click context menu: View Docs, Explore, Find paths from/to
- Color modes (Language/Community/Risk) visually tint node backgrounds
  and borders, with full legend showing what each color means
- Doc status indicators: green/gray dots on every node
- View modes restored: Modules, Full Graph, Architecture, Dead Code,
  Hot Files
- Backend: add has_doc field to GraphNodeResponse across all endpoints
- Dark mode first with amber #F59520 accent

New: elk-layout.ts, use-elk-layout.ts, graph-flow.tsx, file-node.tsx,
module-group-node.tsx, dependency-edge.tsx, path-finder-panel.tsx,
graph-toolbar.tsx, graph-legend.tsx, graph-context-menu.tsx

Deleted: graph-canvas.tsx, graph-minimap.tsx, graph-filter-panel.tsx,
graph-view-switcher.tsx, path-finder.tsx
RaghavChamadiya and others added 10 commits March 28, 2026 14:29
CLAUDE.md generation:
- Add editor_files package with BaseEditorFileGenerator, EditorFileData,
  EditorFileDataFetcher, TechStackDetector, and ClaudeMdGenerator
- Add claude_md.j2 Jinja2 template for CLAUDE.md rendering
- Add `repowise generate-claude-md` CLI command
- Add /api/claude-md REST endpoint
- Wire generation into init and update commands
- Add unit tests for base, fetcher, and tech_stack modules

MCP reliability fixes:
- Fix search_codebase cold-start hang: pre-import lancedb via
  asyncio.to_thread and pre-connect in background task so first search
  hits a warm connection with no event-loop-blocking DLL loads
- Defer vector store loading to background asyncio.Task so MCP server
  accepts connections immediately; tool_search awaits readiness event
- Cache Gemini and OpenAI embedding clients across calls; add 10s HTTP
  timeout to prevent indefinite hangs on slow API responses
- Add 8s asyncio.wait_for around vector search as safety net
- Fix get_context "Target not found" to return git metadata, owner, and
  actionable guidance when a file exists but has no wiki page
- Add fuzzy path suggestions when target is not found in wiki or git
- Fix _is_significant_file to include zero-symbol files with high
  PageRank (state modules, config files) and always include __init__.py
  files with symbols as module interface pages
- Update ARCHITECTURE.md: mcp_server.py -> mcp_server/ package
…odels and pricing

- Move LLM provider implementations to providers/llm/ sub-package
- Move embedder implementations to providers/embedding/ sub-package
- Add providers/embedding/registry.py with get_embedder() entry point
- Keep backward-compat re-exports at all old import paths (nothing breaks)
- Update providers/__init__.py to expose both get_provider and get_embedder

OpenAI: update default model to gpt-5.4-nano, add gpt-5.4-mini and gpt-5.4,
switch max_tokens → max_completion_tokens (required by GPT-5.4 series)

Gemini: update model list to gemini-3.1-flash-lite-preview (default),
gemini-3-flash-preview, gemini-3.1-pro-preview

Anthropic: add claude-opus-4-6 to catalog alongside sonnet and haiku

Cost table: replace prefix-match with exact-model lookup + prefix fallback,
add correct per-MTok pricing for all 9 current models across three providers

Tests: add unit tests for OpenAI and Anthropic providers, cost estimator
pricing assertions, and live integration tests for all three providers
… locations

Update every import site across the codebase to use the new sub-package paths:
  repowise.core.providers.llm.*       (was repowise.core.providers.*)
  repowise.core.providers.embedding.* (was repowise.core.persistence.*_embedder)

Delete the eleven backward-compat shim files that were left behind after the
initial restructure (providers/{base,registry,anthropic,gemini,openai,ollama,
litellm,mock}.py and persistence/{embedder,gemini_embedder,openai_embedder}.py).

Update persistence/__init__.py and vector_store.py to source Embedder/MockEmbedder
from repowise.core.providers.embedding.base directly.

Files updated: 28 source/test files across cli, core, server, and tests.
- Unified pip package: `pip install repowise` installs core, CLI, server, MCP
- setuptools with explicit package-dir mapping across 3 src/ directories
- Optional extras: anthropic, openai, gemini, litellm, postgres, all
- Moved .scm query files into package tree for wheel inclusion
- Stripped per-package pyproject.toml to tool-only config
- Added AGPL-3.0 LICENSE, MANIFEST.in, production README with badges
- Added docs/USER_GUIDE.md with full CLI reference and web UI docs
- Added .github/workflows/publish.yml for automated PyPI release on tags
- Published v0.1.1 to https://pypi.org/project/repowise/
- repowise serve now auto-downloads and starts the web frontend if Node.js
  is available. Frontend cached in ~/.repowise/web/ (~50 MB, one-time).
- Added --ui-port and --no-ui flags to serve command
- Added Dockerfile (multi-stage: Node.js build + Python runtime)
- Added docker-compose.yml and entrypoint.sh
- Updated publish workflow to build web UI tarball and create GitHub releases
- Updated README, Quickstart, and User Guide with simplified instructions
- 22 frontend files (API clients, hooks, utils) were excluded by the
  root gitignore lib/ rule meant for Python build dirs. Narrowed the
  rule to /lib/ (root only) so packages/web/src/lib/ is tracked.
- Added skip-existing to PyPI publish step to avoid 400 on re-releases.
Bumps [next](https://github.com/vercel/next.js) from 15.5.13 to 15.5.14.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](vercel/next.js@v15.5.13...v15.5.14)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 15.5.14
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot bot added dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code labels Mar 28, 2026
@dependabot @github
Copy link
Copy Markdown
Contributor Author

dependabot bot commented on behalf of github Mar 28, 2026

OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting @dependabot ignore this major version or @dependabot ignore this minor version.

If you change your mind, just re-open this PR and I'll resolve any conflicts on it.

@dependabot dependabot bot deleted the dependabot/npm_and_yarn/next-15.5.14 branch March 28, 2026 13:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant