Skip to content

PRDCT-572: consolidated dev→help redirect map + conservation checker (re-cut off main) - #1091

Draft
Iamfle4ka wants to merge 11 commits into
mainfrom
PRDCT-572-redirect-map-recut
Draft

Iamfle4ka wants to merge 11 commits into
mainfrom
PRDCT-572-redirect-map-recut

Conversation

@Iamfle4ka

@Iamfle4ka Iamfle4ka commented Aug 19, 2026 •

Copy link
Copy Markdown
Collaborator

Linear: PRDCT-572 · Re-cut off main, replaces #1043 (same content, no dead base).

#1043 was based on PRDCT-560-devdocs-link-cleanup — a branch belonging to a closed PR in the abandoned phase-1/phase-2 stack. It carried 16 superseded commits and a merge-base from 2026-07-08, so it could never have merged anywhere useful. This is the same deliverable re-cut off main, exactly as #1051–#1054 were.

What it adds

The dev-domain retirement contract as a checkable artifact — today that truth is scattered across PLACEMENT-MAP, MIGRATION-REPORTs and batch PRs, and the in-build redirects are meta-refresh pages, not 301 rules.

  • PLACEMENT-MAP.md — 175/175 dev pages mapped
  • _data/redirects/dev-to-help.tsv — generated, never hand-edited
  • scripts/check-redirects.mjs — --gen · --build (conservation gate) · --flippable · --live (cutover day)

Refreshed against a month of main

Variables rows now point at /components/variables/. The map still said Transformations; the owners settled it since (Matyáš 08-04: variables are a base component with no location constraint; Jordan 08-05), and #1051 executes it.

The checker accepted false conservation — fixed. --build counted a row as safe if either the dev path or the final target resolved. For a row that moves, a live dev path can be an unrelated page occupying that URL — which is precisely /cli/* today: kbagent sits there, so three Keboola-as-Code rows were reported "pending" while a reader following them lands on a different tool's docs. Conservation now requires the final target, except for identity redirects. The honest count went 117 → 120.

The finding that needs a call: 59 Keboola-as-Code pages have no home

Added to the map's UNSURE section rather than answered, since placement is not mine to make:

The page already carries TODO(human-review, Jordan) on the KaC deprecation timeline — this is the same decision: port them under /cli/keboola-as-code/, or declare end-of-life and 301 the lot to /cli/?

Expected state of the gate

--build currently fails: 120 of 175 dev URLs resolve nowhere on main, because the four batch PRs (#1051–#1054) are still open and phase-1's redirect pages died with #1027. That failure is the artifact's value — it quantifies the gap. It goes green as the batches land; the 59 CLI rows will not, until the question above is answered.

--flippable reports 29 dev-domain links in content whose target already lives on help — a separate mechanical follow-up, not included here.

🤖 Generated with Claude Code

Update 2026-09-08 — contract complete, cutover runbook included

Update 2026-09-09 — review fixes (0d9e6283)

The independent review of the #1120 wave found three logic gaps here, all fixed:

  • --build only checked that a moved/redirect/alias row's target exists, so a dropped redirect_from on help would still have passed. It now also requires a redirect page at the dev path in dist/ whose meta-refresh points at the contract target — that is what a host-swapped request hits. Against the PRDCT-582: merge the last 8 dev pages into help, keeping what is current and not already there #1120 build: 201/201 honoured.
  • --vercel emitted the 59 off-site CLI rows; wired in, they would have redirected help's own /cli/ pages to the keboola-as-code repository. Excluded; rules carry statusCode: 301 (Vercel's permanent means 308).
  • --flippable ignored alias rows.

Runbook: the CloudFront Function passes /google9cde6c6b9250e5a4.html through so Search Console can keep the dev property verified for the Change of Address, and the bucket stays until that step is done. The eight rows for the last pages now point at their merged homes (/management/jobs/api/, /extend/common-interface/…, /flows/schedule-api/, /overview/).

Re-cut off main: the original branch was stacked on the closed phase-1/phase-2
chain, so it carried 16 superseded commits and a merge-base from 2026-07-08.

Refreshed against main since:
- Variables rows point at /components/variables/ — the section owners settled
  (Matyas 08-04, Jordan 08-05: variables are a base component), executed in #1051.
- The 59 Keboola-as-Code rows are surfaced as an open question rather than left
  asserting a home that exists nowhere: #1027 died and #1015 gave /cli/ to kbagent.
- --build no longer accepts a live dev path as conservation when the row moves;
  an unrelated page can occupy that URL, which is exactly what /cli/* does today.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@linear-code

linear-code Bot commented Aug 19, 2026

Copy link
Copy Markdown

PRDCT-572

@vercel

vercel Bot commented Aug 19, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
connection-docs Ready Ready Preview Sep 14, 2026 2:09pm UTC

Request Review

…t it at /storage/api/

The row said MERGE → /storage/, but #1053 factually landed the dev page's
technical layer (API intro + clients) at /storage/api/ with a clients/ tree.
A /storage/ 301 would strand readers one level short of the content.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Iamfle4ka pushed a commit that referenced this pull request Aug 19, 2026
The dev Storage page's content (API intro + clients) lives on this page now,
but only /integrate/storage/api/ was redirected — the bare URL resolved
nowhere. Found by the redirect contract's conservation check (#1091).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Iamfle4ka Iamfle4ka added the dev-docs-migration developers.keboola.com → help.keboola.com migration label Aug 26, 2026
David's call (2026-09-02): the legacy Keboola-as-Code pages are not ported into
help. The kbagent banner names github.com/keboola/keboola-as-code instead, and
every dev-CLI link in the docs now points there (#1094). #1093 is closed.

The contract has to say so, otherwise it reports 59 URLs as conservation
failures forever. Adds an `external` status: the destination is kept verbatim
rather than forced into a help path, --build stops expecting those URLs in dist
and reports them separately, and --live checks the 301 against the off-site URL
instead of prefixing help's host.

The honest reading of the gate on today's main changes accordingly:

  before   67 resolve nowhere
  after    59 off-site by decision, 8 genuinely unresolved

The remaining 8 are the PRDCT-550 rows — /integrate/ artifacts and jobs,
/automate/ run-job and set-schedule, /overview/ api and encryption.

Note for the retirement (PRDCT-565): these 59 are the one group whose 301 does
not point at help. The edge rules need `developers.keboola.com/cli/**` sent to
the repository — or to /cli/, whose banner routes onward — and that choice is
now visible in the map rather than implied.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…epo root

The 59 CLI rows pointed at github.com/keboola/keboola-as-code — the repository,
not the page. That is fine as a statement of intent and useless as an edge rule:
a reader following developers.keboola.com/cli/commands/sync/pull/ would land on
a monorepo root and have to hunt.

keboola-as-code#2654 lands the pages at a predictable path, so each row now
carries the file it actually became — commands/sync/pull/ →
docs/user-docs/commands/sync/pull.md, and so on for all 59. The same table now
exists three times over and agrees with itself: here, in the redirect stubs of
the developers-docs deletion PR (keboola/developers-docs#417), and in the ported
tree itself.

Written into PLACEMENT-MAP.md rather than only into the TSV: --gen regenerates
the TSV from the map, so a hand-edited TSV would have been silently reverted by
the next person to run it. Verified by regenerating — the destinations survive.

The lossy-parse guard earned its keep here: a first attempt at the map edit ate
a space before the target column, dropped the parse to 116/175 rows, and the
generator refused to write the result instead of shipping a truncated contract.
…y one

Yesterday's commit gave each retired CLI URL the exact file it would become in
keboola-as-code. That PR (keboola-as-code#2654) was closed by the repo owner on
2026-09-03, so docs/user-docs/ will not exist and those 59 destinations would
have been 404s.

All 59 now point at the repository root, which is what stays true: the tool
lives there, its documentation does not.

The map's decision note now says so plainly, including what the choice costs —
end-user installation instructions exist nowhere else, and 21 of the CLI's 68
embedded help texts are empty, so for those commands no prose survives at all.
That is the owner's call to make; the contract's job is to state it rather than
imply a destination that isn't there.
…ses, add the cutover runbook

The contract had eight rows carrying proposed topic targets that never got an
owner call; #1120 lands those pages 1:1 at their dev paths (the /extend/
precedent), so the rows now record identity and `unsure` drops to zero.
Against a main+#1120 build, --build reports 201/201 reachable.

New in the map: the 26 Jekyll redirect_from aliases the dev site still honours
(/extend/docker/**, /extend/custom-science/**, /integrate/push-data/** …).
Help already resolves each through redirect_from on the canonical page; they
are rows now — status `alias` — so cutover day checks them too.

--live judged the first Location header, which assumed a per-path map at the
edge. The edge rule is a host-swap (help + same path; help's own redirect_from
does the second hop), so --live now follows the chain — HTTP redirects and
help's meta-refresh pages — and compares where a browser actually lands.

--vercel prints the vercel.json `redirects` block (148 rules) that would turn
help's second hop into a real 301; printed, not written — wiring it is a
production routing change for its own PR.

PLACEMENT-MAP.md gains the cutover runbook for PRDCT-565: the CloudFront
Function (host-swap with the /cli/* → repository carve-out, since help's
/cli/ is kbagent), preconditions, cutover-day checks, archive steps, Search
Console, rollback.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… homes, not identity

connection-docs#1120 no longer lands the eight pages 1:1; it merges them where the
concept already lives. The rows now say so: /integrate/jobs/, /automate/run-job/ and
/automate/run-orchestration/ → /management/jobs/api/; /overview/encryption/ and the two
artifacts pages → /extend/common-interface/…; /automate/set-schedule/ →
/flows/schedule-api/; /overview/api/ → /overview/ (folded into one subsection). The
/overview/jobs/ alias follows jobs. --build against the #1120 build: 201/201.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…from --vercel, keep the Search Console file

The independent review (2026-09-09) found three logic gaps:
- --build only checked that a moved/redirect/alias row's target exists; a dropped
  redirect_from on help would still pass. It now requires a redirect page at the dev
  path in dist whose meta-refresh points at the contract target, since the edge
  host-swap forwards the dev path verbatim. The unreachable "pending" branch is gone.
- --vercel emitted the 59 off-site CLI rows; wired into vercel.json they would have
  redirected help's own /cli/ (kbagent) pages to the keboola-as-code repository.
  External rows are excluded and rules carry statusCode 301 (Vercel's `permanent`
  means 308). 148 → 97 rules.
- --flippable ignored alias rows when picking a target.

Runbook: the CloudFront Function passes /google9cde6c6b9250e5a4.html through, because
Search Console verifies the dev property by fetching that file with a 200 and the
Change of Address needs both properties verified; the bucket is kept until that step
is done. Preamble no longer says the eight pages land 1:1.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… after #1120 promoted it

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Iamfle4ka pushed a commit that referenced this pull request Sep 14, 2026
… job states, dev project on help

Nikita's decisions on the review's placement findings (2026-09-14):

APIs get their own `## APIs` section on /overview/, ahead of the glossary, instead of
an h3 inside "Other Commonly Used Terms". The home page's "API reference" and the other
24 repointed links now land on a first-class section; the anchor is #apis, followed in
15 places here and in #1094, #1091 and developers-docs#418.

Job states have one canonical home, /management/jobs/api/#job-status, the list checked
against the queue swagger. /management/jobs/ keeps the UI half and drops both its own
three-state list and the claim that a job always waits for infrastructure first — the
API page says platform delays keep a job in `created`, and the two contradicted each
other. /components/running-jobs-in-parallel/ keeps the billing rule and points at the
same anchor.

Two duplicate explanations collapse to a pointer: ai/index.md on apis.json, and
extend/job-queue's API menu, which listed the same Queue API calls the Jobs API page
documents in full.

The dev home's "Development Project" section lands as /extend/development-project/ —
the address #1022 also uses, so that PR drops the file when it rebases. The last three
developers.keboola.com links in help point there now, which leaves only the three that
#1022 owns. Its figures carry a VERIFY(owner): they come from the dev site unchanged.

Verified: build 368 pages, audit-phase2 broken links 0 / missing images 0 / unclosed
fences 0; #apis, #stacks, #job-status and the new page resolve in dist; no
#apis-and-service-endpoints and no dev-home links left in content.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Iamfle4ka pushed a commit that referenced this pull request Sep 14, 2026
…s being republished

Both items from Jordan's review of this PR.

1. `/overview/api/` is the most-linked retired dev URL, and `redirect-from.mjs` derives
its target from the page slug, so a `redirect_from` structurally cannot carry a
fragment: the redirect landed at the top of a 200-line page and the reader had to
scroll past four sections to reach APIs. Jordan's own suggestion, and the better
Diátaxis fit, is a page of its own. `/overview/apis/` now holds the portals table, the
token header, the service-endpoint rule, `apis.json` and the Postman collection; the
redirect lands exactly on it; `/overview/` keeps one sentence under Stacks. 16 links
follow, plus the ones in #1094, #1091 and developers-docs#418.

2. The Development Project page committed to third parties on figures no public source
confirms — 3.5 GB storage, Snowflake backend, 10 users, 3 orchestrations — carried from
the dev site. Jordan would not merge that unverified, and the cost of publishing a wrong
commitment is not the cost of a wrong behaviour note. The page keeps what a developer
actually needs (the conditions, registering in the Developer Portal, the support email
and the template) and no longer states the size. The figures are logged in the PR body
so nothing is lost, and a VERIFY asks the owner to put them back if they still hold.

Verified: build 370 pages, audit-phase2 broken internal links 0, missing images 0,
unclosed fences 0; /overview/api/ redirects to /overview/apis/; no /overview/#apis
references left.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Nikita and others added 2 commits September 14, 2026 16:07
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…t to the overview

#1120 gave the APIs content its own page so the retired dev URL lands on it exactly
rather than at the top of the overview. The contract follows: status moved, target
/overview/apis/.

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

This branch was successfully deployed

1 active deployment
Preview — 3917f3e5 Deployed Sep 14, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dev-docs-migration developers.keboola.com → help.keboola.com migration

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant