Skip to content

docs(v1): share byte-identical v1 content between OSS and Enterprise - #7622

Merged
jstirnaman merged 11 commits into
masterfrom
influxdbv1-shared-content
Aug 18, 2026
Merged

docs(v1): share byte-identical v1 content between OSS and Enterprise#7622
jstirnaman merged 11 commits into
masterfrom
influxdbv1-shared-content

Conversation

@jstirnaman

Copy link
Copy Markdown
Contributor

Part of #7620

What changed

Moved the 31 InfluxDB v1 pages whose OSS and Enterprise copies are provably
equivalent into content/shared/influxdb-v1/, leaving thin front-matter stubs in
both editions. For those pages, duplication is now structurally impossible rather
than discouraged by convention.

Supporting mechanism:

  • layouts/partials/product/content-path.html (new) resolves a product's URL
    root from data/products.yml, handling both the map and string content_path
    shapes.
  • layouts/partials/article/content.html now resolves a product-neutral
    /product/version/ placeholder using the page's product/version cascade
    instead of parsing the URL. The existing <product-root>/version form still
    works, including the digit-insensitivity that lets /influxdb/version/ resolve
    on influxdb3/* pages.
  • show-in / hide-in now match <version>, <product>, and the composite
    <product>/<version>.
  • data/products.yml -- enterprise_influxdb.content_path is now a
    version-keyed map, matching influxdb.
  • Divergence ratchet -- .ci/scripts/check-v1-shared-drift.js (+ 11 unit
    tests), .ci/v1-shared-drift-manifest.json, and
    .github/workflows/pr-v1-shared-drift.yml.

Decisions and rejected alternatives: docs/adr/0001-0003.

Why

The two v1 trees were coupled by convention only. Nothing failed when a fix
landed in one copy and not the other, so they drifted: 74 overlapping pages
differ by 4,881 lines
, including edition-independent Flux guides and OSS links
to a tools/shell/ page that no longer exists.

v1 is the only shared pair in this repo whose editions do not share a product
root (/influxdb/v1/ vs /enterprise_influxdb/v1/), which is why the existing
placeholder could not serve it -- one literal string cannot resolve to two roots.
Moving Enterprise v1 under the influxdb root was considered and deferred: it
changes 186 URLs and ~1,968 link references, and none of that is needed to stop
the drift (docs/adr/0002).

Impact

Two intentional side effects reach beyond v1. Both are called out because the
title does not imply them:

  1. show-in/hide-in now trim list entries. Five call sites wrote
    "core, enterprise" with a space, and the untrimmed token never matched, so
    powerbi.md rendered "Database token: Your with query permissions for the
    target database"
    on Enterprise, Clustered, and Cloud Dedicated. Those pages
    now render as written. Affects 2 pages.
  2. Moving text out of front-matter'd pages exposes pre-existing Vale errors,
    because Vale under-reports on pages that have front matter (filed as Vale under-reports on pages with front matter, so product pages are linted less strictly than shared content #7617).
    21 mechanical fixes applied -- spacing, Latin abbreviations, two duplicated
    words. 50th percentile is exempted inline as a standard technical term.

The 24 pairs that need per-hunk editorial judgment (1,508 lines) are not in
this PR. They are tracked in #7620 and guarded by the ratchet, which blocks any PR
that increases divergence in a listed pair. The ratchet is transitional and is
deleted when the manifest empties.

Verification

  • npx hugo exits 0; 5,959 pages.
  • Zero unresolved /product/version/ or <root>/version/ placeholders
    sitewide.
  • Baseline vs migrated, whole-site diff: 60 v1 pages and 2 v3 pages changed as
    intended, 0 unintended. Asset fingerprints were normalized, and Hugo build
    nondeterminism (~26 pages, filed as Hugo output is not reproducible: shortcode placeholder counter and taxonomy title casing vary between identical builds #7619) was proven with a control build of
    identical code and subtracted.
  • Ratchet proven to fail when a pair's divergence increases and pass when
    restored; node --test 11/11.
  • Vale clean under both the default config and .vale-instructions.ini
    (0 errors, 31 files). Codeblock lint, check-source-paths, and
    check-feedback-links pass. All pre-commit hooks pass.
  • Cypress test:shortcode-examples: 5/6. The one failure,
    Docs home, can search with mispellings, queries Algolia's hosted index, which
    reflects production and cannot be affected by this branch.

Checklist

  • Signed the InfluxData CLA
  • Rebased/mergeable
  • Local build passes (npx hugo --quiet)

InfluxDB v1 OSS (content/influxdb/v1) and v1 Enterprise
(content/enterprise_influxdb/v1) kept two copies of every overlapping page,
coupled by convention only. They drifted: 74 overlapping pages differ by 4,881
lines, including edition-independent Flux guides and OSS links to a
tools/shell/ page that no longer exists.

Move the 31 pages whose two copies are provably equivalent into
content/shared/influxdb-v1/, leaving thin front-matter stubs. For these,
duplication is now structurally impossible rather than discouraged.

The v1 pair is the only shared pair whose editions do not share a product root,
so the existing <product-root>/version link placeholder cannot serve it. Shared
v1 content uses a neutral /product/version/ placeholder that
article/content.html resolves from the consuming page's content_path in
data/products.yml. Path resolution no longer parses the URL.

Both v1 editions cascade version: v1, so show-in/hide-in could not tell them
apart. They now match <version>, <product>, and <product>/<version>.

Decisions and rejected alternatives: docs/adr/0001-0003.

Side effects, both intentional:
- show-in/hide-in now trim list entries. Five call sites wrote "core, enterprise"
  with a space and never matched, so powerbi.md rendered "Your with query
  permissions for the target database" on Enterprise. Those pages now render as
  written.
- Moving text out of front-matter'd pages exposes pre-existing Vale errors,
  because Vale under-reports on pages that have front matter. Twenty-one
  mechanical fixes applied (spacing, Latin abbreviations, two duplicated words);
  "50th percentile" exempted inline as a standard technical term.

The remaining 24 pairs need per-hunk editorial judgment and are deferred. A
transitional blocking check keeps them from drifting further; it deletes itself
when the manifest empties.

Verification: Hugo build clean; zero unresolved placeholders across 5,959 pages;
baseline-vs-migrated diff shows 60 v1 pages and 2 v3 pages changed as intended
and nothing else, after subtracting build nondeterminism proven by a control
build of identical code.
PLAN.md is ephemeral and blocked from merging by block-ephemeral-docs.yml.
Its durable content moved to permanent homes: decisions to docs/adr/0001-0003,
the phase A worklist, terminology, and baseline measurements to #7620, and the
three tooling findings to #7617, #7618, and #7619.
@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Vale Style Check Results

Metric Count
Errors 0
Warnings 6
Warnings (6)
File Line Rule Message
content/enterprise_influxdb/v1/concepts/insights_tradeoffs.md 4 InfluxDataDocs.WordList Use 'capability' or 'feature' instead of 'functionality'.
content/enterprise_influxdb/v1/flux/guides/conditional-logic.md 16 InfluxDataDocs.Spelling Did you really mean 'ffffff'?
content/enterprise_influxdb/v1/flux/guides/geo/_index.md 18 Google.Quotes Commas and periods go inside quotation marks.
content/enterprise_influxdb/v1/flux/guides/geo/group-geo-data.md 20 Google.Quotes Commas and periods go inside quotation marks.
content/enterprise_influxdb/v1/flux/guides/geo/shape-geo-data.md 20 Google.Quotes Commas and periods go inside quotation marks.
content/enterprise_influxdb/v1/flux/guides/geo/shape-geo-data.md 20 Google.Quotes Commas and periods go inside quotation marks.

Check passed

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Release version check

No release-notes pages with a tracked version changed in this PR.

💡 Badge new features with the version

Documenting a new feature? Add a version badge in the page frontmatter — the
same mechanism used elsewhere in the docs:

  • metadata: [InfluxDB 3 Core v3.11+] — badge list under the page title
  • updated_in: v3.11 — an "Updated in v3.11" badge
  • introduced: v3.11 — a "‹Product› v3.11+" badge
  • menu.params.state: new — a "NEW" pill on the sidebar nav item

For inline version text, use {{< latest-patch >}} / {{< current-version >}},
which read the value from data/products.yml so it stays correct automatically.

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

🔗 Link Check Results — Link Check Bot

All links are valid

Metric Value
Files Checked 22
Total Links 6981
Errors 0
Warnings 35
Success Rate 99.05457%
⚠️ 35 warning(s) (do not fail CI)
Source File URL Issue
content/enterprise_influxdb/v1/administration/identify-version/_index.md https://support.influxdata.com/ Error (cached): Error (cached)
content/enterprise_influxdb/v1/administration/identify-version/_index.md https://reddit.com/r/influxdb Error (cached)
content/enterprise_influxdb/v1/concepts/crosswalk/_index.md https://support.influxdata.com/ Network error: SSL certificate not trusted. Use --insecure if site is trusted (e…
content/enterprise_influxdb/v1/concepts/glossary/_index.md https://support.influxdata.com/ Network error: SSL certificate not trusted. Use --insecure if site is trusted (e…
content/enterprise_influxdb/v1/concepts/insights_tradeoffs/_index.md https://reddit.com/r/influxdb Error (cached)
content/enterprise_influxdb/v1/concepts/insights_tradeoffs/_index.md https://support.influxdata.com/ Error (cached): Error (cached)
content/enterprise_influxdb/v1/concepts/time-series-index/_index.md https://reddit.com/r/influxdb Error (cached)
content/enterprise_influxdb/v1/concepts/time-series-index/_index.md https://support.influxdata.com/ Error (cached): Error (cached)
content/enterprise_influxdb/v1/flux/flux-vs-influxql/_index.md https://support.influxdata.com/ Network error: SSL certificate not trusted. Use --insecure if site is trusted (e…
content/enterprise_influxdb/v1/flux/get-started/_index.md https://support.influxdata.com/ Network error: SSL certificate not trusted. Use --insecure if site is trusted (e…
content/enterprise_influxdb/v1/flux/get-started/syntax-basics/_index.md https://support.influxdata.com/ Error (cached): Error (cached)
content/enterprise_influxdb/v1/flux/get-started/syntax-basics/_index.md https://reddit.com/r/influxdb Error (cached)
content/enterprise_influxdb/v1/flux/get-started/transform-data/_index.md https://reddit.com/r/influxdb Error (cached)
content/enterprise_influxdb/v1/flux/get-started/transform-data/_index.md https://support.influxdata.com/ Error (cached): Error (cached)
content/enterprise_influxdb/v1/flux/guides/calculate-percentages/_index.md https://support.influxdata.com/ Network error: SSL certificate not trusted. Use --insecure if site is trusted (e…
content/enterprise_influxdb/v1/flux/guides/conditional-logic/_index.md https://support.influxdata.com/ Network error: SSL certificate not trusted. Use --insecure if site is trusted (e…
content/enterprise_influxdb/v1/flux/guides/cumulativesum/_index.md https://reddit.com/r/influxdb Error (cached)
content/enterprise_influxdb/v1/flux/guides/cumulativesum/_index.md https://support.influxdata.com/ Error (cached): Error (cached)
content/enterprise_influxdb/v1/flux/guides/exists/_index.md https://support.influxdata.com/ Network error: SSL certificate not trusted. Use --insecure if site is trusted (e…
content/enterprise_influxdb/v1/flux/guides/fill/_index.md https://reddit.com/r/influxdb Error (cached)

Showing first 20 of 35 warnings. See the workflow run for full results.


Full details: workflow run summary and artifact. Last updated: 2026-08-18 17:18:33 UTC

Vale 3.17.0 (the version CI pins) flags two errors that the pre-migration pages
never surfaced:

- The median stubs' description repeated "(50th percentile)" alongside
  "median". Vale lints short stubs' front matter, unlike the long pages these
  replaced. Dropped the redundant parenthetical.
- group-data.md used spaced en dashes around an appositive. Replaced with an
  unspaced em dash per Google style. Pre-existing in both editions.

Verified with Vale 3.17.0 rather than the locally installed 3.15.1: vale.sh only
enforces its VALE_VERSION pin in CI and the Docker fallback, accepting any local
major >= 3.
The link checker only inspects changed files, so these pages had not been
checked in a long time. All were already broken on master:

- median.md anchors used hyphens (#estimate-tdigest) but Hugo keeps the
  underscores from the headings (#estimate_tdigest).
- collectd.md and graphite.md linked #a-note-on-udp-ip-os-buffer-sizes; Hugo
  drops the slash in 'UDP/IP', producing #a-note-on-udpip-os-buffer-sizes.
- math_operators.md pointed at github.com/influxdb/influxdb (wrong org, 404).
  The influxdata org URL returns 200.

The remaining failure, the dead regex-golang.appspot.com tester, needs an
editorial choice of replacement and is tracked in #7623 under area:links, which
downgrades it to a warning.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Empty shared targets, a bypassable ratchet, and data-shape regressions can blank pages or disable automation.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.

Pull request overview

Centralizes equivalent InfluxDB v1 OSS and Enterprise documentation to prevent future content drift.

Changes:

  • Moves 31 page pairs into shared content with thin product stubs.
  • Adds product-aware link and visibility resolution.
  • Adds ADRs and a CI divergence ratchet for remaining pairs.
File summaries
File Description
PLATFORM_REFERENCE.md Regenerates product path reference.
data/products.yml Changes Enterprise v1 path shape.
layouts/partials/article/content.html Resolves shared-content placeholders.
layouts/partials/product/content-path.html Adds product path resolver.
layouts/shortcodes/show-in.html Expands visibility matching.
layouts/shortcodes/hide-in.html Expands visibility matching.
docs/adr/0001-share-influxdb-v1-prose-content.md Records sharing decision.
docs/adr/0002-keep-v1-url-roots.md Records URL-root decision.
docs/adr/0003-edition-discrimination-in-shared-v1-content.md Records edition matching decision.
.github/workflows/pr-v1-shared-drift.yml Adds drift-check workflow.
.ci/v1-shared-drift-manifest.json Lists remaining divergent pairs.
.ci/scripts/check-v1-shared-drift.js Implements divergence ratchet.
.ci/scripts/check-v1-shared-drift.test.js Tests divergence logic.
content/shared/influxdb-v1/write_protocols/_index.md Shares write-protocol overview.
content/shared/influxdb-v1/administration/identify-version.md Adds identify-version target.
content/shared/influxdb-v1/concepts/crosswalk.md Shares crosswalk content.
content/shared/influxdb-v1/concepts/insights_tradeoffs.md Shares design tradeoffs.
content/shared/influxdb-v1/concepts/time-series-index.md Shares TSI overview.
content/shared/influxdb-v1/query_language/math_operators.md Shares math-operator reference.
content/shared/influxdb-v1/troubleshooting/_index.md Shares troubleshooting index.
content/shared/influxdb-v1/troubleshooting/systemd.md Shares systemd guidance.
content/shared/influxdb-v1/supported_protocols/_index.md Shares protocol index.
content/shared/influxdb-v1/supported_protocols/collectd.md Shares collectd guidance.
content/shared/influxdb-v1/supported_protocols/graphite.md Shares Graphite guidance.
content/shared/influxdb-v1/supported_protocols/opentsdb.md Shares OpenTSDB guidance.
content/shared/influxdb-v1/supported_protocols/udp.md Shares UDP guidance.
content/shared/influxdb-v1/tools/flux-vscode.md Shares VS Code guidance.
content/shared/influxdb-v1/tools/inch.md Shares inch guidance.
content/shared/influxdb-v1/tools/mcp-server.md Adds MCP wrapper.
content/shared/influxdb-v1/tools/influxd/_index.md Shares influxd overview.
content/shared/influxdb-v1/tools/influxd/config.md Shares config command.
content/shared/influxdb-v1/tools/influxd/run.md Shares run command.
content/shared/influxdb-v1/tools/influxd/version.md Shares version command.
content/shared/influxdb-v1/flux/guides/_index.md Shares Flux guide index.
content/shared/influxdb-v1/flux/guides/cumulativesum.md Shares cumulative-sum guide.
content/shared/influxdb-v1/flux/guides/fill.md Shares fill guide.
content/shared/influxdb-v1/flux/guides/geo/shape-geo-data.md Shares geo-shaping guide.
content/shared/influxdb-v1/flux/guides/group-data.md Shares grouping guide.
content/shared/influxdb-v1/flux/guides/increase.md Shares increase guide.
content/shared/influxdb-v1/flux/guides/median.md Shares median guide.
content/shared/influxdb-v1/flux/guides/moving-average.md Shares moving-average guide.
content/shared/influxdb-v1/flux/guides/rate.md Shares rate guide.
content/shared/influxdb-v1/flux/guides/regular-expressions.md Shares regex guide.
content/shared/influxdb-v1/flux/guides/sort-limit.md Shares sorting guide.
content/influxdb/v1/write_protocols/_index.md Sources shared content.
content/influxdb/v1/administration/identify-version.md Sources shared content.
content/influxdb/v1/concepts/crosswalk.md Sources shared content.
content/influxdb/v1/concepts/insights_tradeoffs.md Sources shared content.
content/influxdb/v1/concepts/time-series-index.md Sources shared content.
content/influxdb/v1/query_language/math_operators.md Sources shared content.
content/influxdb/v1/troubleshooting/_index.md Sources shared content.
content/influxdb/v1/troubleshooting/systemd.md Sources shared content.
content/influxdb/v1/supported_protocols/_index.md Sources shared content.
content/influxdb/v1/supported_protocols/collectd.md Sources shared content.
content/influxdb/v1/supported_protocols/graphite.md Sources shared content.
content/influxdb/v1/supported_protocols/opentsdb.md Sources shared content.
content/influxdb/v1/supported_protocols/udp.md Sources shared content.
content/influxdb/v1/tools/flux-vscode.md Sources shared content.
content/influxdb/v1/tools/inch.md Sources shared content.
content/influxdb/v1/tools/mcp-server.md Sources shared content.
content/influxdb/v1/tools/influxd/_index.md Sources shared content.
content/influxdb/v1/tools/influxd/config.md Sources shared content.
content/influxdb/v1/tools/influxd/run.md Sources shared content.
content/influxdb/v1/tools/influxd/version.md Sources shared content.
content/influxdb/v1/flux/guides/_index.md Sources shared content.
content/influxdb/v1/flux/guides/cumulativesum.md Sources shared content.
content/influxdb/v1/flux/guides/fill.md Sources shared content.
content/influxdb/v1/flux/guides/geo/shape-geo-data.md Sources shared content.
content/influxdb/v1/flux/guides/group-data.md Sources shared content.
content/influxdb/v1/flux/guides/increase.md Sources shared content.
content/influxdb/v1/flux/guides/median.md Sources shared content.
content/influxdb/v1/flux/guides/moving-average.md Sources shared content.
content/influxdb/v1/flux/guides/rate.md Sources shared content.
content/influxdb/v1/flux/guides/regular-expressions.md Sources shared content.
content/influxdb/v1/flux/guides/sort-limit.md Sources shared content.
content/enterprise_influxdb/v1/write_protocols/_index.md Sources shared content.
content/enterprise_influxdb/v1/administration/identify-version.md Sources shared content.
content/enterprise_influxdb/v1/concepts/crosswalk.md Sources shared content.
content/enterprise_influxdb/v1/concepts/insights_tradeoffs.md Sources shared content.
content/enterprise_influxdb/v1/concepts/time-series-index.md Sources shared content.
content/enterprise_influxdb/v1/query_language/math_operators.md Sources shared content.
content/enterprise_influxdb/v1/troubleshooting/_index.md Sources shared content.
content/enterprise_influxdb/v1/troubleshooting/systemd.md Sources shared content.
content/enterprise_influxdb/v1/supported_protocols/_index.md Sources shared content.
content/enterprise_influxdb/v1/supported_protocols/collectd.md Sources shared content.
content/enterprise_influxdb/v1/supported_protocols/graphite.md Sources shared content.
content/enterprise_influxdb/v1/supported_protocols/opentsdb.md Sources shared content.
content/enterprise_influxdb/v1/supported_protocols/udp.md Sources shared content.
content/enterprise_influxdb/v1/tools/flux-vscode.md Sources shared content.
content/enterprise_influxdb/v1/tools/inch.md Sources shared content.
content/enterprise_influxdb/v1/tools/mcp-server.md Sources shared content.
content/enterprise_influxdb/v1/tools/influxd/_index.md Sources shared content.
content/enterprise_influxdb/v1/tools/influxd/config.md Sources shared content.
content/enterprise_influxdb/v1/tools/influxd/run.md Sources shared content.
content/enterprise_influxdb/v1/tools/influxd/version.md Sources shared content.
content/enterprise_influxdb/v1/flux/guides/_index.md Sources shared content.
content/enterprise_influxdb/v1/flux/guides/cumulativesum.md Sources shared content.
content/enterprise_influxdb/v1/flux/guides/fill.md Sources shared content.
content/enterprise_influxdb/v1/flux/guides/geo/shape-geo-data.md Sources shared content.
content/enterprise_influxdb/v1/flux/guides/group-data.md Sources shared content.
content/enterprise_influxdb/v1/flux/guides/increase.md Sources shared content.
content/enterprise_influxdb/v1/flux/guides/median.md Sources shared content.
content/enterprise_influxdb/v1/flux/guides/moving-average.md Sources shared content.
content/enterprise_influxdb/v1/flux/guides/rate.md Sources shared content.
content/enterprise_influxdb/v1/flux/guides/regular-expressions.md Sources shared content.
content/enterprise_influxdb/v1/flux/guides/sort-limit.md Sources shared content.
Review details
  • Files reviewed: 105/106 changed files
  • Comments generated: 10
  • Review effort level: Balanced

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

Comment thread .ci/scripts/check-v1-shared-drift.js Outdated
Comment thread data/products.yml Outdated
Comment thread content/enterprise_influxdb/v1/administration/identify-version.md Outdated
Comment thread content/shared/influxdb-v1/supported_protocols/udp.md Outdated
Comment thread content/influxdb/v1/administration/identify-version.md Outdated
Comment thread content/shared/influxdb-v1/tools/mcp-server.md Outdated
Comment thread content/shared/influxdb-v1/supported_protocols/graphite.md Outdated
Comment thread layouts/shortcodes/show-in.html
Comment thread layouts/partials/article/content.html
Comment thread layouts/shortcodes/hide-in.html
regex-golang.appspot.com returns 404; the App Engine app is gone. Removing the
entry rather than replacing it: Regex101, already listed on the next line,
supports the Golang/RE2 flavor, so the 'Go regex testers' section still points
readers at a working tool.

The identical link in content/shared/influxdb-v2/query-data/flux/regular-expressions.md
is untouched here and stays tracked in #7623.
@jstirnaman
jstirnaman marked this pull request as ready for review August 17, 2026 17:20
@jstirnaman
jstirnaman requested a review from a team as a code owner August 17, 2026 17:20
@jstirnaman
jstirnaman requested review from sanderson and removed request for a team August 17, 2026 17:20
jstirnaman and others added 2 commits August 17, 2026 12:24
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: jstirnaman <212227+jstirnaman@users.noreply.github.com>
@jstirnaman

Copy link
Copy Markdown
Contributor Author

Fixes for Copilot review comments

What changed

  • identify-version.md and mcp-server.md stubs (OSS v1 and Enterprise v1) now source from existing shared content (shared/identify-version.md, shared/influxdb3-admin/mcp-server-docs-only.md) instead of empty, unwired wrapper files. The wrapper files are deleted.
  • Removed a dead enterprise-v1 identifier from a hide-in list in identify-version.md; it never matched any identifier the shortcode produces, and v1 in the same list already covers both editions.
  • Removed the duplicate h1 from udp.md and graphite.md; the page title already renders one.
  • Reverted enterprise_influxdb.content_path in products.yml from a map back to a string, and regenerated PLATFORM_REFERENCE.md. The map shape broke getProductLabelMap() (silently dropped the product:v1-enterprise label) and made the generator omit the product's content path and URL. The string shape already resolves correctly at render time via the existing version-append logic in product/content-path.html.
  • Added Cypress coverage for show-in/hide-in composite (<product>/<version>), bare-product, and whitespace-trimmed identifiers, and for article/content.html's /product/version/ placeholder resolution against both a map-shaped and a string-shaped content_path.
  • Closed a gap in check-v1-shared-drift.js: the ratchet now unions the manifest's pairs at the base ref with its pairs at head, so removing an entry from the manifest can no longer, by itself, take a pair out of comparison.

Why

Copilot's review flagged 10 issues. All 10 checked out: three meant pages would render with no article body, one was already visibly broken in this PR's own PLATFORM_REFERENCE.md diff, two were rendering bugs (duplicate h1), one was a CI control gap, and three were missing test coverage for behavior this PR introduced.

Impact

  • /influxdb/v1/administration/identify-version/, /enterprise_influxdb/v1/administration/identify-version/, /influxdb/v1/tools/mcp-server/, and /enterprise_influxdb/v1/tools/mcp-server/ render full content instead of blank pages.
  • udp.md/graphite.md pages render one h1 instead of two.
  • Enterprise v1 content is labeled and referenced correctly again in PLATFORM_REFERENCE.md and the label-mapping script.
  • A future PR can no longer bypass the v1 drift check by editing the manifest alone.

Verification

  • npx hugo --quiet: clean build.
  • Confirmed rendered article body text (not just frontmatter) on all four previously-blank pages.
  • Confirmed single <h1> in rendered output for the udp/graphite pages.
  • Confirmed /product/version/ links resolve to the correct edition root on both OSS and Enterprise v1 pages.
  • node cypress/support/run-e2e-specs.js --spec "cypress/e2e/content/shortcodes.cy.js,cypress/e2e/content/shortcodes-real-pages.cy.js" --no-mapping: 179 tests, 167 passing, 12 pending (skipped on non-v1 products), 0 failing.
  • node --test .ci/scripts/check-v1-shared-drift.test.js: 12/12 passing.
  • node .ci/scripts/check-v1-shared-drift.js --base HEAD: "No v1 pair diverged further (30 pairs checked)."

Commits: f51d6cb, 54e3781, 0885a5f, 8298a5f, 8aba0d0.

@github-actions github-actions Bot added product:shared Shared content across products product:v1 InfluxDB v1 OSS labels Aug 18, 2026
…o shared content (#7663)

* docs(v1): reconcile eight v1 Flux pages into shared content

Move the eight pages whose OSS/Enterprise divergence resolves without
editorial taste, leaving front-matter stubs. Part of #7620.

The two copies were each swept by a different mass-edit at a different time,
which is why neither edition is "the newer copy":

- Code formatting: Enterprise ran through flux fmt (four-space pipe indent,
  trailing commas); OSS did not. Enterprise wins.
- Flux stdlib links: OSS was updated for the post-0.65 stdlib layout;
  Enterprise still points at built-in/inputs, built-in/outputs, and
  universe/type-conversions, none of which resolve. OSS wins.

Four hunks needed a target neither copy had:

- geo/group-geo-data.md: Enterprise called the geo.asTracks() parameter
  sortBy. The stdlib reference documents it as orderBy, so OSS is correct.
  content/shared/influxdb-v2/query-data/flux/geo/group-geo-data.md has the
  same defect in prose while its example uses orderBy; filed separately.
- geo/_index.md: both copies linked a dead to()/from() path. Enterprise used
  the pre-0.65 built-in layout, OSS used a trailing-slash variant that also
  fails. Both now point at stdlib/influxdata/influxdb/.
- sql.md: the Enterprise "create a database" link pointed at
  introduction/getting-started/#creating-a-database, an anchor that page does
  not contain -- it is a Chronograf pointer page. OSS pointed at its own
  get-started tutorial, which has no Enterprise equivalent. Both now point at
  query_language/manage-database/#create-database, which resolves in either
  edition and documents CREATE DATABASE.
- window-aggregate.md / query-fields.md: OSS link targets confirmed against
  content/shared/influxdb-v2, the maintained upstream both editions declare
  canonical.

Vale, as #7620 anticipated: six Google.Ordinal errors surfaced in
percentile-quantile.md, exempted at file scope because percentile ordinals are
standard statistical terminology. One "the the" repetition in
geo/filter-by-region.md fixed. Added "quantiles?" to the accept vocabulary --
percentile is in the base dictionary, quantile was not.

Verification: Hugo build clean, zero unresolved /product/version/ placeholders
in either v1 edition, Vale reports zero errors across all 19 shared v1 Flux
guides. Manifest down from 24 pairs to 16.

* docs(v1): reconcile three more v1 Flux pages into shared content

Part of #7620. Manifest down from 16 pairs to 13.

flux/installation.md is the edition-specific case #7620 flagged: OSS documents
one configuration guide with an anchor (administration/config/), Enterprise
documents a directory of them (administration/configure/). Neither path
resolves in the other edition, so the blockquote is duplicated inside
block-scoped show-in wrappers.

Inline show-in does not work here. Two adjacent inline conditionals inside a
blockquote break the block on whichever edition hits the empty branch first --
{{% %}} renders its inner content as its own Markdown block, so the surviving
branch escapes as a sibling paragraph:

  <blockquote><p>...More information is available in the</p></blockquote>
  <p><a href=...>Configuring InfluxDB</a> guides.</p>

Hugo exits 0 either way, so this was caught by grepping the rendered HTML of
both editions, not by the build.

flux/guides/manipulate-timestamps.md: Enterprise's five stale stdlib links
(universe/type-conversions/{time,uint,string}/, built-in/misc/now/) plus a
language/types/ path dead in both editions, all repaired against
content/shared/influxdb-v2/query-data/flux/operate-on-timestamps.md and
verified to resolve.

flux/get-started/_index.md: Enterprise had dropped the Flux REPL entirely --
the "influx CLI" section and its mention under "What you will need". The REPL
is not OSS-only; content/enterprise_influxdb/v1/flux/execute-queries.md
documents it. Restored from OSS, with Enterprise's more specific "Flux v0.65"
kept over OSS's bare "Flux".

The restored section no longer restates a version floor. OSS said v1.8+ while
Enterprise's execute-queries.md says the REPL needs 1.10+, and Enterprise's own
get-started page says v1.8+ -- two Enterprise pages already disagree. Shared
content now points at each edition's execute-queries page, which owns that
claim, rather than freezing an unverified floor into both products. The
Enterprise 1.10+/1.8+ contradiction is pre-existing and filed separately.

Verification: Hugo build clean, both editions render one intact blockquote with
their own configuration target, zero unresolved /product/version/ placeholders,
Vale reports zero errors.

* docs(v1): reconcile six more v1 Flux pages into shared content

Part of #7620. Manifest down from 13 pairs to 7.

monitor-states.md, flux-in-dashboards.md: Enterprise's copies are not just
better formatted, they fix broken examples. OSS had a stateDuration() snippet
starting with a bare `|>` and no `data` pipeline source, a stateCount call with
its opening paren on the next line, and a `window(every: autoInterval)` step
missing its `|>` entirely. Enterprise wins.

flux-in-dashboards.md also merges across editions: OSS's "InfluxDB v1.8+"
(v1.9 and v1.10 also work) with Enterprise's "required to use Flux in
dashboards" phrasing.

histograms.md, calculate-percentages.md, scalar-values.md: Enterprise
formatting with OSS stdlib link targets, all verified to resolve. scalar-values
needed a target neither copy had -- OSS pointed at /flux/v0/flux-functions
(dead, and misspelled "queiry"), Enterprise at universe/stream-table/ (dead,
pre-0.65 layout). Both now point at /flux/v0/function-types/#dynamic-queries,
which is the current term and links back to this guide.

exists.md is the page #7620 singled out, and both copies are partly right:

- Enterprise has the v1-correct links; OSS sent readers to
  /influxdb/v2/query-data/execute-queries/, and to /flux/v0/get-started/
  instead of the edition's own guide.
- Enterprise uses from(bucket: "db/rp"); OSS leaked v2's "example-bucket".
- OSS has a "statically defined record" section Enterprise dropped.

Enterprise's intro example also claims `exists p.height` returns false for a
record literal with no height key, which contradicts OSS's static-record
section. Dropped in favor of the row-record framing that the Flux spec backs
(spec/operators.md: exists returns false if the operand is null), and the
front-matter description updated to match.

The static-record behavior was measured rather than inferred, against throwaway
containers on the v1 line:

  v1.8.10   exists p.height on a record literal without height type-checks and
            runs -- no error. internal/debug does not exist at all.
  v1.11.8   error @4:43-4:44: record is missing label height, at compile time.
            exists p.firstName type-checks.

So the section is true for v1.11+ and false for v1.8, which this page names as
its floor. Kept with a note stating that, rather than asserted unconditionally.
Plain OSS image tags jump 1.8 to 1.11 (1.9 and 1.10 ship only as Enterprise
data/meta images), so those two versions bracket OSS exactly.

The v2 upstream's version of this section uses debug.null(type: "int"), which
cannot run on v1: internal/debug.null was introduced in Flux 0.179.0 and v1.8
bundles v0.65. Not imported.

Vale: one "of of" repetition in histograms.md fixed, and its bare `le` column
name marked as code.

Verification: Hugo build clean, zero unresolved /product/version/ placeholders,
Vale reports zero errors. Probe containers removed.

* docs(v1): reconcile five more v1 Flux pages into shared content

Part of #7620. Manifest down from 7 pairs to 2.

mathematic-operations.md is where OSS wins every text hunk. Enterprise pointed
the REPL link at /influxdb/v2/tools/repl/, sending v1 readers into v2 docs,
where OSS linked the edition's own execute-queries page and its #influx-cli
anchor -- present in both editions. Enterprise also had two dead
universe/type-conversions/ links, an anchor that does not exist on the
custom-functions page (#functions-that-manipulate-piped-forward-data rather
than #use-piped-forward-data-in-a-custom-function), and a "Calculate
percentates" typo. The /flux/v0/language/operators/ path, dead in both copies,
now points at /flux/v0/spec/operators/#arithmetic-operators.

transform-data.md runs the other way: Enterprise wins the link hunk too. OSS
kept the dead /flux/v0/language/types/#duration-types while Enterprise had
already moved to spec/types/. The winner is per-hunk, not per-edition.

join.md, conditional-logic.md: formatting only. conditional-logic's one
substantive difference, OSS's bare `dueDate = 2019-05-01` against Enterprise's
`2019-05-01T00:00:00Z`, was checked against running v1.8.10 and v1.11.8 --
both forms type-check, so it is style, and the explicit RFC3339 form is kept.

syntax-basics.md: Enterprise had dropped the same influx CLI section it dropped
from get-started/_index.md, which also left the page opening on an h3 with no
h2 parent. Restored from OSS, minus its blockquote pointing at
/platform/install-and-deploy/deploying/sandbox-install -- the InfluxData
Sandbox page no longer exists anywhere in this repo, so restoring it verbatim
would import a dead link. Version and authentication details defer to each
edition's execute-queries page, as in get-started/_index.md.

Vale, all pre-existing and exposed by the move: "and and" in join.md, "through
through" in syntax-basics.md. Also dropped "at its core" as filler and changed
join.md's sentence-dash to a colon.

Verification: Hugo build clean, zero unresolved /product/version/ placeholders,
Vale reports zero errors.

* docs(v1): reconcile the v1 glossary into shared content

Part of #7620. Manifest down from 2 pairs to 1.

Enterprise's copy wins the structure: it uses relative anchors (#function) where
OSS wrote absolute paths (/influxdb/v1/concepts/glossary/#function). On a page
shared by two editions the relative form is strictly better, and that single
difference accounts for most of the 183 diverging lines.

#7620 describes Enterprise as defining ten terms OSS lacks. Seven of them are
real and are now wrapped in show-in blocks: data node, data service, meta node,
meta service, passive node (experimental), web console, and replication factor.
The other three -- grant, permission, role -- are empty commented-out headings
with no definitions. They render nothing in either edition, so they are removed
rather than migrated.

replication factor is not additive, it is two different definitions of one term.
OSS explains that replication has no effect on a single node and points at
Enterprise; Enterprise explains cluster behavior. Both are edition-correct, so
both are kept under one heading, each in its own show-in block.

That heading is a rename with consequences. OSS used "replication factor"
(#replication-factor), Enterprise "replication factor (RF)"
(#replication-factor-rf). Enterprise's form matches the page's own convention
for continuous query (CQ) and retention policy (RP), so it wins, and the three
pages still linking the old anchor are updated. One of them,
enterprise_influxdb/v1/guides/hardware_sizing.md, was pointing into
/influxdb/v1/ from an Enterprise page; it now links within its own edition.
Enterprise's own "Related entries" link to #replication-factor was already
broken against its own heading and is fixed by the same change.

Also corrected while merging: "InfluxDB 2.0 API compatibility endpoints" to
2.x, and two "data are" constructions. The third, "how many copies of the data
are stored", is rephrased rather than substituted -- the subject there is
copies, so Vale's data is/data are rule is a false positive on that sentence.

Verification: Hugo build clean. Rendered HTML confirms the conditionals behave:
OSS shows none of the six Enterprise-only terms and the OSS replication factor
text, Enterprise shows all six and its own; the user entry renders as a single
list, two bullets on OSS and three on Enterprise. Vale reports zero errors.

* docs(v1): reconcile flux-vs-influxql, emptying the v1 shared-content worklist

Closes the last of the 24 pairs in #7620. The manifest pairs list is now empty.

Enterprise wins the page. Beyond formatting it carries a full InfluxQL-to-Flux
parity table that OSS reduced to a heading and the sentence "Flux is working
towards complete parity with InfluxQL." The table is real content, so it moves.

Its links did not survive contact with the current stdlib, though. The table was
built against the pre-0.65 layout, so every schema-function link pointed at
/flux/v0/stdlib/influxdb-v1/, which does not resolve; those functions live in
influxdata/influxdb/v1/. to() and buckets() were under universe/ and are now
under influxdata/influxdb/. OSS's [Flux type conversion
functions](/flux/v0/function-types#type-conversions) is restored over
Enterprise's dead universe/type-conversions/.

Both editions also shipped a histogram example that cannot run. Verified against
1.8.10 and 1.11.8:

  histogram(buckets: [10, 20, ...])
  v1.8   type error: function does not take a parameter "buckets", required
         params (bins)
  v1.11  found unexpected argument buckets (Expected one of `bins`, ...)

and `bins` takes floats, not ints ("expected float but found int"). The example
is now histogram(bins: [10.0, 20.0, ...]). Enterprise's trailing comma inside
the array literal parses fine on both versions and was not the problem.

Also swept the same dead-link class out of four already-shared pages --
/flux/v0/language/types/ and /flux/v0/language/operators/ in fill.md, rate.md,
window-aggregate.md, and query-fields.md now point at /flux/v0/spec/. No
/flux/v0/ link under content/shared/influxdb-v1/ is dead now.

Verification: Hugo build clean, zero unresolved /product/version/ placeholders,
Vale reports zero errors, and a sweep of every /flux/v0/ link across all shared
v1 content resolves.

* chore(ci): repopulate the v1 drift manifest with the pages still duplicated

Emptying the manifest in #7620 was correct for the 24 pairs it tracked, but it
left the ratchet guarding nothing while 30 v1 pages are still duplicated across
OSS and Enterprise -- 3,001 diverging lines.

Those 30 were never manifest-tracked. The manifest was created in the phase C
commit already holding only the 24 deferred pairs, because phase C's 31 pages
migrated in that same commit; the union of every entry the manifest has ever
held is exactly 24. The counts close: 95 overlapping paths = 55 reconciled
(31 + 24) + 30 duplicates + 9 section _index.md pages + 1 Cypress fixture.

#7620 assumed the remainder was pages whose editions genuinely differ, per
docs/adr/0001. That holds for some of them -- hardware_sizing (299),
upgrading (329) -- but not for the ones at the other end:

  guides/downsample_and_retain.md        2 lines of 214
  guides/query_data.md                   2 lines of 99
  query_language/continuous_queries.md   3 lines of 977
  concepts/storage_engine.md             6 lines of 428

Their entire divergence is the configuration-page IA split already solved in
content/shared/influxdb-v1/flux/installation.md: OSS administration/config#
against Enterprise administration/configure/config-data-nodes/#. Fifteen of the
30 diverge by under 40 lines. These are free files that phase C's diff -w test
could not see, not edition-specific content.

__tests__/shortcodes.md is excluded -- it is a Cypress fixture, not content.

The _comment no longer instructs deleting this file when the list empties. That
instruction is what turned an emptied worklist into an argument for removing
drift protection from pages that had never been examined. An empty list now
means the next batch is not enumerated yet.

Verification: node --test .ci/scripts/check-v1-shared-drift.test.js passes 12/12
against the hardened checker, including the union-of-base-and-head case and
"migrated pages are not listed in the manifest".

* docs(agents): extend the style guide to issues and status writing

The Documentation style section covered content pages only, so agents applied
the Google style guide to Markdown under content/ and then wrote issue bodies
and status comments in a different register -- section headings chosen for
effect, findings structured as reveals, counts placed as closing beats rather
than stated inside a sentence.

Two bullets: the style guide governs issues, pull request descriptions, and
status comments as well; and write to inform rather than to impress.

Ran yarn build:agent:instructions and yarn validate:agent-instructions. Neither
of the five generated adapter sets mirrors this section, so they are unchanged.
PLATFORM_REFERENCE.md is regenerated by those commands but its current diff
belongs to concurrent work on data/products.yml and is left uncommitted.

* docs(agents): structure commit bodies like the pull request template

What changed:
The Documentation style bullet in AGENTS.md now names commit messages alongside
issues, pull request descriptions, and status comments. The commit format
constraint points at the body structure. DOCS-CONTRIBUTING.md gains a "Commit
message body" subsection under Commit Guidelines giving the four sections and a
template.

Why:
The style rule added in 25b8bf5 covered issues and status comments but stopped
short of commit messages, so the same register problem it fixes could persist in
git history. The pull request template already asks for What changed, Why,
Impact, and Verification. Using those sections in the commit body means the two
descriptions of a change do not drift apart, and a squashed merge produces a
usable message without rewriting.

Impact:
Contributors and agents writing non-trivial commits. A one-line message is still
correct for a trivial fix. The eight commits already on this branch predate the
rule and do not follow it.

Verification:
yarn build:agent:instructions and yarn validate:agent-instructions both pass.
None of the five generated adapter sets changed, so neither edit lands in a
generated file.

* docs(v1): point identify-version and mcp-server stubs at existing shared content

What changed:
Repoint the four InfluxDB v1 OSS/Enterprise stubs for identify-version and
mcp-server at the shared content that already covers them
(content/shared/identify-version.md, content/shared/influxdb3-admin/
mcp-server-docs-only.md) instead of the empty, unpopulated wrapper files
content/shared/influxdb-v1/{administration/identify-version,tools/mcp-server}.md
created by the shared-content migration. Delete those wrapper files.
Also drop the dead enterprise-v1 identifier from a hide-in list in
identify-version.md; it never matched the show-in/hide-in identifiers
that version actually produces (v1, enterprise_influxdb,
enterprise_influxdb/v1), so it was always a no-op. v1 is already in the
same list and covers both editions.

Why:
Copilot flagged both wrapper files as empty during PR review. All four v1
stubs rendered with no article body. The wrapper files were created but
never populated or wired up; the identify-version and mcp-server content
these pages need already exists as shared content used by other products
(v2, telegraf, flux, kapacitor, chronograf, and others), following the
same source: frontmatter pattern.

Impact:
/influxdb/v1/administration/identify-version/,
/enterprise_influxdb/v1/administration/identify-version/,
/influxdb/v1/tools/mcp-server/, and
/enterprise_influxdb/v1/tools/mcp-server/ now render full content instead
of blank pages.

Verification:
Hugo build clean. Confirmed rendered article body text (not just
frontmatter) on all four pages.

* docs(v1): drop duplicate h1 from udp and graphite guides

What changed:
Remove the leading # The UDP Input / # The Graphite Input headings from
content/shared/influxdb-v1/supported_protocols/{udp,graphite}.md.

Why:
Copilot flagged both as a duplicate h1: article/content.html already
renders an h1 from the page's title frontmatter, so these produced two
h1 elements per page.

Impact:
/influxdb/v1/supported_protocols/udp/, /enterprise_influxdb/v1/
supported_protocols/udp/, and the graphite equivalents now render one h1.

Verification:
Hugo build clean; confirmed single <h1> in rendered output for all four
affected pages.

* fix(products): revert enterprise_influxdb content_path to a string

What changed:
Revert data/products.yml enterprise_influxdb.content_path from a
version-keyed map ({v1: enterprise_influxdb/v1}) back to the plain
string enterprise_influxdb it was before this migration. Regenerate
PLATFORM_REFERENCE.md.

Why:
Copilot flagged that the map shape broke consumers that only handle
string content_path paired with a string label_group.
.github/scripts/workflow-utils.js's getProductLabelMap() requires both
fields to be the same shape (string/string or map/map); enterprise_influxdb
kept a string label_group, so it matched neither branch and silently
dropped out of the product-label map, meaning shared-content PRs stopped
getting labeled product:v1-enterprise. The same map shape also made the
PLATFORM_REFERENCE.md generator omit this product's content path and URL
entirely, visible in this PR's own diff. The string shape was never the
problem: layouts/partials/product/content-path.html already appends the
version to a string content_path when the product declares versions and
the path doesn't already end with it, so enterprise_influxdb resolves to
enterprise_influxdb/v1 at render time without needing the map.

Impact:
getProductLabelMap() maps content/enterprise_influxdb/ to
product:v1-enterprise again. PLATFORM_REFERENCE.md's InfluxDB Enterprise
v1 entry has its Content path and Production docs URL back (matching the
InfluxDB OSS v1 entry format, and the pre-existing telegraf/chronograf/
kapacitor pattern of a bare content_path for single-version products).

Verification:
Hugo build clean. Confirmed /product/version/ placeholder links in shared
v1 content still resolve to /enterprise_influxdb/v1/... on Enterprise
pages. yarn build:agent:instructions regenerated PLATFORM_REFERENCE.md
cleanly.

* test(v1): add Cypress coverage for composite identifiers and shared-content path resolution

What changed:
Add test fixtures and assertions covering three behaviors this PR's
templates introduced but never exercised in Cypress:
- show-in/hide-in matching on the <product>/<version> composite
  identifier, a bare <product> identifier, and a whitespace-padded list
  (content/{influxdb,enterprise_influxdb}/v1/__tests__/shortcodes.md,
  cypress/e2e/content/shortcodes.cy.js)
- article/content.html's /product/version/ placeholder resolution against
  both a map-shaped content_path (InfluxDB OSS v1) and a string-shaped one
  (InfluxDB Enterprise v1), using the existing graphite-to-udp link in
  real shared content (cypress/e2e/content/shortcodes-real-pages.cy.js)

Why:
Copilot flagged that show-in.html, hide-in.html, and
article/content.html changed behavior with no rendering tests: the
existing show-in/hide-in test only exercised the bare version identifier
(core), and there was no test for content_path resolution at all. InfluxDB
v1 OSS and Enterprise are the only two products that share a version
(v1) but need the composite identifier to tell their pages apart, so a
regression here would silently reintroduce cross-edition show-in/hide-in
bugs.

Verification:
node cypress/support/run-e2e-specs.js --spec
"cypress/e2e/content/shortcodes.cy.js,cypress/e2e/content/shortcodes-real-pages.cy.js"
--no-mapping: 179 tests, 167 passing, 12 pending (this.skip() on products
other than v1 OSS/Enterprise), 0 failing.

* fix(ci): close v1 drift-ratchet manifest-edit bypass

What changed:
check-v1-shared-drift.js's main() now unions the manifest's pairs at the
base ref with its pairs at head before measuring divergence, instead of
only ever reading manifest.pairs from the working tree. measure() takes
an explicit pairs list rather than a manifest object.

Why:
Copilot pointed out that removing an entry from the manifest removed it
from both the head and base measurement, since both were derived from
the same (head) manifest.pairs. A PR could edit only one copy of a page
and drop its manifest entry, and the ratchet would simply stop checking
that pair instead of catching the growing divergence. Unioning the two
refs' pair lists closes that: a pair only drops out of comparison once
its files are actually gone from disk (migrated to content/shared/ or
deleted), which is the only case that should exempt it.

Impact:
None on the currently clean manifest (30 pairs, all still two genuine
copies). Prevents a future PR from silently exempting a pair from the
ratchet by editing the manifest.

Verification:
node --test .ci/scripts/check-v1-shared-drift.test.js: 12/12 passing,
including a new test asserting measure() checks whatever pairs it's
given rather than manifest.pairs. node
.ci/scripts/check-v1-shared-drift.js --base HEAD: "No v1 pair diverged
further (30 pairs checked)."

* fix(v1): repair 18 broken heading fragments in shared v1 content

What changed:
Corrects link fragments on four shared v1 pages so they match the anchors Hugo
generates:

- flux-vs-influxql.md: 13 links into query_language/functions used hyphens where
  the headings are InfluxQL function names, so the anchors keep underscores --
  #cumulative-sum against id "cumulative_sum", and 12 more.
- percentile-quantile.md: the method list linked #estimate-tdigest, #exact-mean,
  and #exact-selector against headings estimate_tdigest, exact_mean, and
  exact_selector.
- geo/_index.md and manipulate-timestamps.md: both linked
  #experimental-functions-are-subject-to-change. The heading on
  /flux/v0/stdlib/experimental/ reads "Experimental packages are subject to
  change".

Why:
The link checker on #7663 reported 18 broken fragments out of 10,059 links. All
18 predate this branch and exist in both v1 editions, and the first two groups
exist in the v2 upstream these pages were forked from. They surface now because
the checker only scans files a pull request touches, the same way moving text
into content/shared/ exposes existing Vale errors.

Impact:
Readers following these links reached the top of the target page instead of the
named section.

Verification:
npx hugo --quiet exits 0. Every fragment was checked against the ids in the
rendered HTML for both editions rather than against the Markdown headings: all
three percentile-quantile anchors resolve, all 49 function anchors referenced
from flux-vs-influxql resolve, and the experimental fragment resolves.

* Update AGENTS.md

* Update AGENTS.md
@github-actions github-actions Bot added product:v1-enterprise InfluxDB Enterprise v1 product:v2 InfluxDB v2 (Cloud TSM, OSS) labels Aug 18, 2026
@github-actions github-actions Bot added product:v2-cloud InfluxDB Cloud (TSM) product:v3-distributed InfluxDB 3 Cloud Serverless, Cloud Dedicated, Clustered product:v3-monolith InfluxDB 3 Core and Enterprise (single-node / clusterable) labels Aug 18, 2026
@jstirnaman
jstirnaman merged commit c9caffe into master Aug 18, 2026
25 checks passed
@jstirnaman
jstirnaman deleted the influxdbv1-shared-content branch August 18, 2026 17:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

product:shared Shared content across products product:v1-enterprise InfluxDB Enterprise v1 product:v1 InfluxDB v1 OSS product:v2-cloud InfluxDB Cloud (TSM) product:v2 InfluxDB v2 (Cloud TSM, OSS) product:v3-distributed InfluxDB 3 Cloud Serverless, Cloud Dedicated, Clustered product:v3-monolith InfluxDB 3 Core and Enterprise (single-node / clusterable)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants