* chore(claude): Add claude skill for Hugo development/testing workflow. Split ui-dev subagent into hugo-, ts-, and testing-specific agents.
* chore(claude): Update ui-testing agent and hugo-template-dev skill
* docs(plans): add docs-cli-workflow skill design
Design for a Claude Code skill that guides when to use
docs create/edit CLI tools versus direct file editing.
* feat(claude): add docs-cli-workflow skill
Guides Claude to suggest docs create/edit CLI tools when appropriate:
- Keyword-triggered activation (new page, edit URL, etc.)
- Decision matrix for create vs edit vs direct editing
- Suggestion templates with user confirmation
- Edge case handling
Addresses under-utilization of CLI scaffolding tools.
* chore(claude): add console error testing pattern to hugo-template-dev skill
Add Cypress pattern for catching JavaScript console errors during
component testing - useful for runtime errors, JSON parsing failures,
and template data binding issues.
* Document use-hashed-tokens configuration option
Added documentation for the use-hashed-tokens option, including its benefits, default value, and configuration methods.
* Update documentation for use-hashed-tokens option
Clarify default behavior for hashed API tokens in version 2.8 and future versions.
---------
Co-authored-by: Scott Anderson <sanderson@users.noreply.github.com>
Co-authored-by: Jason Stirnaman <jstirnaman@influxdata.com>
Update link-checker to v1.2.5 which adds --root-dir support for lychee v0.22.0+.
This fixes CI failures caused by lychee v0.22.0 (released Dec 5, 2025)
requiring --root-dir to resolve root-relative links in local files.
The link-checker now automatically sets --root-dir to the Hugo public/
directory when checking local HTML files.
Fixes failures for PRs touching /telegraf/v1 and /influxdb3/explorer paths.
* Initial plan
* feat: add Windows environment variable instructions for INFLUXDB3_AUTH_TOKEN
Co-authored-by: jstirnaman <212227+jstirnaman@users.noreply.github.com>
* refactor: update to new code-placeholders syntax
Co-authored-by: jstirnaman <212227+jstirnaman@users.noreply.github.com>
* Separate env var and CLI option into distinct sections instead of nested tabs
Co-authored-by: jstirnaman <212227+jstirnaman@users.noreply.github.com>
* Clarify that both auth methods are for CLI commands with parallel headings
Co-authored-by: jstirnaman <212227+jstirnaman@users.noreply.github.com>
* fix(3ent/core): Set token env var in Windows, clean up structure
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: jstirnaman <212227+jstirnaman@users.noreply.github.com>
Co-authored-by: Jason Stirnaman <jstirnaman@influxdata.com>
* docs(influxdb3): Use the CLI (influxdb3 --version), /ping endpoint, or /health endpoint to get the actual InfluxDB product version—not the SQL version() function.
Summary of Changes
1. content/shared/sql-reference/functions/misc.md (SQL version() function)
- Enhanced the description to clarify it returns the DataFusion query engine version
- Added a Note callout explicitly stating this is NOT the InfluxDB product version
- Added a link to the identify-version page for users who want to find their InfluxDB version
- Added an expandable example with the actual query and output:
SELECT version()
- Output: Apache DataFusion 49.0.2, aarch64 on linux
2. content/shared/identify-version.md (Identify version page)
Added a Note callout in three locations:
- Core-specific section (show-in "core")
- Enterprise-specific section (show-in "enterprise")
- General InfluxDB 3 Core and Enterprise section (in the tabs)
Replaced hardcoded patch version with latest-version shortcode
* fix(clustered): use "database" instead of "namespace" in release notes
Replace user-facing "namespace" terminology with "database" in the
Clustered release notes for clarity. Add a note explaining that
"namespace" in environment variable names refers to a database.
closesinfluxdata/DAR#556
Summary of Changes
1. content/shared/sql-reference/functions/misc.md (SQL version() function)
- Enhanced the description to clarify it returns the DataFusion query engine version
- Added a Note callout explicitly stating this is NOT the InfluxDB product version
- Added a link to the identify-version page for users who want to find their InfluxDB version
- Added an expandable example with the actual query and output:
SELECT version()
- Output: Apache DataFusion 49.0.2, aarch64 on linux
2. content/shared/identify-version.md (Identify version page)
Added a Note callout in three locations:
- Core-specific section (show-in "core")
- Enterprise-specific section (show-in "enterprise")
- General InfluxDB 3 Core and Enterprise section (in the tabs)
Replaced hardcoded patch version with latest-version shortcode
* chore(sql): add LAG examples for time-based value comparisons
Enhance window function documentation with practical examples for
calculating differences between current and previous values (e.g., 1h ago).
- Add 3 LAG examples to window functions reference with tested queries
- Create new 'Compare values' query guide covering common time-based
comparison patterns (differences, percentage changes, exact intervals)
- Add guide frontmatter for all InfluxDB 3 products
All queries validated against InfluxDB 3 Core.
Refs: Kapa.ai conversation https://app.kapa.ai/720100f9-ce93-4305-88fd-5fcf71effad7/conversations/4536b79e-3930-4359-87f5-2ad9ccc1917d
Starting from: https://docs.influxdata.com/influxdb3/cloud-serverless/reference/sql/functions/window/
* chore(sql): add counter metrics examples to compare-values guide
Enhance time-based value comparisons with counter metrics patterns
using LAG and GREATEST to handle counter resets.
- Add counter metrics section with 3 examples (rate, cumulative, intervals)
- Include tested queries for non-negative differences and aggregation
- Document workarounds for Flux increase() and InfluxQL NON_NEGATIVE_DIFFERENCE()
All queries validated against InfluxDB 3 Core.
Refs: Kapa.ai conversation https://app.kapa.ai/720100f9-ce93-4305-88fd-5fcf71effad7/conversations/16b13679-0ced-4780-ab58-3d9cacb2d899
Starting from: https://docs.influxdata.com/influxdb3/enterprise/
* Update content/shared/influxdb3-query-guides/sql/compare-values.md
Co-authored-by: Scott Anderson <sanderson@users.noreply.github.com>
---------
Co-authored-by: Scott Anderson <sanderson@users.noreply.github.com>
CircleCI builds Hugo to workspace/public, but the markdown generator
was hardcoded to look in public/. Added --public-dir argument:
- Default: public (for local dev and staging)
- CI: --public-dir workspace/public
Staging deployment (deploy-staging.sh) uses default public/ and
continues to work unchanged.
* feat(llms): LLM-friendly Markdown, ChatGPT and Claude links.
This enables LLM-friendly documentation for entire sections,
allowing users to copy complete documentation sections with a single click.
Lambda@Edge now generates .md files on-demand with:
- Evaluated Hugo shortcodes
- Proper YAML frontmatter with product metadata
- Clean markdown without UI elements
- Section aggregation (parent + children in single file)
The llms.txt files are now generated automatically during build from
content structure and product metadata in data/products.yml, eliminating
the need for hardcoded files and ensuring maintainability.
**Testing**:
- Automated markdown generation in test setup via cy.exec()
- Implement dynamic content validation that extracts HTML content and
verifies it appears in markdown version
**Documentation**:
Documents LLM-friendly markdown generation
**Details**:
Add gzip decompression for S3 HTML files in Lambda markdown generator
HTML files stored in S3 are gzip-compressed but the Lambda was attempting
to parse compressed data as UTF-8, causing JSDOM to fail to find article
elements. This resulted in 404 errors for .md and .section.md requests.
- Add zlib gunzip decompression in s3-utils.js fetchHtmlFromS3()
- Detect gzip via ContentEncoding header or magic bytes (0x1f 0x8b)
- Add configurable DEBUG constant for verbose logging
- Add debug logging for buffer sizes and decompression in both files
The decompression adds ~1-5ms per request but is necessary to parse
HTML correctly. CloudFront caching minimizes Lambda invocations.
Await async markdown conversion functions
The convertToMarkdown and convertSectionToMarkdown functions are async
but weren't being awaited, causing the Lambda to return a Promise object
instead of a string. This resulted in CloudFront validation errors:
"The body is not a string, is not an object, or exceeds the maximum size"
**Troubleshooting**:
- Set DEBUG for troubleshooting in lambda
* feat(llms): Add build-time LLM-friendly Markdown generation
Implements static Markdown generation during Hugo build.
**Key Features:**
- Two-phase generation: HTML→MD (memory-bounded), MD→sections (fast)
- Automatic redirect detection via file size check (skips Hugo aliases)
- Product detection using compiled TypeScript product-mappings module
- Token estimation for LLM context planning (4 chars/token heuristic)
- YAML serialization with description sanitization
**Performance:**
- ~105 seconds for 5,000 pages + 500 sections
- ~300MB peak memory (safe for 2GB CircleCI environment)
- 23 files/sec conversion rate with controlled concurrency
**Configuration Parameters:**
- MIN_HTML_SIZE_BYTES (default: 1024) - Skip files below threshold
- CHARS_PER_TOKEN (default: 4) - Token estimation ratio
- Concurrency: 10 workers (CI), 20 workers (local)
**Output:**
- Single pages: public/*/index.md (with frontmatter + content)
- Section bundles: public/*/index.section.md (aggregated child pages)
**Files Changed:**
- scripts/build-llm-markdown.js (new) - Main build script
- scripts/lib/markdown-converter.cjs (renamed from .js) - Core conversion
- scripts/html-to-markdown.js - Updated import path
- package.json - Updated exports for .cjs module
Related: Replaces Lambda@Edge on-demand generation (5s response time)
with build-time static generation for production deployment.
feat(deploy): Add staging deployment workflow and update CI
Integrates LLM markdown generation into deployment workflows with
a complete staging deployment solution.
**CircleCI Updates:**
- Switch from legacy html-to-markdown.js to optimized build:md
- 2x performance improvement (105s vs 200s+ for 5000 pages)
- Better memory management (300MB vs variable)
- Enables section bundle generation (index.section.md files)
**Staging Deployment:**
- New scripts/deploy-staging.sh for local staging deploys
- Complete workflow: Hugo build → markdown gen → S3 upload
- Environment variable driven configuration
- Optional step skipping for faster iteration
- CloudFront cache invalidation support
**NPM Scripts:**
- Added deploy:staging command for convenience
- Wraps deploy-staging.sh script
**Documentation:**
- Updated DOCS-DEPLOYING.md with comprehensive guide
- Merged staging/production workflows with Lambda@Edge docs
- Build-time generation now primary, Lambda@Edge fallback
- Troubleshooting section with common issues
- Environment variable reference
- Performance metrics and optimization tips
**Benefits:**
- Manual staging validation before production
- Consistent markdown generation across environments
- Faster CI builds with optimized script
- Better error handling and progress reporting
- Section aggregation for improved LLM context
**Usage:**
```bash
export STAGING_BUCKET="test2.docs.influxdata.com"
export AWS_REGION="us-east-1"
export STAGING_CF_DISTRIBUTION_ID="E1XXXXXXXXXX"
yarn deploy:staging
```
Related: Completes build-time markdown generation implementation
refactor: Remove Lambda@Edge implementation
Build-time markdown generation has replaced Lambda@Edge on-demand
generation as the primary method. Removed Lambda code and updated
documentation to focus on build-time generation and testing.
Removed:
- deploy/llm-markdown/ directory (Lambda@Edge code)
- Lambda@Edge section from DOCS-DEPLOYING.md
Added:
- Testing and Validation section in DOCS-DEPLOYING.md
- Focus on build-time generation workflow
* feat: Add Rust HTML-to-Markdown prototype
Implements core markdown-converter.cjs functions in Rust for performance comparison.
Performance results:
- Rust: ~257 files/sec (10× faster)
- JavaScript: ~25 files/sec average
Recommendation: Keep JavaScript for now, implement incremental builds first.
Rust migration provides 10× speedup but requires 3-4 weeks integration effort.
Files:
- Cargo.toml: Rust dependencies (html2md, scraper, serde_yaml, clap)
- src/main.rs: Core conversion logic + CLI benchmark tool
- benchmark-comparison.js: Side-by-side performance testing
- README.md: Comprehensive findings and recommendations
* fix(ui): improve dropdown positioning on viewport resize
- Ensure dropdown stays within viewport bounds (min 8px padding)
- Reposition dropdown on window resize and scroll events
- Clean up event listeners when dropdown closes
* chore(deps): add remark and unified packages for markdown processing
Add remark-parse, remark-frontmatter, remark-gfm, and unified for
enhanced markdown processing capabilities.
* fix(edge): add return to prevent trailing-slash redirect for valid extensions
Without the return statement, the Lambda@Edge function would continue
executing after the callback, eventually hitting the trailing-slash
redirect logic. This caused .md files to redirect to URLs with trailing
slashes, which returned 404 from S3.
* fix(md): add built-in product mappings and full URL support
- Add URL_PATTERN_MAP and PRODUCT_NAME_MAP constants directly in the
CommonJS module (ESM product-mappings.js cannot be require()'d)
- Update generateFrontmatter() to accept baseUrl parameter and construct
full URLs for the frontmatter url field
- Update generateSectionFrontmatter() similarly for section pages
- Update all call sites to pass baseUrl parameter
This fixes empty product fields and relative URLs in generated markdown
frontmatter when served via Lambda@Edge.
* feat(md): add environment flag for base URL control
Add -e, --env flag to html-to-markdown.js to control the base URL
in generated markdown frontmatter. This matches Hugo's -e flag behavior
and allows generating markdown with staging or production URLs.
Also update build-llm-markdown.js with similar environment support.
* feat(md): add Rust markdown converter and improve validation
- Add Rust-based HTML-to-Markdown converter with NAPI-RS bindings
- Update Cypress markdown validation tests
- Update deploy-staging.sh with force upload flag
* deploy-staging.sh:
- Defaults STAGING_URL to https://test2.docs.influxdata.com
if not set
- Exports it so yarn build:md -e staging can use it
- Displays it in the summary
* Delete scripts/prototypes/rust-markdown/benchmark-comparison.js
* Delete scripts/prototypes directory
* fix(llms): Include full URL for section page Markdown and list of child pages
* feat(llms): clarify format selector text for AI use case
Update button and dropdown text to make the AI/LLM purpose clearer:
- Button: "Copy page for AI" / "Copy section for AI"
- Sublabel: "Clean Markdown optimized for AI assistants"
- Section sublabel: "{N} pages combined as clean Markdown for AI assistants"
Cypress tests updated and passing (13/13).
---------
Co-authored-by: Scott Anderson <scott@influxdata.com>
* chore: Standard exclude comment format to denote flags, options, etc. that shouldn't be promoted in docs
* chore: exclude internal flags
* chore: Add docs:exclude comments for internal CLI flags, fix linting
- Note internal options that should be ignored by `docs audit` and authors.
- Remove character escaping from GitHub callouts and placeholders
Lint config changes:
- Add explicit exclude for content/**/*.md in lint-markdown-instructions
- Exclude all markdown files from Prettier formatting
Fixes issue where remark-lint was auto-formatting content files and
escaping special characters like [!Note] callouts and underscores.
* fix: cleanup escaping
* Initial plan
* Fix Edit this page link duplication
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Jason Stirnaman <jstirnaman@influxdata.com>
- Add DELETE /api/v3/configure/database/retention_period
- Add DELETE /api/v3/configure/token
- Add POST /api/v3/configure/token/named_admin
- Add PUT /api/v3/plugins/files (requires admin token)
- Add PUT /api/v3/plugins/directory (requires admin token)
Apply to both influxdb3/core/v3 and influxdb3/enterprise/v3 specs.
chore(api): Add RemoveInternalOperations decorator to document Redocly's built-in behavior, hiding endpoints that have `x-internal: true`
chore(api): Add yarn build:api-docs
This command:
1. Changes to the api-docs directory
2. Executes the generate-api-docs.sh script to generate API
documentation HTML from the OpenAPI specs
- Change Google.Quotes from error to warning to prevent blocking on code examples
- Update message to clarify exceptions for technical values and code examples
- Add case-insensitive flag to URL pattern in Vale.Terms vocabulary
- Fixes false positive on 'URL-encoded' and similar hyphenated URL terms
* docs: fix dedicated admin ui doc adjustments
* merge identity version under one heading
* docs: fix links in one location shortcode does not work
* chore: remove extra space from editor in admin ui access layout shortcode
* chore: 3.7 update
* fix(influxdb3): influxdb3 3.7 release:
- Avoid use of "retention policy" except for the storage engine
- User guide: specific heading, active voice
- Use SOURCE
* feat(influxdb3): update API docs for 3.7 release
- Add cluster-uuid response header to all write endpoints
- Document multi-member gzip payload support in ContentEncoding
- Update API version to 3.7.0 for both Core and Enterprise
- Extract cluster-uuid header to reusable component
Changes for InfluxDB 3.7 release include:
- cluster-uuid header now included in all HTTP responses
- Multi-member gzip support per RFC 1952 for write endpoints
- Compatible with v1 and v2 write endpoints
* fix(influxdb3): remove precision bug note - fixed in 3.7
Removed outdated bug note about abbreviated precision values not working
with /api/v3/write_lp endpoint. Testing confirms all abbreviated values
(ns, ms, us, s) now work correctly in InfluxDB 3.7.
Tested precision values:
- ns (nanoseconds) ✅
- ms (milliseconds) ✅
- us (microseconds) ✅
- s (seconds) ✅
* docs(influxdb3): add precision bug fix to v3.6.0 release notes
Document that abbreviated precision values (ns, ms, us, s) were fixed
in v3.6.0 to work with /api/v3/write_lp endpoint.
The fix was implemented in commit 97dafa177c and included in v3.6.0 release.
---------
Co-authored-by: Peter Barnett <peter.barnett03@gmail.com>
* chore: 3.7 update
* fix(influxdb3): influxdb3 3.7 release:
- Avoid use of "retention policy" except for the storage engine
- User guide: specific heading, active voice
- Use SOURCE
---------
Co-authored-by: Jason Stirnaman <jstirnaman@influxdata.com>