Repository navigation
PRDCT-582: merge the last 8 dev pages into help, keeping what is current and not already there - #1120
Conversation
… 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>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…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>
…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>
… 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>
… 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>
#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>
… 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
left a comment
There was a problem hiding this comment.
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.yamlJobStatusenum is exactly the nine documented values includingwarning - Job types — the five-value enum (
standard,container,phaseContainer,orchestrationContainer,retryContainer) confirmed in three places - Modes —
run,forceRun,debugconfirmed backend.type—['xsmall', 'small', 'medium', 'large'], so thexsmallcorrection is right- Scheduler hosts — the swagger lists exactly
scheduler.keboola.comandscheduler.eu-central-1.keboola.comas production, and noscheduler.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.
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>
#1120 splits it out as /overview/apis/ so the /overview/api/ redirect can land exactly. 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>
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>
Verification against current main (
|
| 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.
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>
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>
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
left a comment
There was a problem hiding this comment.
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
… 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>
- 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>
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:
/flows/schedule-api/,/extend/development-project//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-statusGET connection.us-east4.gcp.keboola.com/v2/storagesaysoauth.us-east4.gcp.keboola.com); theschedulerrow now links/flows/schedule-api/instead of the dev domain; one sentence on theservicesarray as the authoritative host list; two cross-links on/extend/encryption//overview/apis/and/extend/common-interface/encryption/; neither was ever published, so no stubsCommits, in order:
efa719f8merge of main (link conflicts resolved toward main's slugs, this branch's rewrites kept),206e477athe jobs page swap,06c70deathe drops and repoints,1460336fthe 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.
/overview/api/(284 lines)GET /v2/storage/overview/api/from #1132 stays; this PR fixes the US-GCP OAuth host, repoints theschedulerrow, adds one sentence/overview/encryption/(154)/extend/encryption/from #1132 stays; +2 cross-link lines/integrate/jobs/(504)/extend/jobs/, content replaced by the reviewed version/automate/run-job/(53)/extend/jobs/,redirect_fromadded/automate/run-orchestration/(56)/extend/jobs/#run-a-flow,redirect_fromadded/automate/set-schedule/(308)/flows/schedule-api/(123 lines), new/integrate/artifacts/+ tutorial (354)/extend/common-interface/artifacts/+/tutorial/, new/extend/development-project/, newDropped, 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.keboola.orchestratorandkeboola.flowseparately (audit PRDCT-369,JobFactory.php).scheduler.azure.keboola.com. No swagger server lists that host; the page names the two production hosts the swagger does list.orchestration-parameters,job-row-parameters.Corrections carried from the audits
shared, as in job-queue'sArtifacts.php, notorchestration(PRDCT-368 A13, its fix PR was never merged).retryContainerlisted with aVERIFY(owner)for its description (PRDCT-368 A1).[job types](todo)→ a real anchor. Three typos.CanModifySchedules), so it is aVERIFY(owner), not a statement.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-pollingin #1132 was reverted there.Verification
Full build of the committed tree, 2026-09-22:
npm run buildaudit-phase2broken internal links/extend/jobs/run-a-job,job-polling,job-status,job-runtime-configuration,working-with-the-jobs-api: all render/automate/set-schedule/,/automate/run-job/,/automate/run-orchestration/,/integrate/jobs/,/overview/jobs/,/integrate/artifacts/each land on the right pagemanagement/jobs/index.mdstays 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
/overview/apis/. developers-docs#418 likewise.redirect_from: /integrate/database/line to the database page; either merges first, the second resolves one line.developers.keboola.com/#development-projectstay until PRDCT-540: combine dev+help home and overview (top-down pilot) #1022 lands the dev home's "Development Project" section./extend/jobs/stay "Component Jobs" as approved in Fix the Starlight overrides that match nothing, port three dev-docs pages, add robots/llms #1132; only the content and the description change. Renaming it "Jobs API" would match how every link text refers to it — reviewer's call.Independent review, 2026-09-09
Eight reviewers (four fact dimensions against the service swaggers,
GET /v2/storage,apis.jsonand 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. Commitfa3ea655fixes 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/artifactsFilesystem.php), only one artifact type is downloaded per job (Artifacts.phpdownload()returns after the first enabled type), tutorial example 3 nestedcomponent_id/config_id/branch_idoutsidefilter(job-queue-job-configurationConfigurationDefinition.php), used the legacy component id and a$CONFIG_IDthat single quotes never expanded. A reader following the tutorial as published would have failed at example 3.Other facts corrected:
warningis a final job state (STATUSES_FINISHED);backend.typehasxsmall;parallelismis 2–100 andinfinityis capped at 100;keboola.flowis Conditional Flows andkeboola.orchestratoris 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-checkerCanModifySchedules.php), so the master-token note is a statement again, not a VERIFY;apis.jsoncovers 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-bundleRunner.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'swaitingvscreatedsemantics — pick the canonical one.Left as VERIFY(owner) on the pages:
retryContainerbehaviour; how Conditional Flows create phase jobs; whether shared artifacts work inside a Conditional Flow; whetherbranchIdis ignored withconfigData; the artifacts "preview" status. Screenshots to reshoot: the two encryption UI shots, artifacts tutorial image 1.management/project/tokens(4 links) andtransformations/mappings:46follow 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:
## APIson/overview/sits ahead of "Other Commonly Used Terms", so the home page's "API reference" and the other 24 repointed links land on a first-class section. The anchor is#apis; followed here and in PRDCT-658: flip dev-domain links whose targets already live on help #1094, PRDCT-572: consolidated dev→help redirect map + conservation checker (re-cut off main) #1091 and developers-docs#418./management/jobs/api/#job-status, the swagger-checked list./management/jobs/keeps the UI half and loses both its own three-state list and the "a job always waits for infrastructure first" claim that contradicted it;/components/running-jobs-in-parallel/keeps the billing rule and points at the same anchor.ai/index.mdonapis.json, andextend/job-queue's API menu./extend/development-project/, the address PRDCT-540: combine dev+help home and overview (top-down pilot) #1022 also uses. The last threedevelopers.keboola.comlinks in help point there now.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 thatredirect-from.mjstakes its target from the page slug, so aredirect_fromcannot 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 nowmoved → /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:
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-phase2broken internal links 0, missing images 0, unclosed fences 0,/overview/api/→/overview/apis/indist/, andcheck-redirects.mjs --buildfrom #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-projectfile when it rebases.