PRDCT-353: fix the applications audit's live code-accuracy findings (Generative AI + trigger apps) - #1081
Merged
Merged
Conversation
…name The June audit flagged the swapped authentication as a blocker; it has been live since. Fixing it exposed a worse defect on the same page, so this covers both. Swapped key sources (the audit's finding): - "OpenAI Service Authentication" told the reader to get their key from the Azure Portal; "Azure OpenAI Service Authentication" sent them to OpenAI platform settings. Each section now names its own provider. - Note this is NOT the whole-section swap the audit described: Azure steps 3-5 (API Base, Deployment ID, API Version) are genuinely Azure-only -- each has options.dependencies.service = "azure_openai" in the live schema -- so they stay put. Swapping the sections wholesale would have broken the half that was already right. - Confirmed against the vendor's own component_config/configuration_description.md in keboola/component-generative-ai and against src/client/openai_client.py, where AzureOpenAIClient takes azure_endpoint/azure_deployment/api_version and the plain OpenAIClient takes only api_key. - The crossing entered in 0ff8c2a ("replace OpenAI app docs with Generative AI app docs"); the page it replaced was correct. This restores that fact. Stale component name -- a reader failed at step one: - The page said "set up a new configuration for the OpenAI application", but kds-team.app-open-ai is flagged `deprecated` + `excludeFromNewList`, so it cannot be picked from the new-component list at all. The component this page documents is kds-team.app-generative-ai, named "Generative AI", and its documentationUrl points here. Verified against the public Storage component index, and a note now tells existing OpenAI users their configs keep working. - That component carries `appInfo.beta`, which the page never mentioned -- added. Two providers documented, five shipped: - authentication.service enum is openai, azure_openai, google, huggingface, anthropic. The lede now lists all five, including that Google is US-stack only and Hugging Face needs a per-row Endpoint URL. UI labels corrected against the live configurationSchema: - "API Base URL" -> API Base; "List Models" -> List models; the nonexistent "Prompt Template Sync Action" -> the real Prompt Templates section and its Prompt Template select. Added Maximum token spend (Optional). Links: - The Azure quickstart now 301s to "Use the Responses API", which no longer has a key-retrieval section -- so step 1 pointed at guidance that had vanished. Repointed to the Azure create-resource doc, which does cover key and endpoint. - Every external link on the page verified live. Left for an owner rather than guessed: - VERIFY(owner) on the Deployment ID click-path: Microsoft now routes deployments through the Foundry portal, not "Azure Portal -> Azure OpenAI -> Model Deployments". Not restated here without confirmation. - platform.openai.com/account/api-keys returns 403 to non-browser clients, so its liveness is unverifiable; the page and the component config use the same URL. Verified: build clean (306 pages); audit-phase2 reports 45 broken links / 0 missing images, and zero findings of any kind on this page. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…hemas
Closes the two remaining code-accuracy findings from the June applications
audit. Both verified field-by-field against each component's live
configurationSchema in the public Storage component index.
Power BI Refresh (kds-team.app-powerbi-refresh) -- the sample config could not
have worked:
- The datasets parameter is `dataset_list`, not `datasets`, and its items are
plain UUID strings, not objects with a `dataset_input` key. Anyone copying the
documented JSON got a configuration the component does not read.
- `wait` and `alldatasets` are string enums "Yes"/"No" (both default "No"), not
booleans. The sample passed `true` / `false`.
- `alldatasets` was documented as "Fail if any dataset fails". Its real label is
"Wait for all datasets to finish". The page's *meaning* was right -- that is
what the schema's description says -- but no such field name exists in the UI.
- Button labels: "Load workspaces" and "Reload dataset names" (not title-cased).
- `interval` / `timeout` are labelled "Refresh job status polling interval(s)"
and "Refresh job status polling timeout"; added their defaults (30 / 3600) and
the project-level maximum the schema mentions.
- Corrected the workspace hint to the schema's own wording: leave blank or set
"Default Workspace" for a dataset not assigned to a workspace.
dbt Cloud Job Trigger (kds-team.app-dbt-cloud-job-trigger) -- two parameters were
missing entirely, and one of them made an existing sentence wrong:
- `ignore_artifacts` ("Don't store artifacts", default false) was undocumented
while the page stated unconditionally that the component "will also store all
available artifacts". Now documented, and that sentence is qualified.
- `dbt_cloud_url` ("DBT Cloud URL", default https://cloud.getdbt.com) was
undocumented -- it is what a non-default region or single-tenant instance needs.
- Field label is "API Key"; referred to the "Max wait time" field rather than the
raw `max_wait_time` parameter name, and added its default (60s) and the
Cause default ("Triggered from Keboola").
Left alone deliberately: the developers.keboola.com artifacts link stays until
that section migrates into help, per the link rule.
Verified: build clean (306 pages); audit-phase2 at 45 broken links / 0 missing
images, unchanged; the only finding on either page is that intentional dev link.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This was referenced Aug 5, 2026
jordanrburger
marked this pull request as ready for review
August 5, 2026 16:25
keboola-pr-reviewer-bot
left a comment
There was a problem hiding this comment.
Verdict: needs_human (risk 3/5) · profile docs
Needs human: the diff makes many unverifiable product-behaviour claims across three component pages, and one external link's liveness is explicitly unverifiable.
Concerns:
src/content/docs/components/applications/ai/generative-ai/index.md: Unverifiable product claims: OpenAI-app deprecation, five-provider enum, Google US-stack-onlysrc/content/docs/components/applications/triggers/powerbi-refresh/index.md: Sample config rewritten to dataset_list/string enums — schema shape unverifiable from diffsrc/content/docs/components/applications/ai/generative-ai/index.md: platform.openai.com/account/api-keys liveness unverifiable (403 to non-browser clients)- + 1 more concern — see Check Run summary.
Suggested reviewers: @keboola/docs
jordanrburger
approved these changes
Aug 5, 2026
keboola-pr-reviewer-bot
left a comment
There was a problem hiding this comment.
Verdict: needs_human (risk 3/5) · profile docs
Escalating: the diff introduces many product-behaviour and config-schema claims across three component pages that can't be verified from the diff and need product-team confirmation.
Concerns:
src/content/docs/components/applications/triggers/powerbi-refresh/index.md: Rewritten sample config (dataset_list, string "Yes"/"No" enums) unverifiable from diff; customers copy it.src/content/docs/components/applications/ai/generative-ai/index.md: New product claims: five providers, Google US-stack-only, OpenAI app deprecated, beta — need product confirmation.src/content/docs/components/applications/ai/generative-ai/index.md: VERIFY(owner) comment left in published content flagging an unconfirmed Azure click-path.
Suggested reviewers: @keboola/docs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The June audit flagged the swapped authentication as a blocker. It has been live ever since. Fixing it surfaced a worse defect on the same page, so this PR covers both.
1. The swapped key sources — the audit's finding
OpenAI Service Authentication told the reader to get their key from the Azure Portal; Azure OpenAI Service Authentication step 1 sent them to OpenAI platform settings. Each section now names its own provider.
The audit described this as a section swap, and acting on that would have been wrong. Only the key-source sentences were crossed — Azure steps 3–5 (API Base, Deployment ID, API Version) are genuinely Azure-only, each carrying
options.dependencies.service = "azure_openai"in the live schema. Swapping the sections wholesale would have broken the half that was already right.Confirmed two ways, independently of the audit:
component_config/configuration_description.mdinkeboola/component-generative-ai;src/client/openai_client.py, whereAzureOpenAIClienttakesazure_endpoint/azure_deployment/api_versionwhile the plainOpenAIClienttakes onlyapi_key.The crossing entered in
0ff8c2aa("replace OpenAI app docs with Generative AI app docs") — the page it replaced was correct. This restores that fact.2. A reader failed at step one
The page said "set up a new configuration for the OpenAI application". But
kds-team.app-open-aiis flaggeddeprecatedandexcludeFromNewList— it cannot be picked from the new-component list at all. The component this page actually documents iskds-team.app-generative-ai, named Generative AI, whosedocumentationUrlpoints here.So anyone following the page hunted for a component they could not add. Fixed, with a note that existing OpenAI configurations keep working. That component also carries
appInfo.beta, which the page never mentioned — now labelled.3. Two providers documented, five shipped
authentication.serviceenum:openai,azure_openai,google,huggingface,anthropic. The lede now lists all five, including that Google is US-stack only and Hugging Face needs a per-row Endpoint URL.4. UI labels, against the live
configurationSchemaAlso surfaced Maximum token spend (Optional), a prominent live option the page omitted.
5. Links
The Azure quickstart link now 301s to "Use the Responses API", which has no key-retrieval section — so step 1 pointed at guidance that had disappeared. Repointed to the Azure create-resource doc, which does cover key and endpoint. Every external link on the page was checked live.
Left for an owner rather than guessed
VERIFY(owner)on the Deployment ID click-path: Microsoft now routes deployments through the Foundry portal (ai.azure.com→ Deployments), not "Azure Portal → Azure OpenAI → Model Deployments". I removed the stale path rather than invent a new one — someone with a live Azure tenant should confirm before a click-path goes back in.platform.openai.com/account/api-keysreturns 403 to any non-browser client, so its liveness cannot be verified from here. The page and the component's own config description use the same URL, so they at least agree.Verification
Build clean, 306 pages.
audit-phase2: 45 broken links / 0 missing images, and zero findings of any kind on this page.Found by reconciling the June audits against the live sites; companion to #1080.
Second commit — the trigger apps
This closes the other two code-accuracy findings the June applications audit recorded on PRDCT-353. Both verified field-by-field against each component's live
configurationSchemain the public Storage component index.Power BI Refresh — the documented sample config could not have worked
"datasets": [{ "dataset_input": "<uuid>" }]dataset_list, and its items are plain UUID strings"wait": true"Yes"/"No", default"No""alldatasets": false"Yes"/"No", default"No"Anyone who copied that JSON got a configuration the component does not read — wrong key, wrong item shape, and wrong types on two fields.
On the mislabeled option: the page's meaning was right (the schema's
descriptionis "End job with an error if any dataset finishes with a failed status") but no field by that name exists in the UI. Worth flagging to the component owner thatalldatasets' own title and description disagree — per the 07-28 components call, that copy is fixed at the source, not here.Also corrected the workspace hint to the schema's own wording, and added the defaults (30 / 3600) plus the project-level maximum timeout the schema mentions.
dbt Cloud Job Trigger — two parameters missing, and one made a sentence wrong
ignore_artifacts("Don't store artifacts", defaultfalse) was undocumented while the page stated unconditionally that the component "will also store all available artifacts". Now documented, and that sentence is qualified.dbt_cloud_url("DBT Cloud URL", defaulthttps://cloud.getdbt.com) was undocumented — it is exactly what a non-default region or a single-tenant dbt Cloud instance needs.max_wait_timeparameter, and carries its default (60s) and the Cause default (Triggered from Keboola).Left alone deliberately: the
developers.keboola.comartifacts link stays until that section migrates into help, per the link rule — it is the oneaudit-phase2finding on either page.Verification
Build clean, 306 pages.
audit-phase2at 45 broken links / 0 missing images, unchanged frommain.Scope note: with this commit the PR covers all three live findings the audit recorded for
components/applications/, which keeps it to one section = one PR rather than adding a third PR to a queue where unmerged work is already the bottleneck.