Skip to content

PRDCT-582: merge the last 8 dev pages into help, keeping what is current and not already there - #1120

Merged
Iamfle4ka merged 13 commits into
mainfrom
PRDCT-582-identity-landing
Sep 23, 2026
Merged

Iamfle4ka merged 13 commits into
mainfrom
PRDCT-582-identity-landing

Conversation

@Iamfle4ka

@Iamfle4ka Iamfle4ka commented Sep 8, 2026 •

Copy link
Copy Markdown
Collaborator

Linear: PRDCT-582 · closes the tail units PRDCT-665 · PRDCT-666 · PRDCT-667 · settles six of the seven PRDCT-550 calls · unblocks PRDCT-565.

Re-cut 2026-09-22, after #1132

While this PR waited for review, #1132 (approved by Jordan, merged 2026-09-21) ported the same three dev pages verbatim onto other slugs: /extend/encryption/, /extend/jobs/ and /overview/api/ (kept as a page), and repointed 26 links at them. That put two homes on the table for each. The owner call was to keep #1132's slugs and cut this PR down to what main still lacks, plus the reviewed content where it is better.

So this PR now:

  • adds what main does not have: Artifacts (reference + tutorial), /flows/schedule-api/, /extend/development-project/
  • replaces the 497-line verbatim /extend/jobs/ with the 303-line version reviewed here (same slug, every anchor main links still resolves), and gives job states one home at /extend/jobs/#job-status
  • carries onto main's pages two facts and three lines: the OAuth host for US Virginia GCP was the EU Frankfurt one (GET connection.us-east4.gcp.keboola.com/v2/storage says oauth.us-east4.gcp.keboola.com); the scheduler row now links /flows/schedule-api/ instead of the dev domain; one sentence on the services array as the authoritative host list; two cross-links on /extend/encryption/
  • drops its own copies at /overview/apis/ and /extend/common-interface/encryption/; neither was ever published, so no stubs

Commits, in order: efa719f8 merge of main (link conflicts resolved toward main's slugs, this branch's rewrites kept), 206e477a the jobs page swap, 06c70dea the drops and repoints, 1460336f the two facts.

Not carried, by that decision: main's /overview/api/ keeps the API catalogue, the 144-line endpoint table and the Apiary console section that this PR had cut. The table is fixed where it was wrong, not removed. If the cut is still wanted, it is a follow-up on that page.

What

The dev pages with no home on help are merged the way the 2026-07-30 rule asks: the information goes into the page where the concept already lives, links are repointed, the old URL redirects.

dev page verdict where it lives now
/overview/api/ (284 lines) catalogue + endpoint table duplicate the portal and GET /v2/storage main's /overview/api/ from #1132 stays; this PR fixes the US-GCP OAuth host, repoints the scheduler row, adds one sentence
/overview/encryption/ (154) accurate, nothing like it on help main's /extend/encryption/ from #1132 stays; +2 cross-link lines
/integrate/jobs/ (504) the API how-to and state semantics are new; the field dump duplicates swagger /extend/jobs/, content replaced by the reviewed version
/automate/run-job/ (53) duplicate of "Run a job" folded into /extend/jobs/, redirect_from added
/automate/run-orchestration/ (56) false claim about one component for Orchestrator and Flow corrected in /extend/jobs/#run-a-flow, redirect_from added
/automate/set-schedule/ (308) Scheduler API is not on help; four full dumps say the same thing /flows/schedule-api/ (123 lines), new
/integrate/artifacts/ + tutorial (354) unique, code-verified; one wrong config key /extend/common-interface/artifacts/ + /tutorial/, new
dev home, "Development Project" the offer was being republished /extend/development-project/, new

Dropped, and why (conservation log)

Applies to the pages this PR now owns (/extend/jobs/, /flows/schedule-api/, Artifacts). The API-page cuts are listed above as not carried.

  • Job object dump (120 lines), component-list response (35), two job responses (45 each). Trimmed to the fields the calls need; the schema is in the Queue API reference.
  • "The same component is used for both Orchestrator and Flow jobs." False: the job queue defines keboola.orchestrator and keboola.flow separately (audit PRDCT-369, JobFactory.php).
  • Postman deep links on the jobs page. Replaced by the API reference.
  • Three of four Scheduler request/response dumps; scheduler.azure.keboola.com. No swagger server lists that host; the page names the two production hosts the swagger does list.
  • Screenshots: orchestration-parameters, job-row-parameters.

Corrections carried from the audits

  • Artifacts: the shared-artifacts config key is shared, as in job-queue's Artifacts.php, not orchestration (PRDCT-368 A13, its fix PR was never merged).
  • Jobs: five job types, not four; retryContainer listed with a VERIFY(owner) for its description (PRDCT-368 A1). [job types](todo) → a real anchor. Three typos.
  • Scheduler: the master-token requirement is not confirmed by the code (CanModifySchedules), so it is a VERIFY(owner), not a statement.
  • Artifacts "preview feature" note: kept, with a VERIFY(owner) — not checkable from public sources.

Links

Dev-domain links in src/: 52 on main → 47 here. The 11 links this branch had aimed at its own slugs now point at main's. /storage/api/import-export/ keeps /storage/jobs/: that sentence is about a Storage async job, not a Queue job, so the mechanical repoint to /extend/jobs/#job-polling in #1132 was reverted there.

Verification

Full build of the committed tree, 2026-09-22:

Check main this PR
npm run build 367 pages 371 (+4), 272 redirect pages
audit-phase2 broken internal links 0 0
missing images 0 0
anchor checker from #1073 27 (all pre-existing) 27, the same set; none in a file this PR touches; all fixed by #1112
anchors main already links on /extend/jobs/ — run-a-job, job-polling, job-status, job-runtime-configuration, working-with-the-jobs-api: all render
redirect stubs — /automate/set-schedule/, /automate/run-job/, /automate/run-orchestration/, /integrate/jobs/, /overview/jobs/, /integrate/artifacts/ each land on the right page
line endings — no file changes its convention (management/jobs/index.md stays CRLF, 92/92)

Reproduce: git merge-tree --write-tree upstream/main HEAD (clean), npm run build, node scripts/audit-phase2.mjs.

Notes for the reviewer

Independent review, 2026-09-09

Eight reviewers (four fact dimensions against the service swaggers, GET /v2/storage, apis.json and public keboola code; placement on the live preview; two followability walks; one mechanical pass over #1094, #1091 and developers-docs#418) produced 99 findings; eight skeptics confirmed 90 (7 CRITICAL, 24 MAJOR, 59 MINOR) and left 9 unverifiable. Commit fa3ea655 fixes everything factual, mechanical or a followability defect; the rest is listed below for the owner.

All seven CRITICAL findings were in the artifacts pages and were inherited from the dev site: download paths are in/<type>/jobId-%job_id%/ (keboola/artifacts Filesystem.php), only one artifact type is downloaded per job (Artifacts.php download() returns after the first enabled type), tutorial example 3 nested component_id/config_id/branch_id outside filter (job-queue-job-configuration ConfigurationDefinition.php), used the legacy component id and a $CONFIG_ID that single quotes never expanded. A reader following the tutorial as published would have failed at example 3.

Other facts corrected: warning is a final job state (STATUSES_FINISHED); backend.type has xsmall; parallelism is 2–100 and infinity is capped at 100; keboola.flow is Conditional Flows and keboola.orchestrator is Legacy Flows, now linked by product name; the "all phase jobs created at once" behaviour is Legacy-Flow only; the scheduler activation needs the admin or share role (keboola/permission-checker CanModifySchedules.php), so the master-token note is a statement again, not a VERIFY; apis.json covers the services the portal documents, not every service; eight RapiDoc-style portal anchors the Scalar portal never generates became service-level links; the artifacts feature flag is code-confirmed (docker-bundle Runner.php).

Placement verdicts (reviewer judged on the preview): Jobs API, Scheduler API, Encryption and Artifacts fit; the /overview/ subsection is questionable as the landing for 25 repointed links and the home page's "API reference" (it sits inside the glossary). Cross-links the review asked for are added. Two things need the owner: whether the home "API reference" should point at api.keboola.com or the subsection becomes a first-class ## APIs; and that job states now live on three pages, two of which (/management/jobs/ "always waits for infrastructure", /components/running-jobs-in-parallel/) contradict the API page's waiting vs created semantics — pick the canonical one.

Left as VERIFY(owner) on the pages: retryContainer behaviour; how Conditional Flows create phase jobs; whether shared artifacts work inside a Conditional Flow; whether branchId is ignored with configData; the artifacts "preview" status. Screenshots to reshoot: the two encryption UI shots, artifacts tutorial image 1. management/project/tokens (4 links) and transformations/mappings:46 follow in #1094's follow-up because #1094 edits the same lines.

Placement decisions applied, 2026-09-14 (3c141835)

The four questions the review left to the owner are answered:

With #1094, the dev-domain links inside help go from 78 to three, all /integrate/database/, which #1019 rewrites. Merging this branch and #1094 together is conflict-free (git merge-tree, no conflicts).

Also added since the review: a "Before you start" block on the Jobs API page with the token and the Queue host per stack, matching the Scheduler page.

Jordan's review applied, 2026-09-14 (a08b4b09)

1. /overview/api/ now lands exactly. You were right that redirect-from.mjs takes its target from the page slug, so a redirect_from cannot carry a fragment. Took your suggestion: APIs are their own page at /overview/apis/ — portals table, token header, the service-endpoint rule, apis.json, the Postman collection — and the retired dev URL redirects straight onto it. /overview/ keeps one sentence under Stacks. 16 links follow here, 3 in #1094, 1 in developers-docs#418, and the contract row in #1091 is now moved → /overview/apis/.

2. The Development Project offer is no longer republished. Agreed that an outward-facing commitment is not the same as a behaviour note. The page keeps the conditions, the Developer Portal registration path, the support address and the request template; the size is gone until someone can confirm it. Conservation log — what the dev site stated and this page no longer does:

You can apply for a development project with the following features:

  • 3.5 GB storage space
  • Snowflake backend
  • 10 users
  • 3 orchestrations

A VERIFY(owner) on the page asks for those numbers back if they still hold.

3. The Job Queue "encrypt values" bullet is recorded as a correction rather than a deletion, as you suggested: the Queue API has no encrypt endpoint.

Verified after both changes: build 370 pages, audit-phase2 broken internal links 0, missing images 0, unclosed fences 0, /overview/api/ → /overview/apis/ in dist/, and check-redirects.mjs --build from #1091 reads 201/201 against this build.

On retirement: understood, and the sequence in the PR bodies matches yours — #1019 clears the last three content links, and the domain cannot be switched off until #1091 lands the contract. #1022 has been told on its thread to drop its duplicate extend/development-project file when it rebases.

Nikita and others added 2 commits September 8, 2026 14:25
… verbatim

These are the developers.keboola.com pages that still had no home on help:
/overview/api/, /overview/encryption/, /integrate/jobs/, /integrate/artifacts/
(+ tutorial), /automate/run-job/, /run-orchestration/, /set-schedule/. Every
other dev page already resolves here; these eight were the reason 29 internal
links on help point at 404s and the reason the dev domain cannot be retired.

They land 1:1 at their dev paths, the same move Jordan approved for /extend/
in #1046, so no information-architecture call is made here. Their permanent
topic homes stay an owner decision (PRDCT-550); when made, these URLs redirect.

Content and images are byte-identical to the phase-1 conversion
(docs/devdocs-phase1-migration @ f4e5ecd, from devdocs/main @ 429efb38).
The only drift in the dev sources since then is link form and two anchor ids,
handled in the next commit so this one stays a pure move.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…t stubs

House form on the eight landed pages: a description each, one shared
":::note[Moved from developers.keboola.com]" so a reader knows why the page
sits where it does, and a temporary "Developer Reference (moved)" sidebar
group — the same device phase 1 used — that dissolves as owner calls land.

Redirect stubs the contract promised but help never had: /automate/ and
/integrate/orchestrator/ → /flows/, /integrate/ and /overview/repositories/
→ /overview/, /integrate/database/ → /components/extractors/database/. With
these, every non-CLI dev URL resolves on help.

Four corrections proven against the built site, none editorial:
- two kramdown-era anchors the dev sources also fixed since the phase-1 run
  (#creating-component, #preparing-data-folder)
- the encryption page's self-link #regions-and-endpoints named a heading that
  does not exist; the section is "Stacks and Endpoints"
- two links into the retired /orchestrator/ pages carried fragments their
  redirect target lacks; repointed to the sections that hold the concept
  (/flows/flows-legacy/#schedule-and-automate, /flows/#phases-and-tasks)
- the artifacts tutorial captioned "File Storage" but showed the job log
  twice; artifacts-tutorial-3.png is the Storage Files shot and was unused

Verified: build 370 pages (+8), 265 redirect pages (+6); audit-phase2 broken
internal links 29 → 0, missing images 0, unclosed fences 0; every fragment
link inside the eight pages resolves to an id in dist.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@vercel

vercel Bot commented Sep 8, 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 23, 2026 12:57pm UTC

Request Review

@linear-code

linear-code Bot commented Sep 8, 2026 •

Copy link
Copy Markdown

Iamfle4ka pushed a commit that referenced this pull request Sep 8, 2026
…n help

Batch 1 landed the Storage API pages after this branch was cut, so nine
/integrate/storage/** links now have homes: /storage/api/**, with the
#working-with-sliced-files fragment verified against the built id. The dev
home links follow the precedent already on this branch (→ /extend/), the
home-page bullet that advertised developers.keboola.com as a sibling site now
names Extending Keboola, and /extend/docker-runner/processors/ takes its
help alias.

78 → 35 remaining. All 35 are gated: 29 wait for the eight identity-landed
pages (#1120), three SSH-tunnel links are rewritten by #1019, three
#development-project links wait for #1022.

Verified: build 361 pages, audit-phase2 missing images 0, unclosed fences 0,
broken internal links unchanged at the pre-existing 29; every flipped target
exists in dist. Line endings preserved (four of the nine files are CRLF).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Iamfle4ka pushed a commit that referenced this pull request Sep 8, 2026
…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>
…s become 5, in their topic homes

Nikita's call (2026-09-09): no 1:1 landing. Triage each of the eight pages by section
against the June audits (PRDCT-363/368/369), the service swaggers and what help already
says; keep what is useful and new, fold it where the concept already lives, drop the
rest with the evidence recorded here.

Kept, merged, moved:
- /management/jobs/api/ (287 lines) from integrate/jobs + automate/run-job +
  automate/run-orchestration (504 + 53 + 56). Run a job, run a flow, poll, debug, and
  the API-level reference: states, waiting reasons, runId hierarchy via X-KBC-RunId,
  configuration vs configData, modes, runtime settings, the five job types.
- /extend/common-interface/encryption/ (150), content unchanged from overview/encryption.
- /extend/common-interface/artifacts/ + /tutorial/ (132 + 215) from integrate/artifacts.
- /flows/schedule-api/ (105) from automate/set-schedule (308).
- /overview/ gains "APIs and service endpoints": portals per stack, the token header,
  GET /v2/storage as the authoritative service list, the machine-readable apis.json.
  /overview/api/ redirects there.

Dropped, with evidence:
- The API catalogue table and the 144-line service-endpoint table: the portal and the
  Storage index are the source of truth; the table already listed 8 of 23 services, a
  wrong OAuth URL and no Sandboxes (audit PRDCT-363).
- The Apiary console section and its screenshot: the portal is not Apiary any more.
- run-orchestration's claim that one component serves Orchestrator and Flow jobs: the
  job queue defines keboola.orchestrator and keboola.flow separately (audit PRDCT-369).
- Field-by-field job object dump (120 lines), a 35-line component-list response and two
  45-line job responses: replaced by trimmed excerpts plus the swagger link.
- Eleven Postman deep links and one dead apiary.io link.
- Three of four full Scheduler request/response dumps; the scheduler.azure URL that no
  swagger server lists; the master-token claim the code does not confirm (VERIFY).
- Four screenshots: apiary-console, postman-import, orchestration-parameters,
  job-row-parameters.

Corrections applied from the audits: artifacts config key `orchestration` → `shared`
(job-queue Artifacts.php); job types are five, retryContainer added with a VERIFY for
its description; `[job types](todo)` link; three typos.

52 help links repointed to the new homes in 34 files; management/project/tokens and
transformations/python-plain are left to a follow-up because #1094 edits the same
lines. Nav: the temporary group is gone; the pages sit under Management › Jobs,
Flows and Common Interface.

Verified: build 367 pages, 273 redirect pages; audit-phase2 broken internal links 0,
missing images 0, unclosed fences 0; every inbound fragment (#run-a-job,
#job-runtime-configuration, #job-polling, #job-id, #working-with-the-jobs-api,
#encrypting-data-with-api, #apis-and-service-endpoints) resolves to an id in dist; all
nine old paths redirect to the new pages.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@Iamfle4ka Iamfle4ka changed the title PRDCT-582: land the last 8 dev pages on help at their original paths PRDCT-582: merge the last 8 dev pages into help, keeping what is current and not already there Sep 9, 2026
Iamfle4ka pushed a commit that referenced this pull request Sep 9, 2026
… 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>
…gs verified against code and specs

An 8-reviewer, 8-skeptic pass (facts vs swagger and public keboola code, placement on
the preview, followability, mechanics) confirmed 90 findings. Everything factual or
mechanical is fixed here; placement and judgement calls go to the owner.

Artifacts (all seven CRITICAL findings, inherited from the dev site):
- download paths are /data/artifacts/in/<type>/jobId-%job_id%/, not in/<type>/jobs/job-…
  (keboola/artifacts Filesystem.php getDownload*JobDir + StorageFileHelper::getJobIdFromFileTag)
- only one artifact type is downloaded per job, in the order runs → custom → shared
  (Artifacts.php download() returns after the first enabled type); the "all types
  simultaneously" claim is gone and the full example enables one type
- tutorial example 3: component_id/config_id/branch_id belong inside `filter`
  (job-queue-job-configuration ConfigurationDefinition.php); the producer is
  keboola.python-transformation-v2, not the legacy id; $CONFIG_ID was inside single
  quotes and never expanded
- example 4's Python snippet was JSON-escaped and named a different file than its payload
- life-cycle bullets now name the real folders and tags (Tags.php toUploadArray)
- the feature flag is code-confirmed (docker-bundle Runner.php checks the `artifacts`
  project feature); the note says so and points at support
- run steps and expected job-log output added to examples 2–4; shared artifacts scoped
  to Legacy Flows with a VERIFY for Conditional Flows

Jobs API:
- `warning` is a final state (job-queue-internal-api-php-client STATUSES_FINISHED)
- backend.type has `xsmall` (queue swagger enum)
- parallelism is 2–100; `infinity` is accepted but capped at 100 (PARALLELISM_MAX)
- keboola.flow is Conditional Flows, keboola.orchestrator is Legacy Flows — named and
  linked by the product names, with the job-detail hint on how to tell
- the "all phase jobs created at once" bullet is scoped to Legacy Flows (job queue
  assigns phaseContainer only to keboola.orchestrator); VERIFY for Conditional Flows
- debug-job lede no longer implies the component is skipped; warning added under the
  state diagram; eight RapiDoc-style portal anchors that the Scalar portal never
  generates replaced by service-level links (one more on the encryption page)

Scheduler API:
- the master-token claim is settled by code, not dropped: keboola/permission-checker
  CanModifySchedules allows the admin or share role (production manager on protected
  default branches) — stated in a Before-you-start section with the stack hosts
- step 2 uses the branch endpoint the Storage spec asks for and shows the response;
  step 3 states the success and error shapes; timezone accepts names or offsets
- the job-detail screenshot showed a colleague's name and project — removed
- title shortened so the sidebar label matches its neighbours

Overview subsection: apis.json covers the services the portal documents, not every
service; the apiUrl-over-servers advice from the dev page is back; the invalid-token
sentence is scoped to token-authenticated calls; the page gains its description.

Encryption: back-link to the configuration file page, "components" link points at
components, one trailing comma, sentence-case headings (ids unchanged).

Cross-links the placement review asked for: flows → schedule-api, common-interface
landing lists artifacts and stops attributing encryption to Job Queue, management/jobs
link text says Jobs API. Seven "stack/region" links repointed to /overview/#stacks,
Storage API link to /storage/api/configurations/, storage-job polling to /storage/jobs/.

Verified: build 367 pages, audit-phase2 broken links 0 / missing images 0 / unclosed
fences 0; every inbound fragment and the new #run-a-flow, #job-status resolve in dist.

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

Four on the API tokens page (three to the APIs subsection on /overview/, the
"region" one to /overview/#stacks) and the encryption link on the Python
transformations page. Their targets exist only once #1120 is on main, so this PR
merges after #1120 — the order the PR bodies already state.

After both land, the only dev-domain links left in help are the three to the dev
home's #development-project section, which wait for #1022.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…uler page

Token and stack host stated before the first curl, as the followability review asked;
the EU queue host is the one the EU stack's service index returns.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Iamfle4ka pushed a commit that referenced this pull request Sep 14, 2026
#1120 promotes the APIs subsection out of the /overview/ glossary into a first-class
section with id #apis; the three tokens-page links follow.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Iamfle4ka pushed a commit that referenced this pull request Sep 14, 2026
… after #1120 promoted it

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… 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>
…anding

# Conflicts:
#	src/content/docs/ai/index.md

@jordanrburger jordanrburger 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.

Review

Good work. I merged this together with #1094 locally and verified the claims rather than reading them, since the accuracy corrections are the load-bearing part of this PR.

Verified independently

Merged onto main (clean, and clean against #1094), built, and ran the audit:

Check Result
npm run build 369 pages, 273 redirects, 0 skipped
audit-phase2 broken internal links 0
Missing images / unclosed fences / malformed tables 0 / 0 / 0
src/sidebar.mjs vs navigation.yml in sync
The 9 retired dev URLs all redirect
Live developers.keboola.com links in help 78 → 3, all /integrate/database/ (owned by #1019)

The 78 → 3 claim checks out exactly: the only remaining live dev links in dist/ are the three SSH-tunnel ones. The other six matches in source are inside provenance HTML comments, not links.

Fact spot-checks against the live specs all held:

  • Job status — queue.keboola.com/docs/swagger.yaml JobStatus enum is exactly the nine documented values including warning
  • Job types — the five-value enum (standard, container, phaseContainer, orchestrationContainer, retryContainer) confirmed in three places
  • Modes — run, forceRun, debug confirmed
  • backend.type — ['xsmall', 'small', 'medium', 'large'], so the xsmall correction is right
  • Scheduler hosts — the swagger lists exactly scheduler.keboola.com and scheduler.eu-central-1.keboola.com as production, and no scheduler.azure.keboola.com. Dropping it was correct.
  • Job Queue "encrypt values" — the Queue API has no encrypt endpoint, so removing that bullet from /extend/job-queue/ is a correction, not a loss. Worth adding to the conservation log as such.

The artifacts tutorial example 3 fix is real and material: component_id/config_id/branch_id are now nested inside filter, and '"$CONFIG_ID"' actually expands inside the single-quoted --data-urlencode. A reader following the published version would genuinely have failed there.

1. /overview/api/ redirects to the page top, not to #apis

src/integrations/redirect-from.mjs derives its target from the page's slug, so redirect_from structurally cannot carry an anchor. The built redirect is:

/overview/api/  ->  /overview/

So the most-linked retired dev page drops readers at the top of a 200-line glossary page, and they have to scroll past Deployment Options, Architecture, Governance and Extending to reach APIs. 19 in-repo links now point at /overview/#apis and those are fine — it's only the redirect that can't reach the anchor.

The section itself is well written and correctly promoted above "Other Commonly Used Terms", so this isn't a placement complaint. But given the volume of inbound traffic on that URL, consider making APIs its own page (/overview/apis/) so the redirect lands exactly — which is also a better Diátaxis fit than a dense reference table living inside a glossary page. The alternative is extending redirect-from to accept an explicit target with a fragment.

2. /extend/development-project/ publishes a stale offer

This is the one item I would not merge unverified. The page commits to third-party developers:

  • 3.5 GB storage space
  • Snowflake backend
  • 10 users
  • 3 orchestrations

plus an application process — all carried from the dev site and flagged VERIFY(owner) as possibly out of date. Everything else marked VERIFY describes behaviour; this one is an outward-facing commitment, so publishing it wrong has a different cost. Please confirm the current offer before this lands.

Other VERIFY(owner) markers — none blocking

Six more, all invisible HTML comments and correctly used per the revamp rules: artifacts "preview" status, shared artifacts in Conditional Flows (×2), how Conditional Flows create phase jobs, whether branchId is ignored with configData, and retryContainer behaviour.

Retiring dev docs

On the Slack question of whether this plus #1094 lets us switch the domain off — not quite. These two do the hard part (78 → 3 live links), but full retirement still needs:

  • #1019 — owns the last three links; ready, not draft. This is the last content blocker.
  • #1091 — the consolidated redirect map and conservation checker; still draft.
  • #1022 — the dev home and overview; still draft, and it also creates /extend/development-project/, so one of the two resolves that file.

So: #1019 clears the content, but the domain can't be switched off until #1091 lands the redirect contract.

Summary

Mergeable once the development-project offer is confirmed. The /overview/api/ anchor is worth a decision but needn't block.

Iamfle4ka pushed a commit that referenced this pull request Sep 14, 2026
His review is right that the support status of a shipped tool is a product fact, not an
edit-time decision, and this branch had removed both the "still supported for now"
sentence and the TODO marker that held the question open.

The banner keeps what David Esner asked for in Slack on 2026-09-03 — name the tool, say
it shares nothing with kbagent, link the repository — and now asserts no support status
in either direction. The TODO records both inputs so Jordan can settle the deprecation
position in one edit.

Broken internal links on this branch go 29 → 30: the extra one is the encryption link
flipped on transformations/python-plain, whose target lands in #1120. Merge order is
unchanged: #1120, then this.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…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>
Iamfle4ka pushed a commit that referenced this pull request Sep 14, 2026
#1120 splits it out as /overview/apis/ so the /overview/api/ redirect can land exactly.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Iamfle4ka pushed a commit that referenced this pull request Sep 14, 2026
…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>
Iamfle4ka pushed a commit that referenced this pull request Sep 15, 2026
Four links still pointed at ids that no page renders, all of them missed by
the first pass because they are same-page fragments:

* storage/api/configurations (3x) linked #modifying-a-configuration, while
  the page renders id="modifying-configuration"
* generic-extractor/functions linked #api-default-parameter, while the page
  renders id="api-default-parameters"

Verified against built dist/ ids rather than markdown, since the ported pages
carry kramdown-era anchors. With this commit the anchor checker from #1073
reports BROKEN LINK ANCHORS: 0 on a full build, down from 27 before #1112.

The 29 remaining broken internal links on this branch are the /overview/api/,
/overview/encryption/ and /integrate/jobs/ targets that #1120 supplies, and
are untouched here.

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

Copy link
Copy Markdown
Collaborator Author

Verification against current main (23b1a11d)

Rebuilt this branch at a08b4b09 and re-ran the audit today. Reproduction:

git merge-tree --write-tree --name-only upstream/main HEAD   # exit 0, merges clean
npm run build
node scripts/audit-phase2.mjs

Build is clean: 370 pages, 273 redirect stubs, 644 HTML files.

BROKEN INTERNAL LINKS: 0
MISSING IMAGES:        0

TOTAL ISSUES: 74 is 71 old-docs link smells plus 3 pre-existing multiple-<h1> pages
(/management/notifications/, /storage/byobq/, /workspace/snowflake-workspaces-access-changes/).
None is introduced here, and the smells are the dev-domain links that #1094 flips.

The measurable effect

Built the same checker against a branch that has #1112 but not this PR, for comparison:

Branch Broken internal links
main + #1112 29
this PR 0

All 29 are /overview/encryption/, /integrate/jobs/ and /overview/api/, which are
exactly the targets this PR supplies. It fixes them two ways: the new pages carry
redirect_from for the old paths, and the inbound links are repointed in the same diff.

Spot-checked in dist/:

URL Result
/overview/api/ stub to /overview/apis/
/overview/encryption/ stub to /extend/common-interface/encryption/
/integrate/jobs/ stub to /management/jobs/api/
/overview/apis/, /management/jobs/api/, /extend/development-project/ real pages
/extend/common-interface/encryption/, /extend/common-interface/artifacts/ real pages

What this PR does not fix

Two root-relative targets stay 404 after it, both out of scope here and both tracked:

  • /storage/api/clients/, a folder with four children and no index page. Falls to the Storage API rework.
  • /components/extractors/generic-extractor/user-functions/. Falls to the Generic Extractor rework.

Anchors, measured separately

audit-phase2.mjs on main strips #fragments before testing, so no anchor on the site is
currently verified by anything running in CI. Running the checker from #1073 against this build:

State Broken anchors
this branch alone 27
plus #1112 as it stood 4
plus #1112 at 87ab5b29 0

That is independent of this PR, but it means #1120 and #1112 together leave the tree with
zero broken internal links and zero broken anchors.

Iamfle4ka pushed a commit that referenced this pull request Sep 16, 2026
Both resolve today, through redirect stubs this branch creates when it retires
the /tutorial/ slugs, so this is a hop removed rather than a break fixed. The
multi-project page reaches the architecture guide at its real home under
overview/onboarding, and the generic extractor's SSH proxy page reaches the IP
ranges at components/ip-addresses.

The third link of the same kind, in storage/api/tde-exporter, is deliberately
untouched: PR #1120 edits that file, and two branches rewriting one line is a
merge conflict for nothing.

That #1120 is also why there is no separate broken-link PR. The blocker the
link check has been reporting since this branch started is one of 29 broken
internal links across the site, all landing on three dev-docs paths that were
never migrated. #1120 creates all three target pages and repoints the links; it
touches every page that carries one. DECISIONS.md records the mapping and where
it comes from.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Iamfle4ka pushed a commit that referenced this pull request Sep 21, 2026
Merging this branch produced two `description` keys in one file, which is
invalid YAML and fails the build. Found by dry-running the whole open-PR
queue in merge order, not by CI: each PR is green on its own, and git
merges the two keys without a conflict because they sit on different
lines of the frontmatter.

- management/project/limits: main already carries a description, so the
  backfilled one is dropped. This broke the build on its own, against
  today's main.
- overview: #1120 rewrites the page and supplies a reviewed description,
  and it lands ahead of this branch, so the backfilled one is dropped
  too. If #1120 is ever abandoned, this page needs one again.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Nikita and others added 4 commits September 22, 2026 12:21
Main now carries #1132, which ported Encryption, Component Jobs and Our APIs
to /extend/encryption/, /extend/jobs/ and /overview/api/ and repointed 26
links at them. This branch had homed the same content at
/extend/common-interface/encryption/, /management/jobs/api/ and
/overview/apis/.

Resolution policy: wherever both sides only changed a link target, main's
slug wins (27 files). Where this branch had rewritten the surrounding text,
the rewrite stays and only the slug follows main: the Common Interface lede,
the Job Queue API paragraph, the two sentences in management/jobs (including
the removal of the "a job always waits for infrastructure" claim), and the
Code Patterns tutorial's link to the Configurations API rather than the API
index. storage/api/import-export keeps /storage/jobs/, because that sentence
is about a Storage async job, not a Queue job. src/sidebar.mjs is
regenerated from the merged navigation.yml.

The three pages this branch duplicates against main still exist after this
commit; the next commit removes them.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… one

main carries #1132's /extend/jobs/, a 497-line verbatim copy of the dev page
/integrate/jobs/. This branch had the same content curated to 303 lines at
/management/jobs/api/, reviewed against the Queue API spec and code in
fa3ea65, which changed 60 lines of this page. Under the placement decision of
2026-09-22 the slug stays /extend/jobs/ and the content comes from here.

What changes on the page: the swagger field dump goes, since the spec is the
source of truth; the how-to for running, polling and debugging jobs and the
state semantics stay; the run-a-flow section keeps the correction this branch
made to the dev page's Orchestrator/Flow claim; and job states get one home at
#job-status, with management/jobs and running-jobs-in-parallel pointing there
instead of carrying their own lists.

Every anchor main already links on this page still resolves: run-a-job,
job-polling, job-status, job-runtime-configuration, working-with-the-jobs-api.
redirect_from gains /automate/run-job/ and /automate/run-orchestration/, whose
content is folded in here. Title and nav label stay "Component Jobs" as
approved in #1132; the description is the more specific one.

states.png was already on main from #1132, byte-identical to this branch's
copy, so the duplicate under public/management/jobs/api/ is removed and
token-settings.png moves next to it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
/overview/apis/ and /extend/common-interface/encryption/ are removed together
with their two images; main has /overview/api/ and /extend/encryption/ from
#1132, approved 2026-09-21. Neither removed slug was ever published, so no
redirect stubs are needed.

The 11 links this branch still pointed at the old slugs are repointed
(storage/api/index, management/jobs, flows/schedule-api, artifacts/tutorial,
variables/api/tutorial, running-jobs-in-parallel, ai/index). Navigation loses
the "Jobs API" child under Management > Jobs and the "Encryption" entry under
Common Interface; sidebar.mjs is regenerated.

What this branch still adds that main does not have: Artifacts (reference and
tutorial, the pages that carried all seven CRITICAL review findings),
/flows/schedule-api/ from the dev page /automate/set-schedule/, and
/extend/development-project/.

Verified on a full build: broken internal links 0, missing images 0. The
anchor checker from #1073 reports the same 27 findings as main, none in a
file this branch touches; all 27 are covered by #1112.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
/overview/api/: the OAuth row for US Virginia GCP pointed at
oauth.europe-west3.gcp.keboola.com, which is the EU Frankfurt host.
GET https://connection.us-east4.gcp.keboola.com/v2/storage lists
oauth.us-east4.gcp.keboola.com, so the row now says that. The scheduler row
linked developers.keboola.com/automate/set-schedule/; it now links
/flows/schedule-api/, which this branch adds. One sentence points readers at
the services array of the Storage index call as the authoritative host list
for their own stack.

/extend/encryption/: two lines from this branch's version of the page, linking
the configuration file and the Image/Stack Parameters encryption rules. The
page is otherwise #1132's.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

@keboola-pr-reviewer-bot keboola-pr-reviewer-bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Verdict: needs_human (risk 3/5) · profile connection-docs

Needs human: this large docs merge leaves unresolved VERIFY(owner) markers in added lines and ships new security-posture encryption prose, both escalation triggers.

Impact flags: possible rollback re-introduction — see Check Run summary.

Concerns:

  • src/content/docs/management/jobs/api/index.md: Unresolved VERIFY(owner) markers in added lines (also artifacts, development-project); gate 3 fails.
  • src/content/docs/extend/common-interface/encryption/index.md: New page ships security-posture claims (no decryption API, in-component-only access) needing human sign-off.
  • src/content/docs/extend/common-interface/artifacts/index.md: Marked 'preview feature' with status left as unconfirmed VERIFY(owner).

Suggested reviewers: @keboola/docs

@Iamfle4ka
Iamfle4ka merged commit 45f235c into main Sep 23, 2026
3 checks passed
@Iamfle4ka
Iamfle4ka deleted the PRDCT-582-identity-landing branch September 23, 2026 12:59
Iamfle4ka pushed a commit that referenced this pull request Sep 23, 2026
… collisions

#1120 landed the dev-docs retirement while this branch was in review, and it
touched two files this branch also owns.

tutorial/index.md: main repointed one developer link inside the page; this
branch deletes the page, because the section it holds now lives at
/getting-started/. The deletion stands. The link target #1120 introduced,
/extend/development-project/, is reached from main's own pages, so nothing is
stranded by dropping this one instance. Its ancient `redirect_from:
/getting-started/` goes with it, which is what frees the slug this branch needs.

management/jobs/index.md: both sides edited the same line. Main's side is the
reviewed fix, dropping a three-state list that contradicted the Jobs API page
and pointing at the canonical /extend/jobs/#job-status. Main's text wins; this
branch's change was only /tutorial/ -> /getting-started/, so that repoint is
re-applied on top.

One more repoint the move had left behind: storage/api/tde-exporter linked to
/tutorial/write/, the last inbound link to a retired slug. It points at
/getting-started/write/ now, which takes the link check to zero warnings.

Verified: build 376 pages; audit 55 issues (down from 59 on main's fixes), 0
broken internal links, 0 missing images; CLI gate 0 findings; link & redirect
check 0 blockers, 0 warnings. CRLF preserved in jobs/index.md.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Iamfle4ka pushed a commit that referenced this pull request Oct 8, 2026
- extend/development-project: took main's page (PRDCT-582, #1120). It
  replaces this PR's copy on purpose: the storage/users/orchestrations
  figures are no longer republished (Jordan's review, 2026-09-14).
- overview: kept main's description and both redirect_from entries
  (/integrate/, /overview/repositories/).
- overview, "Working with Keboola Programmatically": the API reference and
  synchronous actions links now point at their help pages, which main
  ported since this branch was cut.

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

This branch was successfully deployed

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

Labels

agent-needs-human agent-profile:connection-docs dev-docs-migration developers.keboola.com → help.keboola.com migration

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants