chore(deps): bump actions/checkout from 6.0.2 to 7.0.1 - #32
Open
dependabot[bot] wants to merge 38 commits into
Open
chore(deps): bump actions/checkout from 6.0.2 to 7.0.1#32dependabot[bot] wants to merge 38 commits into
dependabot[bot] wants to merge 38 commits into
Conversation
- typescript ^5.9.3 -> ^6.0.3; eslint ^10.4.0 -> ^10.4.1 - tsconfig: module/moduleResolution Node16 -> NodeNext, target/lib ES2022 -> ES2023 (no import changes needed for ESM + .js specifiers) - .node-version 22.11.0 -> 24.15.0 to match the runtime/Dockerfile and end the three-way CI/prod drift; engines kept at >=22 for compatibility - CLAUDE.md: correct the Node + TypeScript facts Verified: typecheck, 1119 tests, lint, and the obfuscation build all pass under TS6; npm audit reports 0 vulnerabilities.
- snippet-extract: IDF-weight query terms so a library-name token present in every snippet no longer dominates ranking (Context7 parity gap) - cache: drop the never-consumed _staleKeys/getStaleKeys revalidation tracking (dead code); keep beneficial serve-stale within the SWR window - lockfile: detect all package versions in parallel (auto-scan requests 20+ at once against the same lockfiles) - telemetry: type the log entry as LogEntry instead of casting `as never`
probeLlmsTxt built its probe URLs from the normalized base path but keyed the cache on origin only, so two libraries hosted on the same domain under different paths (docs.example.com/react vs /vue) shared a single probe result. Key on the full normalized base instead.
The npm-version stats sweep matched `v7.0.0` inside CI workflow comments (e.g. actions/upload-artifact # v7.0.0) and bumped them to the gt-mcp version, making the SHA-pin comment lie. Skip .github/ in the sweep. Also refreshes llms.txt to v7.0.1.
Constant-time bearer-token comparison (timingSafeEqual) and CSP/COOP/CORP headers on the HTTP transport. Block CGNAT 100.64.0.0/10 (cloud metadata) and fail closed on malformed IPs in the SSRF guard. Cap remote response bodies at 5MB to stop OOM from hostile upstreams. Log SSRF-blocked redirects/Jina fetches and disk-cache write failures instead of swallowing them. Escape all regex metacharacters in the dynamic version matcher (ReDoS). Reject 0 for timeout/concurrency env vars; make deepFetchRelevanceThreshold env-tunable. Emit raw Prometheus error counts, render all logger fields and strip CR/LF (log injection). Prune respects the SWR stale window; the disk cache validates deserialized shape before serving.
resolveFromPypi now carries llmsFullTxtUrl like the other resolvers. gt_migration with only a target version no longer collapses the release band to a single major (the lower bound opens to -Infinity). gt_compat cache key includes the token budget so a truncated result is never served to a request asking for more tokens.
22 reference entries had an empty language array; set the "agnostic" sentinel and add a non-empty invariant test. schemas.test now registers and snapshots gt_dispatch (the count was a 13-vs-14 undercount). README tool table lists all 14 tools (gt_snippets and gt_dispatch were missing).
Closes the remaining security/reliability findings from the 2026-06-02
deep audit, each verified against OWASP/Unicode/Node docs and covered by
new tests:
- SEC-002: strip variation selectors (U+FE00-FE0F), Mongolian FVS and the
Tag block (U+E0000-E007F) in the injection-scan projection so split
keywords ("i<VS>gnore previous") can no longer bypass detection. Content
strip preserves FE0F so emoji survive.
- SEC-007: realpathSync before the safeguardPath boundary check so a
symlink inside an allowed dir cannot reach a blocked system path.
- SEC-009: sanitize fetched documentation before it is written to the
mem/disk cache (cacheDoc helper) so poisoned content is never persisted
raw; npm/pypi/sitemap JSON writes are deliberately left untouched.
- SEC-012: GT_NO_WATERMARK=1 opt-out for air-gapped/multi-tenant installs.
- REL-002: single-flight half-open probe (probePending) so a recovering
circuit no longer lets every concurrent caller stampede the upstream.
- REL-004: guard FetchSemaphore.release against underflow.
- REL-007 / TS-011: disk-cache prune re-reads the dir for the live count
and drops corrupt-but-parseable entries instead of leaking them.
- TS-005 / TS-006: shape-guard sitemap and snippet-index cache reads.
- EH-004: log GitHub releases fetch failures at debug.
- CORR-006: minimum fuzzy-match score (parameterised fuzzySearch) so a generic query like "how to build a rest api" no longer misroutes to a build-tool library's best practices. - CORR-007: gt_batch_resolve route now parses library names from the query (and falls back to gt_search) instead of emitting args that fail Zod. - CORR-002/003/004/005: carry llmsFullTxtUrl on registry matches, stop external npm/pypi fallback when fuzzy already returned good results, dedupe crates/go results, and token-match the ranking query. - CORR-010/011: version-tagged README fallback in gt_get_docs; wrap the gt_best_practices handler in withTelemetry so it reports metrics. - COR-001/008: parse single-line go.mod requires, Poetry dev-dependencies and PEP 735 dependency-groups in gt_auto_scan. - EH-005: log external resolver failures at debug. - TS-002/009/010: replace casts with type guards/predicates.
- PERF-003: tokenize each section once and reuse across avgDocLen, IDF and BM25 scoring (was O(N*Q) re-tokenization). Ranking output is unchanged. - PERF-005: cap code-block count/size before tokenizing in BM25 scoring. - PERF-004: match hyphenated HTML5 custom-element closing tags when stripping noisy elements. - PERF-006: halve the deep-fetch direct-hit fan-out (12 -> 6 URLs). - COR-010: close a fenced code block per CommonMark (run length + char), so a nested longer fence no longer terminates it early. - OBS-006: log deep-fetch pipeline timeouts at warn for visibility.
Move the ~4.8KB McpServer instructions template out of index.ts into buildServerInstructions(toolCount) so it can be unit-tested and edited in isolation. toolCount stays sourced from the TOOL_COUNT constant. (MX-004)
- BSC-002/005/006: SHA-pin actions, use .node-version, and add a concurrency block in security.yml (matching ci.yml). - BSC-003: download the mcp-publisher binary to a file instead of piping curl into tar, so an integrity check can be added later. - BSC-008: pin the publish-time npm upgrade to the 11.x major. - BSC-001: gate the release:* scripts on typecheck + test (not prepublishOnly, to avoid a CI double-run). - BSC-004: fail update-stats instead of writing a wrong test-count badge when vitest is unavailable. - MX-002/005b: write TOOL_COUNT back to constants.ts and fix the README comparison-table tool count + tools badge automatically.
Lock in every behaviour change from this wave: Unicode injection-bypass blocking, symlink path guard, sanitize-before-cache, single-flight circuit probe, cache prune/shape guards, router misroute + batch-resolve routing, resolver llmsFullTxtUrl/dedup/fallback, go.mod + PEP 735 scanning, CommonMark fence close, custom-element stripping, watermark opt-out, and the new buildServerInstructions module. Suite: 1120 -> 1198, all green.
Regenerated by update-stats: test badge, tool count in the comparison table, and prose counts.
The version lifecycle sweep rewrites llms.txt but did not stage it, so it drifted after each release. Add it to the version git-add list.
The shared sanitizeContent chokepoint (every fetched doc passes through it via cacheDoc) was incomplete, so noise survived on the Jina/llms.txt/ GitHub-raw paths that bypass html-to-md. Harden it: CRLF normalization, full HTML-entity decoding (named + numeric + hex), Cloudflare email- protection decode/strip, orphan comment markers, and newline-separated nav chrome (version switchers, Prev/Up/Home/Next pagers, event headings). Entity decode runs AFTER the surgical tag strips so docs that teach the script/head elements keep their literal text instead of being stripped. Also fix the relevance/reliability bugs that surfaced as noise: - gt_search: drop score-1 generic topic co-matches when a specific multi- word topic matched (no more PostgreSQL reference page for an OWASP SQL- injection query); cap topic sources before fetching, not after. - gt_best_practices: defer canonical best-practices URLs when the topic matches none of them, and keep short version tokens (v4), so "tailwind v4 migration" no longer returns optimizing-for-production; known URLs kept as a guaranteed last-resort fallback (never empties). - gt_snippets: fall back to the GitHub README when a landing-page-only doc yields no fenced code blocks. - gt_examples: exclude markdown/doc files from GitHub code search. New shared util src/utils/decode-entities.ts consumed by both sanitize.ts and html-to-md.ts. 34 new regression tests added; 1232 passing.
Every topic-targeted tool now verifies its final output against the request before returning. checkEvidence() requires repeated topic occurrences, a heading hit, or topic tokens inside code — a single passing mention no longer counts as an answer. Failing output triggers one forced topic-targeted deep fetch (new deepFetchForTopic force param); when the topic never appears at all, tools return an explicit "no topic-specific evidence found" miss with the sources checked and a content outline instead of off-topic intro sections. Successful responses carry an "## Evidence" footer (source URLs, fetch date, topic-coverage stats) and an evidence verdict in structuredContent. Root causes this kills: - BM25 zero-score fallthrough served a doc's first sections (generic intro) whenever the topic was absent - Docsify hash-route URLs (getpino.io/#/docs/web) always fetched the homepage — fragments never reach the server; new docsifyToRaw() rewrites to the raw .md path - gt_audit fix guidance: every perf finding got the LCP article, security fell back to an OWASP index page, and any 200-char tangential snippet passed — now metric-specific web.dev articles, per-class OWASP cheat sheets, per-rule typescript-eslint pages, all evidence-gated with source attribution - gt_compat scraped MDN/caniuse search-results pages — now resolves real MDN documents via the search JSON API, search pages demoted to labeled weak evidence - gt_search stages 7/8 passed search-results shells on length alone — fetchTopicContent now drops zero-coverage pages and only caches verified text - gt_snippets returned an empty shell when a topic matched nothing — now lists what the index does cover - audit seo pattern flagged every component for missing generateMetadata (content/path confusion) — patterns now receive the file path
"Latest best practices" queries returned thin or generic answers because dead curated URLs came back as Jina-rendered 404 shells (Jina answers HTTP 200 for failed targets) and the evidence gate counted topic tokens inside link hrefs/utm params, rating those shells "strong". Garbage-gate all Jina and direct fetch paths, add length-independent error-page signals, and score evidence/quality on URL-stripped prose only (shared stripUrlNoise, code blocks keep URLs). Richness: best-practices merges the top 3 pages (capped, fence-balanced) for BM25 section ranking across sources; gt_search collects up to two sources with URL dedup, traverses llms.txt indexes via deep-fetch for registry hits, and escalates to web search once when combined evidence is weak. Section parsing is fence-aware (bash comments in code blocks no longer split sections) and truncation closes unbalanced fences. Refresh 50+ rotted curated URLs (Next.js App Router restructure, Prisma, Supabase, Zod, Mongoose, TypeORM, MobX, LangGraph, Auth.js, Nx) — every replacement verified live. npm audit fix: undici 8.7.0, hono 4.12.28.
Comprehensive testing against real project stacks surfaced two residual
failure modes after the Jina-404/evidence fixes: honest misses on pages
that exist (docs say "upgrade guide", callers say "migration"; slug
guessing burned the deep-fetch budget before real llms.txt links ran)
and link-list indexes served as answers (they pass evidence via link
text). Discovery now expands topic tokens with docs vocabulary
(migration/upgrade, performance/optimization, worklets/worklet, ...),
deep-fetch traverses index links before guessing slugs, and index pages
are treated as pointers — escalated, never returned as content.
Evidence hardening: query-meta words ("best", "practices", "latest")
no longer count as topic coverage, so off-topic pages cannot pass a
substantive query on generic overlap.
Maintenance: 24 more dead curated URLs replaced (verified live, incl.
expo/reanimated/nativewind), check-urls.mjs made CI-safe (GET retry for
HEAD-blocking hosts, fails only on 404/410), weekly url-health workflow
added, duplicated web-search block in gt_search extracted to a helper.
An all-14-tool live matrix against real project stacks exposed 11 failures. gt_compat scraped rendered MDN pages that lose compat tables; it now reads MDN's machine-readable index.json + BCD API (exact per-browser version_added incl. Node/Deno/Bun, Baseline dates). gt_snippets indexed a single document, so any framework whose llms.txt is a link index returned nothing; it now traverses topic-ranked index links, child pages, and the sitemap. Shared-layer gaps starved every tool: pointer llms.txt files (nextjs.org) are followed one hop to the real index, relative-link indexes (zustand) are now visible to isIndexContent/rankIndexLinks, sitemaps of path-hosted docs sites are discovered, and archived version trees no longer outrank current docs. gt_search ranks official domains above content farms and requires full evidence coverage per source on specific queries. gt_migration finds upgrade guides published at unguessable URLs via web search. gt_examples falls back to official-docs snippets since GitHub code search is auth-only and never worked without a token. gt_get_docs got index-content escalation parity; raceUrls ranks topic-first so a higher-quality off-topic page cannot win; dispatch routes natural "does safari support X" phrasing to gt_compat. Matrix: 21/32 -> 30/32 in burst mode (2 remaining are self-inflicted rate-limit opens, verified passing in fresh processes). Tests 1271 -> 1300, typecheck/lint/build/audit clean.
51-agent audit, every finding independently verified before fixing; 37
confirmed defects closed with zero regressions (1358 tests, +58).
P0: gt_audit regex ReDoS hung the stdio server on benign builder
chains; fetchViaJina buffered bodies with no 5MB cap; the injection
redactor desynced offsets across patterns and spliced markers into
legitimate prose. P1/P2 highlights: slow-drip bodies now bounded by the
abort timer; circuit breaker can no longer wedge on half-open probes;
registry package names no longer hijack explicit aliases; lockfile
lookups anchored to name boundaries; batch/compare fail per-item
instead of whole-call; dispatch never recommends schema-invalid calls;
extraction guard scoped to identifiers so ordinary topics ("complete
guide") are not refused; tool descriptions gained sibling boundaries
and the resolve tool no longer references a nonexistent tool name.
SDK 1.29 -> 1.30, @types/node 25 -> 26, eslint 10.4 -> 10.8, typescript-eslint 8.60 -> 8.65. TypeScript stays on 6.0.3 deliberately: @typescript-eslint/parser@8.65.0 declares peer typescript ">=4.8.4 <6.1.0", so TS 7 would break lint. Verified: typecheck clean, lint clean, build clean, 14 tools register.
Two scheduled workflows were failing since 2026-07-27. CI/Build: `npm audit --audit-level=high` failed on 4 high advisories that are all transitive under javascript-obfuscator, a build-time devDependency. npm's only offered fix is a 5.4.3 -> 0.14.3 downgrade, which would break the obfuscation stage. The blocking gate now audits production dependencies only (`--omit=dev`, currently 0 vulnerabilities), with a separate non-blocking dev audit so those advisories stay visible. URL Health: Effect restructured their docs, leaving two 404s in the curated registry. /docs/introduction -> /docs/getting-started/introduction /docs/guides/configuration -> /docs/configuration Verified: typecheck, lint, 1358 tests, build, prod audit all clean; URL check 761 alive, 0 dead.
security.yml carried an identical `npm audit --audit-level=high` step that the previous commit only fixed in ci.yml, so the Security run kept failing on the same dev-only javascript-obfuscator advisories.
dependabot
Bot
force-pushed
the
dependabot/github_actions/actions/checkout-7.0.1
branch
from
July 29, 2026 07:36
48eccf1 to
ba50269
Compare
publish.yml would have blocked the next npm release on the same dev-only javascript-obfuscator advisories. Aligns it with ci.yml and security.yml.
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.2 to 7.0.1. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@de0fac2...3d3c42e) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 7.0.1 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
dependabot
Bot
force-pushed
the
dependabot/github_actions/actions/checkout-7.0.1
branch
from
July 29, 2026 07:40
ba50269 to
e8b6d7f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps actions/checkout from 6.0.2 to 7.0.1.
Release notes
Sourced from actions/checkout's releases.
Changelog
Sourced from actions/checkout's changelog.
... (truncated)
Commits
3d3c42eprep v7.0.1 release (#2531)2880268escape values passed to --unset (#2530)12cd223trim only ascii whitespace for branch (#2521)62661c4skip running unsafe pr check if input is default (#2518)e8d4307Bump the minor-actions-dependencies group with 2 updates (#2499)631c942eslint 9 (#2474)4f1f4aeBump actions/upload-artifact from 4 to 7 (#2476)ba09753Bump actions/checkout from 6 to 7 (#2488)b9e0990Bump docker/login-action from 3.3.0 to 4.2.0 (#2479)e8cb398Bump docker/build-push-action from 6.5.0 to 7.2.0 (#2478)