Repository navigation
Conversation
04d66d1 to
b8d922a
Compare
ee0bdba to
eb217d3
Compare
bc4afe5 to
7b3fd89
Compare
| @@ -3530,7 +3746,11 @@ paths: | |||
| `missing`. Validation failures (including plan-gate violations) return | |||
| 422 and nothing is applied. Set `dry_run=true` to get the projected | |||
| report without applying changes. Applies are serialized per project; | |||
| a concurrent apply returns 409. | |||
| a concurrent apply returns 409. A function a promoted preview serves | |||
There was a problem hiding this comment.
🟡 P2: Document preview exceptions to variable synchronization
Config applies now skip variable synchronization for functions served by promoted previews, while direct variable writes affecting them return 409 function_served_by_candidate. docs/variables.md still promises a rollout to affected functions, and docs/project-configuration.md omits the exception. Document the skipped synchronization, refused writes, and rollback-or-deploy recovery in both guides.
Found by gpt-6.1-sol
| @@ -13545,6 +14462,12 @@ paths: | |||
| application/json: | |||
| schema: | |||
| $ref: '#/components/schemas/Error' | |||
| '409': | |||
| description: '`code: function_served_by_candidate` - a promoted preview serves a function whose environment this write changes; the preview keeps the variables it was built with and the write would reach only the function''s own build, so roll the function back to its own build, or deploy it, first.' | |||
There was a problem hiding this comment.
🟡 P2: Variable writes can now fail with 409 function_served_by_candidate, undocumented
Variable POST, PUT and DELETE (here and at 16923, 16958) now answer 409 when a promoted preview serves an affected function. Shared-variable replace (3553) and config apply (3749-3753) skip such functions.
docs/variables.md (around :49 and :82) and docs/project-configuration.md:150 still say deploying variables rolls out to the affected functions. volcano cloud variables deploy/delete users get a refusal, or a skipped function, that the guide doesn't explain. Document the exception and the fix: roll back or deploy the function first.
Found by claude-opus-5-5
| @@ -3738,7 +3958,7 @@ paths: | |||
| The source has already been exported, the repository has already | |||
| taken over as the source of truth, the confirmed production branch | |||
| or repository is stale, a function or frontend deployment is still in progress, | |||
| a preview is serving one of the project's frontends, or the project | |||
| a promoted preview is serving one of the project's functions or frontends, or the project | |||
There was a problem hiding this comment.
🟡 P2: Source export's new promoted-preview prerequisite isn't documented
Source export now answers 409 while a promoted preview serves one of the project's functions or frontends. docs/git.md:313-373 lists no such prerequisite, so a user hits an unexplained conflict. Add it to the export prerequisites.
Found by claude-opus-5-5
| @@ -9440,8 +10307,10 @@ paths: | |||
| off, and turning `skill_learning` down or off, needs no check. | |||
| Nothing is saved either when the push check can't be answered (`429` | |||
| or `503`, with `Retry-After`). When the project points at another | |||
| repository, or at none, `autonomy` changes from `merge` to `open_pr`; | |||
| pointing back doesn't change it back. | |||
| repository, reaches its repository through another Volcano GitHub App | |||
There was a problem hiding this comment.
🟡 P2: Guide doesn't say a GitHub App reinstall drops merge to open_pr, or that merging needs a required status check
Two new rules in the contract:
autonomydrops frommergetoopen_prwhen the project reaches its repository through another Volcano GitHub App installation, and reconnecting after a reinstall counts as another installation (10309-10313).- LavaFlow merges only into a base branch that requires at least one status check, and holds every other fix with
no_required_checks(10281-10284).
docs/lavaflow.md:186-219 mentions only connecting another repository. Users can silently lose merge after a reinstall, or see every fix held, without the guide explaining why.
Found by claude-opus-5-5
| held_workflows: | ||
| allOf: | ||
| - $ref: '#/components/schemas/LavaflowHeldWorkflows' | ||
| nullable: true | ||
| description: For a run whose `pull_request_skipped` is `ungated_workflows`, every workflow job that held its fix. Null for any other run, and for a held run whose workflows LavaFlow couldn't read to the end, such as one with a workflow it couldn't parse, or more than 256 such jobs. | ||
| source_unavailable: |
There was a problem hiding this comment.
⚪ P3: show gives fixed source_unavailable advice and ignores the new source_unavailable.reason
The run now carries a source_unavailable object that says why the source couldn't be read. internal/output/lavaflow.go:520 still prints one fixed sentence about the repository connection and the deployed commit, which can point users at the wrong cause. Use the structured reason or its message.
Found by claude-opus-5-5
| @@ -31904,21 +33492,51 @@ components: | |||
| - message | |||
| LavaflowRepositoryChecks: | |||
There was a problem hiding this comment.
🟡 P2: Published guide incorrectly says repository tests never run
LavaflowRepositoryChecks now reports passed and failed checks and their commands. docs/lavaflow.md:403 still states that LavaFlow does not run repository tests before opening a pull request. Update that section and its example so users can correctly interpret the Checks: output.
Found by gpt-6.1-sol
| @@ -29175,6 +30651,16 @@ components: | |||
| type: string | |||
| format: uuid | |||
| description: Newest queued deployment that will run after the current operation | |||
| serving_candidate_id: | |||
There was a problem hiding this comment.
🟡 P2: Function output does not identify the preview serving traffic
When serving_candidate_id is set, status describes the function's own build, which receives no traffic. Function, Functions, and functionStatus in internal/output/functions.go ignore this field, so a healthy serving preview can appear failed after an own-build deployment fails. Identify the serving preview and qualify the own-build status.
Found by gpt-6.1-sol
| repository, reaches its repository through another Volcano GitHub App | ||
| installation, or points at none, `autonomy` changes from `merge` to | ||
| `open_pr`; pointing back doesn't change it back. Reconnecting after a | ||
| reinstall of the App counts as another installation. |
There was a problem hiding this comment.
🟡 P2: Merge-reset guidance omits GitHub App reinstallation
Reconnecting through another Volcano GitHub App installation, including after reinstallation, now resets autonomy from merge to open_pr. docs/lavaflow.md:216 describes resets only when the repository changes. Document this additional trigger and the need to explicitly enable merging again.
Found by gpt-6.1-sol
AI review: re-assess the approachPR author, the AI review has found P0-P2 problems in 3 rounds in a row, through b30f477, since this PR was last marked ready for review. When each fix brings new findings, the approach is usually the problem rather than the next fix, but the AI review could not move this PR back to draft, so it keeps reviewing each push. Convert the PR to draft yourself while you decide how to go on. Consider:
Coding agents: stop here and do not push another fix for these findings. Tell the author this PR did not converge after 3 AI review rounds, summarize the open findings and where they cluster, recommend one of the options above, and wait for the author's decision before changing the code or marking the PR ready for review. Marking the PR ready for review starts a new set of 3 rounds with a review of the current head. To accept the findings as they stand, mark it ready, and once that review finishes, add the |
| @@ -10922,9 +11803,6 @@ type LavaflowSettings struct { | |||
| // Repository The GitHub repository the project is linked to, as `GET /projects/{id}/git-connection` reports it. LavaFlow opens fix pull requests there, against `production_branch`. Null when the project has none. | |||
| Repository *ProjectGitConnectionSummary `json:"repository"` | |||
|
|
|||
| // SkillLearning What LavaFlow will do with a skill it learns from a writer's correction of one of its fixes, once learning ships in a later release. `auto`, the default, activates it at once. `review` keeps it `proposed` until the owner activates it. `off` learns none and loads no project skill; the project's skills stay readable and deletable. A writer of the repository can steer LavaFlow through what it learns, outside the repository's history and branch protection, so a repository that protects its guidance, or relays CI output through a bot account with write access, should use `review`. Turning learning up needs the project's `lavaflow.skills` capability. | |||
| SkillLearning LavaflowSkillLearning `json:"skill_learning"` | |||
|
|
|||
| // UpdatedAt When the settings were last saved, or last changed by connecting a repository. Null until they first are. | |||
There was a problem hiding this comment.
🟠 P1: skill_learning removed from LavaflowSettings, but the settings JSON fixture still expects it, so two LavaFlow tests fail
The contract removes skill_learning and the skills routes, so the generated LavaflowSettings loses SkillLearning. settings --json (internal/cmd/lavaflow/settings.go:48) and status --json (internal/lavaflow/lavaflow.go:154) re-encode the generated struct, so neither prints skill_learning any more.
defaultLavaflowSettings() (internal/cmd/lavaflow/helpers_test.go:118) still has "skill_learning": "auto". The whole-map comparisons in TestEveryCommandWritesTheAPIsValuesAsJSON (lavaflow_test.go:232) and TestStatusJSONSaysTheSettingsAndTheRepository (status_test.go:107) therefore fail and block make test.
Fix: remove the key from the fixture.
Found by claude-opus-5-5
| @@ -3738,7 +3958,7 @@ paths: | |||
| The source has already been exported, the repository has already | |||
| taken over as the source of truth, the confirmed production branch | |||
| or repository is stale, a function or frontend deployment is still in progress, | |||
| a preview is serving one of the project's frontends, or the project | |||
| a promoted preview is serving one of the project's functions or frontends, or the project | |||
There was a problem hiding this comment.
⚪ P3: volcano git export docs don't mention the new promoted-preview refusal
Source export now answers 409 while a promoted preview serves one of the project's functions or frontends. docs/git.md:313-373 doesn't mention this, so volcano git export users can hit a conflict the guide doesn't explain.
The impact is small, because the section lists none of the other 409 causes either.
Fix: add a line saying to roll back the preview before exporting.
Found by claude-opus-5-5
| @@ -10922,9 +11803,6 @@ type LavaflowSettings struct { | |||
| // Repository The GitHub repository the project is linked to, as `GET /projects/{id}/git-connection` reports it. LavaFlow opens fix pull requests there, against `production_branch`. Null when the project has none. | |||
| Repository *ProjectGitConnectionSummary `json:"repository"` | |||
|
|
|||
| // SkillLearning What LavaFlow will do with a skill it learns from a writer's correction of one of its fixes, once learning ships in a later release. `auto`, the default, activates it at once. `review` keeps it `proposed` until the owner activates it. `off` learns none and loads no project skill; the project's skills stay readable and deletable. A writer of the repository can steer LavaFlow through what it learns, outside the repository's history and branch protection, so a repository that protects its guidance, or relays CI output through a bot account with write access, should use `review`. Turning learning up needs the project's `lavaflow.skills` capability. | |||
| SkillLearning LavaflowSkillLearning `json:"skill_learning"` | |||
|
|
|||
| // UpdatedAt When the settings were last saved, or last changed by connecting a repository. Null until they first are. | |||
There was a problem hiding this comment.
🟠 P1: Update settings fixtures after removing skill_learning
Removing LavaflowSettings.SkillLearning drops skill_learning when settings are decoded and re-encoded. However, defaultLavaflowSettings() in internal/cmd/lavaflow/helpers_test.go:114 still includes it. Consequently, the whole-map comparisons in TestStatusJSONSaysTheSettingsAndTheRepository and TestEveryCommandWritesTheAPIsValuesAsJSON will fail, blocking CI. Remove the obsolete field from the fixture.
Found by gpt-6.1-sol
| @@ -32055,6 +33283,42 @@ components: | |||
| required: | |||
There was a problem hiding this comment.
⚪ P3: Use the structured source-unavailable recovery guidance
source_unavailable.reason now distinguishes causes such as uncommitted changes and unattributed deployments. lavaflowNoFix in internal/output/lavaflow.go still always recommends checking the repository connection and commit. Use the reason-specific recovery when present, retaining generic advice for older records.
Found by gpt-6.1-sol
| @@ -10895,10 +11776,10 @@ type LavaflowScanStatus string | |||
|
|
|||
| // LavaflowSettings A project's LavaFlow settings. LavaFlow sends this project's logs and source code to an AI service that Volcano operates. | |||
| type LavaflowSettings struct { | |||
There was a problem hiding this comment.
🟠 P1: skill_learning removed from LavaflowSettings, but the settings JSON fixture still expects it, so two LavaFlow tests fail
The regenerated LavaflowSettings no longer has SkillLearning. settings --json and status --json re-encode *apiclient.LavaflowSettings (internal/cmd/lavaflow/settings.go:48, internal/lavaflow/lavaflow.go:154), so their output now omits skill_learning.
defaultLavaflowSettings() (internal/cmd/lavaflow/helpers_test.go:118) still includes "skill_learning": "auto", so two tests fail:
TestEveryCommandWritesTheAPIsValuesAsJSON(lavaflow_test.go:232)TestStatusJSONSaysTheSettingsAndTheRepository(status_test.go:106-110)
Fix: remove the key from the fixture in this PR. Scripts that read skill_learning from --json also lose the field.
Found by claude-opus-5-5
| LavaflowHoldReason: | ||
| type: object | ||
| description: One reason LavaFlow holds the fix for a person. | ||
| properties: | ||
| code: | ||
| type: string | ||
| description: 'Why the fix is held. `client_reported_commit`: the fix is built on a commit Volcano can''t tie to a push. `path`: it changes a path in `human_review_paths`, or deploy or infrastructure configuration Volcano always holds, such as `volcano-config.yaml`, Terraform files, a YAML or JSON file that declares a resource, a YAML template that mentions `apiVersion` or `kind`, a file in a Helm chart or Kustomize directory, or, in a repository too large to read in full, any file no other path reason holds. `sensitive_path`: it changes another path Volcano always holds: authentication or authorization code, Next.js middleware included; secret, key, certificate or cryptography files; a coding agent''s instructions or settings, or Git hook configuration; CI configuration; a dependency manifest or lockfile, or a `package.json` change to what installs or its install scripts; or runtime, container or other configuration files. `label`: the pull request has the `needs-human-review` label. `no_checks`: no CI ran on it. `required_check_skipped`: a required check was skipped. `no_required_checks`: the base branch requires no check, so passing checks alone don''t vouch for the fix. `changes_requested`: a reviewer requested changes. `repository_requires_approval`: the repository requires an approving review. `person_commits`: someone other than LavaFlow pushed to the fix''s branch. `rules_bypass`: the Volcano GitHub App can bypass a ruleset on the base branch. `unchecked_rules`: the base branch has a rule LavaFlow doesn''t check, such as required signatures. `commit_convention`: no title can meet the repository''s commit convention. `ungated_workflows`: the fix opened past workflows that can run it with the repository''s secrets before a person approves it, as the project''s owner allowed, or LavaFlow couldn''t check its workflows, so LavaFlow never starts its CI or merges it. `lineage_undoes_parent`: the fix follows up an earlier LavaFlow fix and deletes or changes lines that fix added, which could undo it. `lineage_cap`: the fix''s lineage opened as many pull requests as it may. `lineage_held`: an earlier pull request in the fix''s lineage was held, stopped or closed. `recent_regressions`: fixes LavaFlow merged in the project recently caused new errors. Other codes name a concern LavaFlow''s reviewers raised. New codes may appear.' | ||
| description: 'Why the fix is held. `client_reported_commit`: the fix is built on a commit Volcano can''t tie to a push. `path`: it changes a path in `human_review_paths`, or deploy or infrastructure configuration Volcano always holds, such as `volcano-config.yaml`, Terraform files, a YAML or JSON file that declares a resource, a YAML template that mentions `apiVersion` or `kind`, a file in a Helm chart or Kustomize directory, or, in a repository too large to read in full, any file no other path reason holds. `sensitive_path`: it changes another path Volcano always holds: authentication or authorization code, Next.js middleware included; secret, key, certificate or cryptography files; a coding agent''s instructions or settings, or Git hook configuration; CI configuration; a dependency manifest or lockfile, or a `package.json` change to what installs or its install scripts; or runtime, container or other configuration files. `label`: the pull request has the `needs-human-review` label. `no_checks`: no CI ran on it. `required_check_skipped`: a required check was skipped. `no_required_checks`: the base branch requires no check, so passing checks alone don''t vouch for the fix. `changes_requested`: a reviewer requested changes. `repository_requires_approval`: the repository requires an approving review. `person_commits`: someone other than LavaFlow pushed to the fix''s branch. `rules_bypass`: the Volcano GitHub App can bypass a ruleset on the base branch. `unchecked_rules`: the base branch has a rule LavaFlow doesn''t check, such as required signatures. On a fix a person merges it names only rules that kept LavaFlow from starting the fix''s CI, such as `code_scanning` or `workflows`, or that LavaFlow couldn''t read them. `commit_convention`: no title can meet the repository''s commit convention. `ungated_workflows`: the fix opened past workflows that can run it with the repository''s secrets before a person approves it, as the project''s owner allowed, or LavaFlow couldn''t check its workflows, or, when LavaFlow was about to start its CI or add it to a merge queue, a workflow could run it with those secrets before a person approves it or couldn''t be read, so LavaFlow takes it no further and never merges it. A fix held for another reason before its CI starts lists it too when that check, run without starting CI, finds such a workflow or can''t finish. `ci_outside_actions`: when LavaFlow was about to start the fix''s CI, the repository could run CI, a build or a preview outside GitHub Actions: the root of the fix''s tree or its base branch''s holds another service''s configuration, such as `.travis.yml`, `.circleci/` or `netlify.toml`, which `paths` names, another app reported checks or statuses on the base branch, or LavaFlow couldn''t read them in full. LavaFlow starts CI only when it finds no sign of CI outside GitHub Actions, so it never starts this fix''s CI or merges it. `lineage_undoes_parent`: the fix follows up an earlier LavaFlow fix and deletes or changes lines that fix added, which could undo it. `lineage_cap`: the fix''s lineage opened as many pull requests as it may. `lineage_held`: an earlier pull request in the fix''s lineage was held, stopped or closed; one a person merges holds it only when closed. `recent_regressions`: fixes LavaFlow merged in the project recently caused new errors. `no_test`: the fix changes code the repository tests and adds no test, because testing it needs test infrastructure the repository doesn''t have or the change has no effect a test can observe. `choices_to_confirm`: the fix states behavior it decides beyond stopping the error, listed in the run''s `choices` and, on a private repository, under Choices to confirm in the pull request''s description, for a person to confirm, and LavaFlow''s reviewers didn''t all mark each choice as needing no person. It never applies alongside `person_merges`: the person confirms the choices while reviewing the fix. `risky_change`: the fix adds or removes a line that converts a value, such as with `float()` or `parseInt()`, in a file that names a rate limit or quota, authentication or authorization, or money, so values such as NaN, Infinity or a negative number could get past a check there; `paths` names the files. `review_notes`: LavaFlow''s reviewers passed the fix, but its review''s last round left notes, findings below `major` that a later round no longer sends back for revision, such as a decision the fix makes without stating it. `person_merges`: a person reviews and merges the fix, because the project''s autonomy is `open_pr`, merging was unavailable when it opened, or its run may only open a pull request; LavaFlow ran the fix''s CI once first unless another reason, or the CI start''s own checks, stopped it. Other codes name a concern LavaFlow''s reviewers raised. New codes may appear.' |
There was a problem hiding this comment.
⚪ P3: show never prints the run's choices or the review's open findings, which the new holds ask a person to check
The new hold codes choices_to_confirm and review_notes point the reader to the run's choices and review.open_findings. On a public repository the choices aren't in the PR description either.
LavaflowRun in internal/output/lavaflow.go:200-211 prints only the review's verdict, round count and stop reason, so a person following the hold must use --json to see what to confirm.
Found by claude-opus-5-5
| @@ -5947,7 +6167,7 @@ paths: | |||
| description: | | |||
| The name of the function to invoke. Defaults to "handler" if not specified. | |||
| Your code must export/define a function with this name: | |||
| - Node.js: exports.handler (in index.js, index.mjs or index.cjs, or in TypeScript in index.ts, index.mts or index.cts, which the build compiles without type-checking) | |||
| - Node.js: exports.handler (in index.js, index.mjs or index.cjs, or in TypeScript in index.ts, index.mts, index.cts or index.tsx, which the build compiles without type-checking) | |||
There was a problem hiding this comment.
⚪ P3: The build now compiles index.tsx, but the CLI's TypeScript discovery still ignores it
The contract now lists index.tsx as a Node.js handler entry the build compiles. internal/function/typescript.go:25-37, whose comment says it mirrors the server's discovery, still excludes .tsx, and docs/functions.md:57,77 says .tsx files aren't functions.
A volcano/functions/<dir>/index.tsx function isn't found by functions deploy or volcano deploy. Add .tsx to the discovery and update the docs.
Found by claude-opus-5-5
| @@ -31565,7 +32811,7 @@ components: | |||
| - LavaflowSkipReasonReviewUnresolved | |||
| - LavaflowSkipReasonDuplicateInRepository | |||
| - LavaflowSkipReasonSecurityFinding | |||
| description: 'Why a finished run opened no pull request, with what you can do next. `diagnose_only`: the project''s `autonomy` was `diagnose_only` when the run was queued, or became it before the pull request opened, so LavaFlow only diagnosed the issue; read the diagnosis, and set `autonomy` to `open_pr` or `merge` for later runs to open pull requests. `not_fixable`: the diagnosis found no change in the code that fixes the error, for example because the cause is outside it; read the diagnosis. `low_confidence`: the diagnosis is not confident enough to propose a fix; read the diagnosis. `no_patch`: LavaFlow proposed no change; read the diagnosis. `possible_credential`: the fix or its description held what looks like a credential or a project secret, so LavaFlow pushed nothing; apply the fix yourself from the diagnosis. `possible_personal_data`: the fix adds an email address the repository lacks, and the repository isn''t private, so LavaFlow pushed nothing; apply the fix yourself. `ungated_workflows`: a workflow could run the fix with the repository''s secrets before a person approves it; gate the workflow on a label a person adds, or turn on `allow_ungated_workflows`. `convention_unsatisfiable`: LavaFlow would merge the fix, but no title can meet the repository''s commit convention, so it kept the fix on the run; apply the fix yourself, or relax the convention. `pull_request_open`: another LavaFlow pull request for the issue is open; review or close it first. `source_unavailable`: LavaFlow couldn''t read the repository at the deployed commit, or the production branch no longer holds it; check the project''s repository connection and that the commit exists on that branch. `permission_missing`: the Volcano GitHub App, or the project owner''s GitHub account, lacks a permission LavaFlow needs; grant the App''s requested permissions and make sure the owner can push to the repository. `repository_changed`: the project no longer deploys from the repository the run read; a new run uses the current one. `publish_failed`: opening the pull request failed; a new run tries again. `lineage_cap`: LavaFlow opened as many pull requests in this fix''s lineage as it may; review the lineage''s pull requests and fix the rest yourself. `lineage_held`: an earlier pull request in this fix''s lineage was held, stopped or closed, so LavaFlow opens no more in it; apply the fix yourself from the diagnosis. `review_unresolved`: LavaFlow''s review didn''t pass a Code Quality fix; read the diagnosis. `duplicate_in_repository`: another project on the repository has the open Code Quality pull request for the same finding. `security_finding`: the finding has security impact and the repository isn''t private, so the fix would disclose it; fix it yourself. New reasons may appear.' | |||
| description: 'Why a finished run opened no pull request, with what you can do next. `diagnose_only`: the project''s `autonomy` was `diagnose_only` when the run was queued, or became it before the pull request opened, so LavaFlow only diagnosed the issue; read the diagnosis. For later runs to open pull requests, send `"autonomy": "open_pr"` to `PATCH /lavaflow/settings`, or run `volcano cloud lavaflow settings set --autonomy open_pr`. `not_fixable`: the diagnosis found no change in the code that fixes the error, for example because the cause is outside it; read the diagnosis. `low_confidence`: the diagnosis is not confident enough to propose a fix; read the diagnosis. `no_patch`: LavaFlow proposed no change; read the diagnosis. `possible_credential`: the fix held what looks like a credential or a project secret, so LavaFlow pushed nothing; apply the fix yourself from the diagnosis. `possible_personal_data`: the fix adds an email address the repository lacks, and the repository isn''t private, so LavaFlow pushed nothing; apply the fix yourself. `ungated_workflows`: a workflow could run the fix with the repository''s secrets before a person approves it; gate the workflow on a label a person adds, or turn on `allow_ungated_workflows`. `convention_unsatisfiable`: LavaFlow would merge the fix, but no title can meet the repository''s commit convention, so it kept the fix on the run; apply the fix yourself, or relax the convention. `pull_request_open`: when the run checked, before opening a pull request, another LavaFlow pull request for the issue was open, or merged and not yet deployed, so this run opened none; a fix it wrote stays on the run. That pull request may have closed since; find it with `GET /lavaflow/runs?project_id=…&issue_id=…`, whose runs carry their `pull_request`. Review it, or close it if you don''t want it. `source_unavailable`: LavaFlow couldn''t read, or open a fix on, the code that served the error; the run''s `source_unavailable` says why and what to do. `permission_missing`: the Volcano GitHub App, or the project owner''s GitHub account, lacks a permission LavaFlow needs; grant the App''s requested permissions and make sure the owner can push to the repository. `repository_changed`: the project no longer deploys from the repository the run read; a new run uses the current one. `publish_failed`: opening the pull request failed; a new run tries again. `lineage_cap`: LavaFlow opened as many pull requests in this fix''s lineage as it may; review the lineage''s pull requests and fix the rest yourself. `lineage_held`: an earlier pull request in this fix''s lineage was held, stopped or closed (one a person merges holds it only when closed), so LavaFlow opens no more in it; apply the fix yourself from the diagnosis. `review_unresolved`: LavaFlow''s review didn''t pass a Code Quality fix; read the diagnosis. `duplicate_in_repository`: when the run checked, another project on the repository already had the Code Quality pull request for the same finding; review that pull request in the repository. `security_finding`: the finding has security impact and the repository isn''t private, so the fix would disclose it; fix it yourself. New reasons may appear.' | |||
There was a problem hiding this comment.
🟡 P2: show tells users to review or close an open PR for pull_request_open, which now also covers a merged fix that isn't deployed yet
The skip reason now also fires when another LavaFlow pull request for the issue was merged and isn't deployed yet. internal/output/lavaflow.go:518 prints "another LavaFlow pull request for this issue is open. Review or close it first.", and docs/lavaflow.md:450-452 says the same. For a merged PR that advice is wrong, because it can't be closed and the user only has to deploy. Reword both to cover the merged-but-not-deployed case.
Found by claude-opus-5-5
| a concurrent apply returns 409. A function a promoted preview serves | ||
| keeps the variables the preview was built with: when the apply's | ||
| variable changes would reach it, it is reported as `unchanged` with | ||
| `code: function_served_by_candidate` and a `notice`, while every other |
There was a problem hiding this comment.
🟡 P2: Variable and config guides omit the promoted-preview exception
config deploy now reports a function a promoted preview serves as unchanged with code: function_served_by_candidate, and doesn't synchronize its variables. Replacing shared variables likewise skips those functions (3553). docs/variables.md:82 still says deploying variables rolls out to the affected functions. docs/project-configuration.md:106-130,342-385 doesn't mention the exception. The CLI prints the entry's notice, but nothing in the docs explains why a variable change didn't reach a function. Document the exception.
Found by claude-opus-5-5
| @@ -31787,6 +33146,16 @@ components: | |||
| items: | |||
| type: string | |||
| description: The files whose changes `diff` leaves out, by path, as its `# LavaFlow withheld` lines name them; an empty string for a file whose path may itself hold a credential. Empty when `diff` shows every file, or is null. | |||
| choices: | |||
There was a problem hiding this comment.
⚪ P3: show never prints the run's choices or the review's open findings, which the new holds ask a person to check
The new choices_to_confirm and review_notes hold codes (32316) ask a person to confirm the run's choices or read the review's open_findings (32971). On a public repository the choices appear only on the run. LavaflowRun output (internal/output/lavaflow.go:184-260) prints neither, so a show user can't see what the hold asks them to confirm.
Found by claude-opus-5-5
| @@ -9397,11 +10419,21 @@ paths: | |||
| LavaFlow sends this project's logs and source code to an AI service | |||
| that Volcano operates. | |||
|
|
|||
| Turning LavaFlow on, from off, also starts runs for up to 5 open issues | |||
There was a problem hiding this comment.
🟡 P2: Enable guidance omits runs started on existing issues
Turning LavaFlow on now starts runs for up to five eligible existing issues. internal/cmd/lavaflow/enable.go and docs/lavaflow.md omit this immediate work, while the guide still directs users to start runs themselves for issues recorded before enablement. Explain the automatic selection and resulting runs in the enable guidance and published guide.
Found by gpt-6.1-sol
| @@ -31565,7 +32811,7 @@ components: | |||
| - LavaflowSkipReasonReviewUnresolved | |||
| - LavaflowSkipReasonDuplicateInRepository | |||
| - LavaflowSkipReasonSecurityFinding | |||
| description: 'Why a finished run opened no pull request, with what you can do next. `diagnose_only`: the project''s `autonomy` was `diagnose_only` when the run was queued, or became it before the pull request opened, so LavaFlow only diagnosed the issue; read the diagnosis, and set `autonomy` to `open_pr` or `merge` for later runs to open pull requests. `not_fixable`: the diagnosis found no change in the code that fixes the error, for example because the cause is outside it; read the diagnosis. `low_confidence`: the diagnosis is not confident enough to propose a fix; read the diagnosis. `no_patch`: LavaFlow proposed no change; read the diagnosis. `possible_credential`: the fix or its description held what looks like a credential or a project secret, so LavaFlow pushed nothing; apply the fix yourself from the diagnosis. `possible_personal_data`: the fix adds an email address the repository lacks, and the repository isn''t private, so LavaFlow pushed nothing; apply the fix yourself. `ungated_workflows`: a workflow could run the fix with the repository''s secrets before a person approves it; gate the workflow on a label a person adds, or turn on `allow_ungated_workflows`. `convention_unsatisfiable`: LavaFlow would merge the fix, but no title can meet the repository''s commit convention, so it kept the fix on the run; apply the fix yourself, or relax the convention. `pull_request_open`: another LavaFlow pull request for the issue is open; review or close it first. `source_unavailable`: LavaFlow couldn''t read the repository at the deployed commit, or the production branch no longer holds it; check the project''s repository connection and that the commit exists on that branch. `permission_missing`: the Volcano GitHub App, or the project owner''s GitHub account, lacks a permission LavaFlow needs; grant the App''s requested permissions and make sure the owner can push to the repository. `repository_changed`: the project no longer deploys from the repository the run read; a new run uses the current one. `publish_failed`: opening the pull request failed; a new run tries again. `lineage_cap`: LavaFlow opened as many pull requests in this fix''s lineage as it may; review the lineage''s pull requests and fix the rest yourself. `lineage_held`: an earlier pull request in this fix''s lineage was held, stopped or closed, so LavaFlow opens no more in it; apply the fix yourself from the diagnosis. `review_unresolved`: LavaFlow''s review didn''t pass a Code Quality fix; read the diagnosis. `duplicate_in_repository`: another project on the repository has the open Code Quality pull request for the same finding. `security_finding`: the finding has security impact and the repository isn''t private, so the fix would disclose it; fix it yourself. New reasons may appear.' | |||
| description: 'Why a finished run opened no pull request, with what you can do next. `diagnose_only`: the project''s `autonomy` was `diagnose_only` when the run was queued, or became it before the pull request opened, so LavaFlow only diagnosed the issue; read the diagnosis. For later runs to open pull requests, send `"autonomy": "open_pr"` to `PATCH /lavaflow/settings`, or run `volcano cloud lavaflow settings set --autonomy open_pr`. `not_fixable`: the diagnosis found no change in the code that fixes the error, for example because the cause is outside it; read the diagnosis. `low_confidence`: the diagnosis is not confident enough to propose a fix; read the diagnosis. `no_patch`: LavaFlow proposed no change; read the diagnosis. `possible_credential`: the fix held what looks like a credential or a project secret, so LavaFlow pushed nothing; apply the fix yourself from the diagnosis. `possible_personal_data`: the fix adds an email address the repository lacks, and the repository isn''t private, so LavaFlow pushed nothing; apply the fix yourself. `ungated_workflows`: a workflow could run the fix with the repository''s secrets before a person approves it; gate the workflow on a label a person adds, or turn on `allow_ungated_workflows`. `convention_unsatisfiable`: LavaFlow would merge the fix, but no title can meet the repository''s commit convention, so it kept the fix on the run; apply the fix yourself, or relax the convention. `pull_request_open`: when the run checked, before opening a pull request, another LavaFlow pull request for the issue was open, or merged and not yet deployed, so this run opened none; a fix it wrote stays on the run. That pull request may have closed since; find it with `GET /lavaflow/runs?project_id=…&issue_id=…`, whose runs carry their `pull_request`. Review it, or close it if you don''t want it. `source_unavailable`: LavaFlow couldn''t read, or open a fix on, the code that served the error; the run''s `source_unavailable` says why and what to do. `permission_missing`: the Volcano GitHub App, or the project owner''s GitHub account, lacks a permission LavaFlow needs; grant the App''s requested permissions and make sure the owner can push to the repository. `repository_changed`: the project no longer deploys from the repository the run read; a new run uses the current one. `publish_failed`: opening the pull request failed; a new run tries again. `lineage_cap`: LavaFlow opened as many pull requests in this fix''s lineage as it may; review the lineage''s pull requests and fix the rest yourself. `lineage_held`: an earlier pull request in this fix''s lineage was held, stopped or closed (one a person merges holds it only when closed), so LavaFlow opens no more in it; apply the fix yourself from the diagnosis. `review_unresolved`: LavaFlow''s review didn''t pass a Code Quality fix; read the diagnosis. `duplicate_in_repository`: when the run checked, another project on the repository already had the Code Quality pull request for the same finding; review that pull request in the repository. `security_finding`: the finding has security impact and the repository isn''t private, so the fix would disclose it; fix it yourself. New reasons may appear.' | |||
There was a problem hiding this comment.
🟡 P2: Skip-reason output misidentifies merged fixes as open
pull_request_open now also covers an earlier fix that merged but has not deployed. lavaflowNoFix in internal/output/lavaflow.go always says another PR is open and instructs the user to review or close it, neither of which resolves that case. Use wording covering both states and direct users to inspect the earlier fix and its deployment.
Found by gpt-6.1-sol
| Nothing is saved either when the push check can't be answered (`429` | ||
| or `503`, with `Retry-After`). When the project points at another | ||
| repository, or at none, `autonomy` changes from `merge` to `open_pr`; | ||
| pointing back doesn't change it back. | ||
| repository, reaches its repository through another Volcano GitHub App |
There was a problem hiding this comment.
🟡 P2: Merge-reset guidance omits GitHub App reinstallation
Reconnecting through another Volcano GitHub App installation, including after reinstallation, now resets autonomy from merge to open_pr. docs/lavaflow.md describes this reset only when the repository changes. Document the additional trigger and the need to explicitly enable merging again.
Found by gpt-6.1-sol
| x-go-type-skip-optional-pointer: true | ||
| items: | ||
| type: string | ||
| description: 'The behavior the saved fix says it decides beyond stopping the error, one plain sentence each. Under `autonomy: merge`, a fix is held with `choices_to_confirm` for a person to confirm these only when LavaFlow''s reviewers didn''t all mark each one as needing no person; a fix they all cleared merges without a person. A person who merges the fix confirms them as they review it. When LavaFlow withholds a choice, a sentence that says why stands in: `LavaFlow left this statement out because it may contain a credential` when it may contain a credential or holds one of the project''s secret values; `… because it''s too long to check for a credential` when it is over 4,000 characters; and `… because the fix may add a credential` when the run is held with `possible_credential`. Absent when the fix states none or the run saved no fix.' |
There was a problem hiding this comment.
⚪ P3: Show omits the choices and findings referenced by new holds
The new holds can ask users to inspect choices and review.open_findings, but LavaflowRun in internal/output/lavaflow.go displays neither. A user following the hold must discover --json to read them. Include the relevant choices and review findings in text output.
Found by gpt-6.1-sol
| @@ -5947,7 +6167,7 @@ paths: | |||
| description: | | |||
| The name of the function to invoke. Defaults to "handler" if not specified. | |||
| Your code must export/define a function with this name: | |||
| - Node.js: exports.handler (in index.js, index.mjs or index.cjs, or in TypeScript in index.ts, index.mts or index.cts, which the build compiles without type-checking) | |||
| - Node.js: exports.handler (in index.js, index.mjs or index.cjs, or in TypeScript in index.ts, index.mts, index.cts or index.tsx, which the build compiles without type-checking) | |||
There was a problem hiding this comment.
⚪ P3: TypeScript discovery omits the newly supported TSX entry
The contract now lists index.tsx as a compiled Node.js entry, but internal/function/typescript.go excludes .tsx, and docs/functions.md says those files are not functions. A directory containing only index.tsx is therefore skipped by CLI discovery. Extend discovery and update the guide.
Found by gpt-6.1-sol
| @@ -9397,11 +10419,21 @@ paths: | |||
| LavaFlow sends this project's logs and source code to an AI service | |||
| that Volcano operates. | |||
|
|
|||
| Turning LavaFlow on, from off, also starts runs for up to 5 open issues | |||
There was a problem hiding this comment.
🟡 P2: Turning LavaFlow on now starts runs on up to 5 existing issues, but neither enable nor the guide says so
The PATCH and PUT descriptions now say a turn-on from off by the owner starts runs for up to 5 recent open exception issues. EnableDisclosure (internal/lavaflow/lavaflow.go:342) mentions only the AI disclosure and data handling. docs/lavaflow.md:341-343 still tells users to start a run themselves for an issue recorded before LavaFlow was turned on. A user who confirms enable gets fix runs, and possibly pull requests, they were not told about. Add this to the enable disclosure and to the guide.
Found by claude-opus-5-5
| @@ -31565,7 +32811,7 @@ components: | |||
| - LavaflowSkipReasonReviewUnresolved | |||
| - LavaflowSkipReasonDuplicateInRepository | |||
| - LavaflowSkipReasonSecurityFinding | |||
| description: 'Why a finished run opened no pull request, with what you can do next. `diagnose_only`: the project''s `autonomy` was `diagnose_only` when the run was queued, or became it before the pull request opened, so LavaFlow only diagnosed the issue; read the diagnosis, and set `autonomy` to `open_pr` or `merge` for later runs to open pull requests. `not_fixable`: the diagnosis found no change in the code that fixes the error, for example because the cause is outside it; read the diagnosis. `low_confidence`: the diagnosis is not confident enough to propose a fix; read the diagnosis. `no_patch`: LavaFlow proposed no change; read the diagnosis. `possible_credential`: the fix or its description held what looks like a credential or a project secret, so LavaFlow pushed nothing; apply the fix yourself from the diagnosis. `possible_personal_data`: the fix adds an email address the repository lacks, and the repository isn''t private, so LavaFlow pushed nothing; apply the fix yourself. `ungated_workflows`: a workflow could run the fix with the repository''s secrets before a person approves it; gate the workflow on a label a person adds, or turn on `allow_ungated_workflows`. `convention_unsatisfiable`: LavaFlow would merge the fix, but no title can meet the repository''s commit convention, so it kept the fix on the run; apply the fix yourself, or relax the convention. `pull_request_open`: another LavaFlow pull request for the issue is open; review or close it first. `source_unavailable`: LavaFlow couldn''t read the repository at the deployed commit, or the production branch no longer holds it; check the project''s repository connection and that the commit exists on that branch. `permission_missing`: the Volcano GitHub App, or the project owner''s GitHub account, lacks a permission LavaFlow needs; grant the App''s requested permissions and make sure the owner can push to the repository. `repository_changed`: the project no longer deploys from the repository the run read; a new run uses the current one. `publish_failed`: opening the pull request failed; a new run tries again. `lineage_cap`: LavaFlow opened as many pull requests in this fix''s lineage as it may; review the lineage''s pull requests and fix the rest yourself. `lineage_held`: an earlier pull request in this fix''s lineage was held, stopped or closed, so LavaFlow opens no more in it; apply the fix yourself from the diagnosis. `review_unresolved`: LavaFlow''s review didn''t pass a Code Quality fix; read the diagnosis. `duplicate_in_repository`: another project on the repository has the open Code Quality pull request for the same finding. `security_finding`: the finding has security impact and the repository isn''t private, so the fix would disclose it; fix it yourself. New reasons may appear.' | |||
| description: 'Why a finished run opened no pull request, with what you can do next. `diagnose_only`: the project''s `autonomy` was `diagnose_only` when the run was queued, or became it before the pull request opened, so LavaFlow only diagnosed the issue; read the diagnosis. For later runs to open pull requests, send `"autonomy": "open_pr"` to `PATCH /lavaflow/settings`, or run `volcano cloud lavaflow settings set --autonomy open_pr`. `not_fixable`: the diagnosis found no change in the code that fixes the error, for example because the cause is outside it; read the diagnosis. `low_confidence`: the diagnosis is not confident enough to propose a fix; read the diagnosis. `no_patch`: LavaFlow proposed no change; read the diagnosis. `possible_credential`: the fix held what looks like a credential or a project secret, so LavaFlow pushed nothing; apply the fix yourself from the diagnosis. `possible_personal_data`: the fix adds an email address the repository lacks, and the repository isn''t private, so LavaFlow pushed nothing; apply the fix yourself. `ungated_workflows`: a workflow could run the fix with the repository''s secrets before a person approves it; gate the workflow on a label a person adds, or turn on `allow_ungated_workflows`. `convention_unsatisfiable`: LavaFlow would merge the fix, but no title can meet the repository''s commit convention, so it kept the fix on the run; apply the fix yourself, or relax the convention. `pull_request_open`: when the run checked, before opening a pull request, another LavaFlow pull request for the issue was open, or merged and not yet deployed, so this run opened none; a fix it wrote stays on the run. That pull request may have closed since; find it with `GET /lavaflow/runs?project_id=…&issue_id=…`, whose runs carry their `pull_request`. Review it, or close it if you don''t want it. `source_unavailable`: LavaFlow couldn''t read, or open a fix on, the code that served the error; the run''s `source_unavailable` says why and what to do. `permission_missing`: the Volcano GitHub App, or the project owner''s GitHub account, lacks a permission LavaFlow needs; grant the App''s requested permissions and make sure the owner can push to the repository. `repository_changed`: the project no longer deploys from the repository the run read; a new run uses the current one. `publish_failed`: opening the pull request failed; a new run tries again. `lineage_cap`: LavaFlow opened as many pull requests in this fix''s lineage as it may; review the lineage''s pull requests and fix the rest yourself. `lineage_held`: an earlier pull request in this fix''s lineage was held, stopped or closed (one a person merges holds it only when closed), so LavaFlow opens no more in it; apply the fix yourself from the diagnosis. `review_unresolved`: LavaFlow''s review didn''t pass a Code Quality fix; read the diagnosis. `duplicate_in_repository`: when the run checked, another project on the repository already had the Code Quality pull request for the same finding; review that pull request in the repository. `security_finding`: the finding has security impact and the repository isn''t private, so the fix would disclose it; fix it yourself. New reasons may appear.' | |||
There was a problem hiding this comment.
⚪ P3: show skip-reason text is outdated for pull_request_open and source_unavailable
pull_request_open now also covers a merged fix that isn't deployed yet, but show (internal/output/lavaflow.go:518) says another PR "is open. Review or close it first." source_unavailable now carries source_unavailable.reason, with specific recovery steps (uncommitted_changes, deployment_unattributed, …). show still prints one fixed piece of advice about the repository connection.
Found by claude-opus-5-5
| @@ -31068,32 +32303,32 @@ components: | |||
| - merged | |||
| - held | |||
| - stopped | |||
| description: '`waiting_for_checks`: LavaFlow waits for the checks on the fix''s commit. `queued`: the fix is in the repository''s merge queue. `merged`: the pull request merged. `held`: something in `hold_reasons` needs a person. LavaFlow commented on the pull request once and never merges, pushes to, rebases or dequeues it again; review it and merge it yourself if you want it. `stopped`: LavaFlow left the pull request open for you, for `reason`.' | |||
| description: '`waiting_for_checks`: LavaFlow waits for the checks on the fix''s commit. `queued`: the fix is in the repository''s merge queue. `merged`: the pull request merged. `held`: something in `hold_reasons` needs a person. LavaFlow commented on the pull request once and never merges, pushes to, rebases or dequeues it again; review it and merge it yourself if you want it. A fix a person merges (its autonomy is `open_pr`, merging was unavailable when it opened, or its run may only open a pull request) is always `held` for `person_merges` once LavaFlow has started its CI, or found it may not. `stopped`: LavaFlow left the pull request open for you, for `reason`.' | |||
| LavaflowMergeReason: | |||
There was a problem hiding this comment.
⚪ P3: A paused CI start on an open_pr fix prints as "paused while merging is off"
For a fix a person merges, paused now means LavaFlow's CI start is paused, whatever merging does. lavaflowMergeReason (internal/output/lavaflow.go:607) always prints "paused while merging is off", and the guide describes Merge: only under autonomy merge.
Found by claude-opus-5-5
| @@ -13381,6 +14069,12 @@ paths: | |||
| application/json: | |||
| schema: | |||
| $ref: '#/components/schemas/Error' | |||
| '409': | |||
| description: '`code: function_served_by_candidate` - a promoted preview serves a function whose environment this write changes; the preview keeps the variables it was built with and the write would reach only the function''s own build, so roll the function back to its own build, or deploy it, first.' | |||
There was a problem hiding this comment.
🟡 P2: Handle the preview variable-write conflict in whole-project deploys
With a promoted function preview and an env-file change affecting that function, the new 409 stops variablescmd.Deploy. internal/cmd/deploy/plan.go runs this before functions, and runDeploy stops at the first error, so the whole-project deploy never reaches the function deployment that could clear the condition. Add a preflight or specific recovery guidance naming the function deployment or rollback required before retrying.
Found by gpt-6.1-sol
| @@ -31787,6 +33146,16 @@ components: | |||
| items: | |||
| type: string | |||
| description: The files whose changes `diff` leaves out, by path, as its `# LavaFlow withheld` lines name them; an empty string for a file whose path may itself hold a credential. Empty when `diff` shows every file, or is null. | |||
| choices: | |||
There was a problem hiding this comment.
⚪ P3: Show the choices and findings referenced by new holds
The new holds ask users to inspect choices and review.open_findings, but LavaflowRun in internal/output/lavaflow.go displays neither. Users following a hold must discover --json to read the relevant material. Include those choices and findings in text output.
Found by gpt-6.1-sol
Summary
API change report
Public API
New Endpoints: 17
GET /connectors
POST /connectors
DELETE /connectors/{connector_id}
GET /connectors/{connector_id}
GET /lavaflow/connector-bindings
POST /lavaflow/connector-bindings
DELETE /lavaflow/connector-bindings/{binding_id}
PUT /lavaflow/settings
GET /projects/{id}/functions/{functionId}/candidates
POST /projects/{id}/functions/{functionId}/candidates
DELETE /projects/{id}/functions/{functionId}/candidates/{candidateId}
GET /projects/{id}/functions/{functionId}/candidates/{candidateId}
GET /projects/{id}/functions/{functionId}/candidates/{candidateId}/deployments
POST /projects/{id}/functions/{functionId}/candidates/{candidateId}/deployments
POST /projects/{id}/functions/{functionId}/candidates/{candidateId}/promote
GET /projects/{id}/functions/{functionId}/serving
POST /projects/{id}/functions/{functionId}/serving/rollback
Deleted Endpoints: 9
GET /lavaflow/global-skills
GET /lavaflow/skill-versions
GET /lavaflow/skills
DELETE /lavaflow/skills/{skill_id}
GET /lavaflow/skills/{skill_id}
PATCH /lavaflow/skills/{skill_id}
GET /lavaflow/slack-channels
POST /lavaflow/slack-channels
DELETE /lavaflow/slack-channels/{binding_id}
Modified Endpoints: 30
GET /capabilities
to decide what to offer, instead of calling a route to see whether it fails.
sandboxessandboxes.sessionssandboxes.custom_templatessandboxes.sessionsis unavailablesandboxes.network_isolationnetwork.egressdeny_all; existingdeny_allsessions work either waysandboxes.output_not_keptkeep_output: falseon a command, andexecutions.keep_output: falseon a session; commands that keep output work either wayissueslavaflowGET /projects/{id}/capabilitieslavaflow.mergeautonomy: merge. Here it reports only whether merging is released in this environment; whether a project has it comes fromGET /projects/{id}/capabilitieslavaflow.lineageGET /projects/{id}/capabilitieslavaflow.code_qualityGET /projects/{id}/capabilitieslavaflow.slackGET /projects/{id}/capabilitiesfunctions.response_streamingfrontend_routesfrontends.candidatesdatabases.migrationssharesA capability missing from the list is unavailable, and a capability under
another, such as
sandboxes.sessions, is unavailable whenever its parent is.While a capability is unavailable, requests that start new work answer
404or
400with codefeature_unavailable; refresh this list when you receivethat code. Reading, deleting, and terminating what already exists keep
working unless the whole feature is absent from the environment. Every caller
in an environment gets the same answer;
GET /projects/{id}/capabilitiesanswers for one project.
functions.response_streamingrefuses nothing: while it is unavailable, afunction's own URL still answers and sends a streamed response whole, once
the function finishes, up to 6 MiB with headers; a larger one fails the
invocation. Frontend Function routes stream either way.
' to 'Lists which product capabilities accept new work in this environment. Check it
to decide what to offer, instead of calling a route to see whether it fails.
sandboxessandboxes.sessionssandboxes.custom_templatessandboxes.sessionsis unavailablesandboxes.network_isolationnetwork.egressdeny_all; existingdeny_allsessions work either waysandboxes.output_not_keptkeep_output: falseon a command, andexecutions.keep_output: falseon a session; commands that keep output work either wayissueslavaflowGET /projects/{id}/capabilitieslavaflow.mergeautonomy: merge. Here it reports only whether merging is released in this environment; whether a project has it comes fromGET /projects/{id}/capabilitieslavaflow.lineageGET /projects/{id}/capabilitieslavaflow.open_pr_ci_startautonomy: open_pr, opening ready for review with LavaFlow running its CI once, unless the repository may run CI outside GitHub Actions; unavailable, such a fix opens as a draft whose commit skips CI. Here it reports only whether this is released in this environment; whether a project has it comes fromGET /projects/{id}/capabilitieslavaflow.code_qualityGET /projects/{id}/capabilitieslavaflow.slackGET /projects/{id}/capabilitieslavaflow.aikidoGET /projects/{id}/capabilitiesfunctions.response_streamingfrontend_routesfrontends.candidatesdatabases.migrationssharesA capability missing from the list is unavailable, and a capability under
another, such as
sandboxes.sessions, is unavailable whenever its parent is.While a capability is unavailable, requests that start new work answer
404or
400with codefeature_unavailable; refresh this list when you receivethat code. Reading, deleting, and terminating what already exists keep
working unless the whole feature is absent from the environment. Every caller
in an environment gets the same answer;
GET /projects/{id}/capabilitiesanswers for one project.
functions.response_streamingrefuses nothing: while it is unavailable, afunction's own URL still answers and sends a streamed response whole, once
the function finishes, up to 6 MiB with headers; a larger one fails the
invocation. Frontend Function routes stream either way.
'
GET /functions/resolve
SDKs use this endpoint internally to invoke by function name while routing by function ID.
Invoke the returned
invoke_urlas-is. It does not share a domain with the API, so a hostbuilt from the API URL will not reach the function. When the deployment serves no public
invocation domain, as in local development,
invoke_urlis omitted and callers invokethrough
POST /functions/{functionId}/invoke.With Service Key:
With Auth User Token:
authenticatedandpublicfunctionsprivatefunction answers 404, exactly as a missing oneWith Anon Key:
functions.invokevisibility: public; any other answers 404' to 'Resolves a DNS-safe function name to its function ID and invocation URL within the caller's project.
SDKs use this endpoint internally to invoke by function name while routing by function ID.
Invoke the returned
invoke_urlas-is. It does not share a domain with the API, so a hostbuilt from the API URL will not reach the function. In local development, and when the
deployment serves no public invocation domain,
invoke_urlis omitted and callers invokethrough
POST /functions/{functionId}/invoke. A local function's owninvoke_url, forwebhook testing, is on the function resource.
With Service Key:
With Auth User Token:
authenticatedandpublicfunctionsprivatefunction answers 404, exactly as a missing oneWith Anon Key:
functions.invokevisibility: public; any other answers 404'
POST /lavaflow/held-fix-opens
repository's workflows could run it with the repository's secrets
before a person approves it (
pull_request_skipped: ungated_workflows). Read the run first: send itsidasrun_id,with the
diff_sha256andheld_workflows.jobs_sha256it served, tosay you read that diff and that list of jobs. LavaFlow opens the fix it
saved, exactly as reviewed, past those jobs only. It writes no new
fix.
Right before it queues the run, LavaFlow serves the diff again and
reads the workflows again. A diff served differently since you read
it, or a job list or a commit the workflows were read at that changed,
answers
409with coderun_changed; read the run again, which listswhat LavaFlow found. The response is the run,
202while it isqueued. LavaFlow reads the workflows again before it opens the pullrequest, and once more as it pushes the fix: a job you didn't read, a
new commit on a branch the workflows were read on, even one that
changes no job, or a production branch other than the one you read
them on holds the fix again with a new list.
Opening a fix lets its pull request open, nothing more. LavaFlow
starts no CI on it and never merges it, as for every fix opened past
ungated workflows; a person pushes to the branch or merges it. The
pull request's description names who opened it and lists the jobs.
One exception: when LavaFlow's read before the pull request opens
finds no job that runs the fix before a person approves it, because
the workflows were gated since you read them, the fix opens as any
other fix and follows the project's merge settings. A run whose
held_workflowslists no job opens the same way.Only the project's owner can open a fix, as a person, while their
account is active: with a sign-in session, a
volcano logintokenwhose sign-in is live, or a platform token that expires. Their GitHub
account must be able to push to the project's repository. A project
access token, a request made through MCP, a platform token that never
expires, and a sign-in that ended get
403with codeperson_required. Opening a fix uses one of the run's attempts: theattempt that opens it is one of the run's, so a run held again on its
last attempt can't be opened again. It starts no new run and counts
toward no run limit.
' to 'Opens the pull request for a fix LavaFlow held because the
repository's workflows could run it with the repository's secrets
before a person approves it (
pull_request_skipped: ungated_workflows). Read the run first: send itsidasrun_id,with the
diff_sha256andheld_workflows.jobs_sha256it served, tosay you read that diff and that list of jobs. LavaFlow opens the fix it
saved, exactly as reviewed, past those jobs only. It writes no new
fix.
Right before it queues the run, LavaFlow serves the diff again and
reads the workflows again. A diff served differently since you read
it, or a job list or a commit the workflows were read at that changed,
answers
409with coderun_changed; read the run again, which listswhat LavaFlow found. The response is the run,
202while it isqueued. LavaFlow reads the workflows again before it opens the pullrequest, and once more as it pushes the fix: a job you didn't read, a
new commit on a branch the workflows were read on, even one that
changes no job, or a production branch other than the one you read
them on holds the fix again with a new list.
Opening a fix lets its pull request open, nothing more. LavaFlow
starts no CI on it and never merges it, as for every fix opened past
ungated workflows; a person pushes to the branch or merges it. The
pull request's description names who opened it and lists the jobs.
One exception: when LavaFlow's read before the pull request opens
finds no job that runs the fix before a person approves it, because
the workflows were gated since you read them, the fix opens as any
other fix and follows the project's merge settings. A run whose
held_workflowslists no job opens the same way.Only the project's owner can open a fix, as a person, while their
account is active: with a
volcano logintokenwhose sign-in is live, or a platform token that expires. Their GitHub
account must be able to push to the project's repository. A project
access token, a request made through MCP, a platform token that never
expires, and a sign-in that ended get
403with codeperson_required. Opening a fix uses one of the run's attempts: theattempt that opens it is one of the run's, so a run held again on its
last attempt can't be opened again. It starts no new run and counts
toward no run limit.
'
bug: the project's code is wrong.performance: the code is too slow or uses too much.security: the code exposes data or access it shouldn't.improvement: the code mishandles an edge case or an outside failure.configuration: a setting, variable or manifest value is wrong or missing.dependency: a package or its version causes it.external: a service outside the project fails and no repository change is right. A Code Quality run's is its finding's,bugorimprovement. Any other run's isdependencyorconfigurationfor a fix that changes only such files, else the kind its diagnosis names. New values may appear; treat an unknown value as uncategorized.' to 'What kind of problem the run works on.bug: the project's code is wrong.performance: the code is too slow or uses too much.security: the code exposes data or access it shouldn't.improvement: the code mishandles an edge case or an outside failure, or, for a reported problem's run, its reporter asked for new content or functionality (diagnosis.requested).configuration: a setting, variable or manifest value is wrong or missing.dependency: a package or its version causes it.external: a service outside the project fails and no repository change is right. A Code Quality run's is its finding's,bugorimprovement. Any other run's isdependencyorconfigurationfor a fix that changes only such files, else the kind its diagnosis names. New values may appear; treat an unknown value as uncategorized.'open_pr, merging was unavailable when it opened, or the run may only open a pull request) that opened ready for review: LavaFlow starts that fix's CI once, then holds it forperson_mergesand never merges it.'client_reported_commit: the fix is built on a commit Volcano can't tie to a push.path: it changes a path inhuman_review_paths, or deploy or infrastructure configuration Volcano always holds, such asvolcano-config.yaml, Terraform files, a YAML or JSON file that declares a resource, a YAML template that mentionsapiVersionorkind, a file in a Helm chart or Kustomize directory, or, in a repository too large to read in full, any file no other path reason holds.sensitive_path: it changes another path Volcano always holds: authentication or authorization code, Next.js middleware included; secret, key, certificate or cryptography files; a coding agent's instructions or settings, or Git hook configuration; CI configuration; a dependency manifest or lockfile, or apackage.jsonchange to what installs or its install scripts; or runtime, container or other configuration files.label: the pull request has theneeds-human-reviewlabel.no_checks: no CI ran on it.required_check_skipped: a required check was skipped.no_required_checks: the base branch requires no check, so passing checks alone don't vouch for the fix.changes_requested: a reviewer requested changes.repository_requires_approval: the repository requires an approving review.person_commits: someone other than LavaFlow pushed to the fix's branch.rules_bypass: the Volcano GitHub App can bypass a ruleset on the base branch.unchecked_rules: the base branch has a rule LavaFlow doesn't check, such as required signatures.commit_convention: no title can meet the repository's commit convention.ungated_workflows: the fix opened past workflows that can run it with the repository's secrets before a person approves it, as the project's owner allowed, or LavaFlow couldn't check its workflows, so LavaFlow never starts its CI or merges it.lineage_undoes_parent: the fix follows up an earlier LavaFlow fix and deletes or changes lines that fix added, which could undo it.lineage_cap: the fix's lineage opened as many pull requests as it may.lineage_held: an earlier pull request in the fix's lineage was held, stopped or closed.recent_regressions: fixes LavaFlow merged in the project recently caused new errors. Other codes name a concern LavaFlow's reviewers raised. New codes may appear.' to 'Why the fix is held.client_reported_commit: the fix is built on a commit Volcano can't tie to a push.path: it changes a path inhuman_review_paths, or deploy or infrastructure configuration Volcano always holds, such asvolcano-config.yaml, Terraform files, a YAML or JSON file that declares a resource, a YAML template that mentionsapiVersionorkind, a file in a Helm chart or Kustomize directory, or, in a repository too large to read in full, any file no other path reason holds.sensitive_path: it changes another path Volcano always holds: authentication or authorization code, Next.js middleware included; secret, key, certificate or cryptography files; a coding agent's instructions or settings, or Git hook configuration; CI configuration; a dependency manifest or lockfile, or apackage.jsonchange to what installs or its install scripts; or runtime, container or other configuration files.label: the pull request has theneeds-human-reviewlabel.no_checks: no CI ran on it.required_check_skipped: a required check was skipped.no_required_checks: the base branch requires no check, so passing checks alone don't vouch for the fix.changes_requested: a reviewer requested changes.repository_requires_approval: the repository requires an approving review.person_commits: someone other than LavaFlow pushed to the fix's branch.rules_bypass: the Volcano GitHub App can bypass a ruleset on the base branch.unchecked_rules: the base branch has a rule LavaFlow doesn't check, such as required signatures. On a fix a person merges it names only rules that kept LavaFlow from starting the fix's CI, such ascode_scanningorworkflows, or that LavaFlow couldn't read them.commit_convention: no title can meet the repository's commit convention.ungated_workflows: the fix opened past workflows that can run it with the repository's secrets before a person approves it, as the project's owner allowed, or LavaFlow couldn't check its workflows, or, when LavaFlow was about to start its CI or add it to a merge queue, a workflow could run it with those secrets before a person approves it or couldn't be read, so LavaFlow takes it no further and never merges it. A fix held for another reason before its CI starts lists it too when that check, run without starting CI, finds such a workflow or can't finish.ci_outside_actions: when LavaFlow was about to start the fix's CI, the repository could run CI, a build or a preview outside GitHub Actions: the root of the fix's tree or its base branch's holds another service's configuration, such as.travis.yml,.circleci/ornetlify.toml, whichpathsnames, another app reported checks or statuses on the base branch, or LavaFlow couldn't read them in full. LavaFlow starts CI only when it finds no sign of CI outside GitHub Actions, so it never starts this fix's CI or merges it.lineage_undoes_parent: the fix follows up an earlier LavaFlow fix and deletes or changes lines that fix added, which could undo it.lineage_cap: the fix's lineage opened as many pull requests as it may.lineage_held: an earlier pull request in the fix's lineage was held, stopped or closed; one a person merges holds it only when closed.recent_regressions: fixes LavaFlow merged in the project recently caused new errors.no_test: the fix changes code the repository tests and adds no test, because testing it needs test infrastructure the repository doesn't have or the change has no effect a test can observe.choices_to_confirm: the fix states behavior it decides beyond stopping the error, listed in the run'schoicesand, on a private repository, under Choices to confirm in the pull request's description, for a person to confirm, and LavaFlow's reviewers didn't all mark each choice as needing no person. It never applies alongsideperson_merges: the person confirms the choices while reviewing the fix.risky_change: the fix adds or removes a line that converts a value, such as withfloat()orparseInt(), in a file that names a rate limit or quota, authentication or authorization, or money, so values such as NaN, Infinity or a negative number could get past a check there;pathsnames the files.review_notes: LavaFlow's reviewers passed the fix, but its review's last round left notes, findings belowmajorthat a later round no longer sends back for revision, such as a decision the fix makes without stating it.person_merges: a person reviews and merges the fix, because the project's autonomy isopen_pr, merging was unavailable when it opened, or its run may only open a pull request; LavaFlow ran the fix's CI once first unless another reason, or the CI start's own checks, stopped it. Other codes name a concern LavaFlow's reviewers raised. New codes may appear.'ci_outside_actions, the entries at the repository's root that another CI or preview service reads, whether or not the fix changes them.""for a path that may contain a credential, holds one of the project's secret values, or is over 4,000 characters.'LavaFlow left this question out because it may contain a credentialwhen it holds one of the project's secret values, a value shaped like a credential, or a pathpathsleaves out, or is over 4,000 characters, and, for a question LavaFlow's reviewers wrote, when it may contain a credential. Every question reads so, LavaFlow's fixed sentences too, on a run whosepull_request_skippedispossible_credential.'review_unresolved: LavaFlow's review did not pass the fix.checks_failed: a check failed.checks_timed_out: checks did not finish in time.blocked_by_rules: the repository's rules hold the merge.not_mergeable: GitHub can't merge the pull request, for example because it conflicts.branch_behind: the base branch requires the fix to be up to date with it, and LavaFlow doesn't update fix branches.removed_from_queue: the fix isn't in the merge queue, and LavaFlow can't tell why, for example because its checks failed there or someone removed it.reads_failed: LavaFlow failed to read the pull request for about an hour while the fix may have been queued, so it took the fix out of the merge queue, when it could still reach it, and stopped, or failed to read the project's settings or repository for about a day while merging was paused.handed_off: someone else changed or took over the pull request.unreadable: GitHub's state could not be read.permission_missing: the Volcano GitHub App, or the project owner's GitHub account, lacks a permission the merge needs.repository_changed: the project now deploys from another repository.settings_changed: the project's settings no longer allow the merge.request_rejected: GitHub refused LavaFlow's request to start the checks on the fix.ci_start_commit_mismatch: GitHub reports a different commit from the one LavaFlow made to start the checks.branch_refused: LavaFlow starts checks only on a LavaFlow branch of an open pull request it opened, never the default or production branch, so it didn't start them on this one.head_unverified: GitHub doesn't report the fix's head as the signed commit LavaFlow pushed, so LavaFlow didn't start its checks.checks_not_started: LavaFlow couldn't give the fix a commit message that runs CI.queue_carries_ci_skip: the repository's merge queue could carry an instruction to skip checks, from the fix's commits or its pull request's title or description, into the base branch.merge_carries_ci_skip: merging would carry an instruction to skip checks into the base branch, for example because the repository allows no squash merge. Each of these seven hands the fix to you for good.manual_deploy: the fix merged and waits for you to deploy it.paused: merging is paused, and the merge waits. LavaFlow takes a queued fix out of the merge queue, so it showswaiting_for_checks, and queues it again when merging resumes.paused_too_long: merging stayed paused for more than 7 days.cancelled: the project is being deleted, so LavaFlow stopped waiting on the merge. New reasons may appear.' to 'Why the merge stopped, or what a waiting merge is paused for. A stopped merge leaves the pull request open for you, and LavaFlow never merges, pushes to, rebases or dequeues it again; unless a reason says otherwise, review the change, then merge or close the pull request yourself.review_unresolved: LavaFlow's review didn't pass the fix; the run'sreviewsays why.checks_failed: a check on the fix failed.checks_timed_out: the checks didn't all finish within 24 hours.blocked_by_rules: a rule of the repository that LavaFlow can't satisfy blocks the merge.not_mergeable: GitHub can't merge the pull request, for example because it conflicts with its base branch; resolve the conflict first.branch_behind: the base branch requires the fix to be up to date with it, and LavaFlow doesn't update fix branches; update the branch first.removed_from_queue: the fix isn't in the merge queue, and LavaFlow can't tell why, for example because its checks failed there or someone removed it.reads_failed: LavaFlow failed to read the pull request for about an hour while the fix may have been queued, so it took the fix out of the merge queue, when it could still reach it, and stopped, or failed to read the project's settings or repository for about a day while merging was paused. For a fix a person merges, which LavaFlow never queues, it means only the latter, with its CI start paused instead of merging.handed_off: someone drafted or closed the pull request, or moved it to another branch, so LavaFlow stopped; nothing to do.unreadable: the pull request has more checks, reviews, labels or commits than LavaFlow reads, so it can't judge the fix.permission_missing: the Volcano GitHub App, or the project owner's GitHub account, lacks a permission the merge needs; grant the App's requested permissions and make sure the owner can push.repository_changed: the project now deploys from another repository.settings_changed: the project's settings no longer let LavaFlow merge, or, for a fix a person merges, start its CI: LavaFlow was turned off,autonomyis no longermerge(no longeropen_prormergefor a fix a person merges), the owner's plan no longer includes LavaFlow, or the project is being deleted.request_rejected: GitHub refused LavaFlow's request to start the checks on the fix.ci_start_commit_mismatch: GitHub reports a different commit from the one LavaFlow made to start the checks.branch_refused: LavaFlow didn't start the fix's checks because the pull request was no longer open, or its branch isn't a LavaFlow branch of a pull request LavaFlow opened; LavaFlow never starts checks on the default or production branch.head_unverified: GitHub doesn't report the fix's head as the signed commit LavaFlow pushed, so LavaFlow didn't start its checks.checks_not_started: LavaFlow couldn't give the fix a commit message that runs CI.queue_carries_ci_skip: the repository's merge queue could carry an instruction to skip checks, from the fix's commits or its pull request's title or description, into the base branch; reword LavaFlow's commit to drop it and force-push, and take any such instruction out of the title and description, before you queue the fix.merge_carries_ci_skip: merging would carry an instruction to skip checks into the base branch, for example because the repository allows no squash merge; reword LavaFlow's commit to drop it and force-push before you merge. Afterrequest_rejected,ci_start_commit_mismatchorchecks_not_started, the fix's CI didn't start: push a commit to its branch to run it.paused_too_long: merging stayed paused for more than 7 days, or, for a fix a person merges, LavaFlow's CI start for such fixes did.cancelled: the project is being deleted, so LavaFlow stopped waiting on the merge; nothing to do.manual_deploy: the fix merged and waits for you to deploy it.paused: merging is paused, and the merge waits. LavaFlow takes a queued fix out of the merge queue, so it showswaiting_for_checks, and queues it again when merging resumes. For a fix a person merges, LavaFlow's CI start for such fixes is paused instead, whatever merging does, and LavaFlow never takes it out of a queue. New reasons may appear.'waiting_for_checks: LavaFlow waits for the checks on the fix's commit.queued: the fix is in the repository's merge queue.merged: the pull request merged.held: something inhold_reasonsneeds a person. LavaFlow commented on the pull request once and never merges, pushes to, rebases or dequeues it again; review it and merge it yourself if you want it.stopped: LavaFlow left the pull request open for you, forreason.' to 'waiting_for_checks: LavaFlow waits for the checks on the fix's commit.queued: the fix is in the repository's merge queue.merged: the pull request merged.held: something inhold_reasonsneeds a person. LavaFlow commented on the pull request once and never merges, pushes to, rebases or dequeues it again; review it and merge it yourself if you want it. A fix a person merges (its autonomy isopen_pr, merging was unavailable when it opened, or its run may only open a pull request) is alwaysheldforperson_mergesonce LavaFlow has started its CI, or found it may not.stopped: LavaFlow left the pull request open for you, forreason.'queued,diagnosing,fixing,reviewing,waiting_for_checksandmerge_queued, in that order, and a run takes as many as its autonomy when it was queued allows: 2 fordiagnose_only, 4 foropen_pr(opening the pull request ends it), 6 formerge(the merge ends it).' to 'How far an active run has come. The steps arequeued,diagnosing,fixing,reviewing,waiting_for_checksandmerge_queued, in that order, and a run takes as many as its autonomy when it was queued allows: 2 fordiagnose_only, 4 foropen_pr(opening the pull request ends it, unless LavaFlow starts the fix's CI once, when it showswaiting_for_checksas step 5 until LavaFlow has), 6 formerge(the merge ends it).'Report truncated; see the source commit for the complete contract diff.
Validation