Repository navigation
Conversation
04d66d1 to
b8d922a
Compare
ee0bdba to
eb217d3
Compare
bc4afe5 to
7b3fd89
Compare
| 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
| whose sign-in is live, or a platform token with an expiry. The owner's | ||
| GitHub account must also be able to push to the project's repository. | ||
| A project access token, MCP, a platform token that never expires, a | ||
| sign-in that ended, an owner who can't push, and a project with no | ||
| repository get `403` with code `person_required`, and nothing is | ||
| saved. Turning LavaFlow, `allow_ungated_workflows` or `code_quality` | ||
| off, and turning `skill_learning` down or off, needs no check. | ||
| 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 |
There was a problem hiding this comment.
⚪ P3: Guide omits the new merge prerequisites: an App reinstall resets merge, and the base branch must require a status check
The contract now says two new things:
- Reaching the repository through another GitHub App installation, including after a reinstall of the App, changes
autonomyfrommergetoopen_pr. - LavaFlow merges only into a base branch that requires at least one status check (line 32290).
docs/lavaflow.md:205-224 and MergeDisclosure mention only connecting another repository. Owners can lose merge, or see every fix held with no_required_checks, without knowing why.
Found by claude-opus-5-5
| @@ -30939,7 +32180,9 @@ components: | |||
| logged with `console.error(err)` or Python's `logger.exception()`. | |||
| `false` for an error logged any other way, such as a structured log | |||
| line, a logger's error line, or a printed traceback, and for every | |||
| `code_quality` issue. Once `true`, it stays `true`. | |||
| `code_quality` issue. `true` for every `build` issue: a failed build | |||
There was a problem hiding this comment.
⚪ P3: Failed builds now count as exceptions that start runs on their own, but the help and the guide say otherwise
exception is now true for every build issue, so failed deploy builds start LavaFlow runs on their own.
The runs start help (internal/cmd/lavaflow/runs_start.go:25-27) and docs/lavaflow.md:341-342 still say runs start on their own "only for issues that hold an exception your code threw or logged".
Found by claude-opus-5-5
| @@ -15832,6 +16367,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.
⚪ P3: New variables 409 stops volcano cloud deploy before it reaches the function step
internal/cmd/deploy/plan.go:139-146 runs the variables step before functions, and deploy.go:140-141 stops at the first error. With an env file that changes a function a promoted preview serves, the new 409 aborts the whole deploy. The deploy never reaches the function step that would clear the condition.
The resume hint then tells the user to run variables deploy again, which fails the same way.
Fix: add specific recovery guidance, or a preflight check.
Found by claude-opus-5-5
| @@ -30939,7 +32012,9 @@ components: | |||
| logged with `console.error(err)` or Python's `logger.exception()`. | |||
| `false` for an error logged any other way, such as a structured log | |||
| line, a logger's error line, or a printed traceback, and for every | |||
| `code_quality` issue. Once `true`, it stays `true`. | |||
| `code_quality` issue. `true` for every `build` issue: a failed build | |||
There was a problem hiding this comment.
⚪ P3: Include failed builds in automatic-run guidance
Build issues now have exception: true, making them eligible for automatic LavaFlow runs. The runs start help in internal/cmd/lavaflow/runs_start.go:25 and docs/lavaflow.md:341 still describe automatic runs only for exceptions thrown or logged by application code. Include failed builds in that explanation.
Found by gpt-6.1-sol
| @@ -9397,11 +10251,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 | |||
| with `exception: true` and an `event_count` of at least 2, last seen in | |||
There was a problem hiding this comment.
🟡 P2: Turning LavaFlow on now starts runs on up to 5 existing issues, but enable and the guide don't say so
The PATCH settings description now says that turning LavaFlow on, from off, "also starts runs for up to 5 open issues with exception: true…" when the owner saves it with a live volcano login token or an expiring platform token. That is exactly what volcano cloud lavaflow enable sends.
Neither the enable help and disclosure (internal/cmd/lavaflow/enable.go:35-44, internal/lavaflow/lavaflow.go) nor the guide's "Turn it on" section (docs/lavaflow.md:90-115) mentions this. docs/lavaflow.md:342-344 still tells users to start runs themselves for issues recorded before LavaFlow was turned on.
A user who confirms enable doesn't learn that runs, and possibly pull requests, start right away. Update the disclosure and the guide.
Found by claude-opus-5-5
| 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: Guide omits the new automatic-merge requirements
The settings contract adds two rules:
- LavaFlow "merges only into a base branch that requires at least one status check, and holds every fix with
no_required_checkson any other". autonomydrops frommergetoopen_prwhen the project "reaches its repository through another Volcano GitHub App installation… Reconnecting after a reinstall of the App counts as another installation."
docs/lavaflow.md:186-224 ("Merge fixes") mentions neither. Lines 216-219 name only connecting another repository as resetting merge.
Users who turn on merge against a branch without required checks, or who reinstall the App, will see every fix held, or autonomy silently back at open_pr, with no documented reason. Update the guide.
Found by claude-opus-5-5
| - FunctionServingActivationKindPromotion | ||
| - FunctionServingActivationKindRollback | ||
| - FunctionServingActivationKindDeploy | ||
| description: '`deploy`: a successful deployment of the function cleared the preview pointers.' |
There was a problem hiding this comment.
⚪ P3: A plain function deploy now silently takes traffic off a promoted preview
The contract now says a successful function deployment "cleared the preview pointers", so volcano cloud functions deploy, and step 3 of volcano cloud deploy, return traffic to the function's own build.
Frontends behave the opposite way: they refuse with frontend_served_by_candidate, as docs/frontends.md:287-288 documents. The CLI neither warns about this nor mentions it in docs/functions.md, so someone who promoted a preview in the dashboard can undo it unknowingly.
Found by claude-opus-5-5
| @@ -31363,6 +32442,8 @@ components: | |||
| description: One entry per UTC day, oldest first, zeros included. | |||
| items: | |||
| $ref: '#/components/schemas/LavaflowDayCounts' | |||
| outcomes: | |||
There was a problem hiding this comment.
⚪ P3: Guide says merges aren't counted, but stats --json now includes merge outcomes
LavaflowStats gains outcomes (LavaflowOutcomes), which stats --json now outputs because the CLI re-encodes the regenerated struct. docs/lavaflow.md:315 still says "Merges aren't counted".
Relatedly, a run's title (line 32686) can now be null when it may contain a credential, but docs/lavaflow.md:380-382 says - appears only until LavaFlow has a title.
Found by claude-opus-5-5
| GitHub account must also be able to push to the project's repository. | ||
| A project access token, MCP, a platform token that never expires, a | ||
| sign-in that ended, an owner who can't push, and a project with no | ||
| repository get `403` with code `person_required`, and nothing is | ||
| saved. Turning LavaFlow, `allow_ungated_workflows` or `code_quality` | ||
| off, and turning `skill_learning` down or off, needs no check. | ||
| 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 |
There was a problem hiding this comment.
🟡 P2: Guide doesn't say a GitHub App reinstall drops merge to open_pr
The settings contract now says autonomy drops from merge to open_pr when the project reaches its repository through another Volcano GitHub App installation, and that reconnecting after a reinstall counts as another installation. docs/lavaflow.md:216-219 names only connecting another repository as resetting merge. Owners who reinstall the App will find autonomy back at open_pr with no documented reason. Add this trigger, and the need to turn merge on again, to the guide.
Found by claude-opus-5-5
| - FunctionServingActivationKindPromotion | ||
| - FunctionServingActivationKindRollback | ||
| - FunctionServingActivationKindDeploy | ||
| description: '`deploy`: a successful deployment of the function cleared the preview pointers.' |
There was a problem hiding this comment.
🟡 P2: Document that a function deployment replaces the promoted preview
A successful function deployment now clears the preview pointers and returns traffic to the function's own build. This affects functions deploy and the function step of whole-project deploys, but docs/functions.md does not explain it. Document the traffic switch and its effect on preview rollback state alongside deployment behavior.
Found by gpt-6.1-sol
| @@ -31363,6 +32444,8 @@ components: | |||
| description: One entry per UTC day, oldest first, zeros included. | |||
| items: | |||
| $ref: '#/components/schemas/LavaflowDayCounts' | |||
| outcomes: | |||
There was a problem hiding this comment.
⚪ P3: Document the separate outcome counts in stats JSON
stats --json now includes the optional outcomes object through the regenerated struct, but docs/lavaflow.md still broadly says merges aren't counted. Distinguish activity counts from outcome counts and explain unavailable coverage and null values.
Found by gpt-6.1-sol
| @@ -31602,7 +32688,11 @@ components: | |||
| title: | |||
| type: string | |||
| nullable: true | |||
| description: 'Names the problem the run worked on, in at most 80 characters: its diagnosis'' title, else the title of the fix it proposed, else the first line or sentence of its diagnosis'' summary. Null while none is known.' | |||
| description: 'Names the problem the run worked on, in at most 80 characters: its diagnosis'' title, else the title of the fix it proposed, else the first line or sentence of its diagnosis'' summary. A sentence too long for a title ends at its last clause that fits, or, with none, is cut at a word and ends with `…`. Null while none is known, and when it or the text it comes from may contain a credential or hold one of the project''s secret values.' | |||
There was a problem hiding this comment.
⚪ P3: Explain filtered titles in the run-list guide
The updated title filtering can return null after a diagnosis or fix exists. docs/lavaflow.md says the list shows - only until LavaFlow has a title, which no longer explains completed runs with filtered titles. Mention this additional meaning.
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.
⚪ P3: Merge guide misses new conditions that drop or hold merging (App reinstall, base branch without required checks)
The contract now says two things the guide doesn't:
- Reaching the repository through another Volcano GitHub App installation, including after a reinstall, drops
mergeback toopen_pr. - LavaFlow merges only into a base branch that requires at least one status check, and otherwise holds every fix with
no_required_checks(lines 10293, 32124).
docs/lavaflow.md:186-224 names only a change of repository, and doesn't mention the required-check condition. Users may not understand why autonomy changed or why every fix is held.
Found by claude-opus-5-5
| paths: | ||
| type: array | ||
| items: | ||
| type: string | ||
| description: The changed paths that matched, for a path code. | ||
| description: The changed paths that matched, for a path code. For `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 holds one of the project's secret values or a secret gitleaks detects. |
There was a problem hiding this comment.
⚪ P3: Filter empty hold-reason paths before formatting
A hold reason's paths now uses "" for a path that holds a secret. internal/output/lavaflow.go:609-611 joins paths as given, so show prints () or (, a.go). Skip empty entries, or print a placeholder such as "a withheld path".
Found by claude-opus-5-5
| @@ -15841,6 +16369,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.
⚪ P3: Add recovery guidance for preview-blocked whole-project deploys
With a promoted function preview and an affected env-file change, the variables step in internal/cmd/deploy/plan.go fails before the function deployment step. runDeploy then stops, and its resume hint repeats the variables command. Explain that the function must first be deployed or rolled back, or detect this prerequisite before starting.
Found by gpt-6.1-sol
| paths: | ||
| type: array | ||
| items: | ||
| type: string | ||
| description: The changed paths that matched, for a path code. | ||
| description: The changed paths that matched, for a path code. For `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 holds one of the project's secret values or a secret gitleaks detects. |
There was a problem hiding this comment.
⚪ P3: Filter empty hold-reason paths before formatting
The contract now permits empty entries in hold-reason paths. lavaflowMergeLines and cleanList in internal/output/lavaflow.go render these as empty parentheses or stray separators. Remove empty display paths before deciding whether to append the path suffix.
Found by gpt-6.1-sol
| paths: | ||
| type: array | ||
| items: | ||
| type: string | ||
| description: The changed paths that matched, for a path code. | ||
| description: The changed paths that matched, for a path code. For `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 holds a control character, one of the project's secret values or a secret gitleaks detects. |
There was a problem hiding this comment.
⚪ P3: Hold-reason paths can now hold ""; filter empty paths before formatting
paths entries now read "" when hidden. lavaflowMergeLines (internal/output/lavaflow.go:609-611) joins them unfiltered, so the output can read (, src/x.ts) or (). Skip empty entries.
Found by claude-opus-5-5
| paths: | ||
| type: array | ||
| items: | ||
| type: string | ||
| description: The changed paths that matched, for a path code. | ||
| description: The changed paths that matched, for a path code. For `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 holds a control character, one of the project's secret values or a secret gitleaks detects. |
There was a problem hiding this comment.
⚪ P3: Filter empty hold-reason paths before formatting
The contract now permits empty entries in hold_reasons.paths. lavaflowMergeLines in internal/output/lavaflow.go checks only the slice length before formatting, producing () or empty comma-separated entries. Filter empty paths before deciding whether to append the parenthesized list.
Found by gpt-6.1-sol
| @@ -31756,21 +32925,51 @@ components: | |||
| - message | |||
| LavaflowRepositoryChecks: | |||
| type: object | |||
| description: Whether LavaFlow ran the repository's own checks, such as its tests, on a fix itself, before it opened a pull request or held the fix. CI that runs on the pull request afterwards is the repository's own. | |||
| description: Whether LavaFlow ran the repository's own checks, such as its tests, on a fix itself, before it opened a pull request or held the fix, and what they found. When LavaFlow ran them more than once, this is the last time the run's last attempt ran them; `not_run` when that attempt didn't, or while the run is queued or running. CI that runs on the pull request afterwards is the repository's own. | |||
There was a problem hiding this comment.
⚪ P3: Repository checks can now pass or fail, but show's fallback and comment still assume they never run
LavaflowRepositoryChecks now has passed, failed and no_checks_found statuses and a commands list. lavaflowRepositoryChecks (internal/output/lavaflow.go:290-298) still says in its comment that "the API has no status for checks that ran yet". When message is empty it falls back to "The repository's tests didn't run.", whatever the status. It also never shows the failing command or its output. Base the fallback on status, and list failed commands.
Found by claude-opus-5-5
| @@ -13390,6 +13912,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.
⚪ P3: Whole-project deploy recovery omits the preview prerequisite
With a promoted function preview and an affected env-file change, the variables step in internal/cmd/deploy/plan.go receives the new 409 before reaching function deployment. The fallback commands repeat the variables operation first. Add specific recovery guidance explaining that the function must first be deployed separately or rolled back.
Found by gpt-6.1-sol
| settings off: a body with `project_id` and one or both of | ||
| `"code_quality": {"enabled": false}` and `"skill_learning": "off"`, | ||
| each field spelled exactly and sent once, and nothing else. Any other | ||
| Turning LavaFlow on, from off, also starts runs for up to 5 open issues |
There was a problem hiding this comment.
⚪ P3: The required companion documentation PR is not linked
The supplied PR description and comments contain no companion documentation PR link. Root AGENTS.md requires linked updates in Kong/volcano-docs/content/cli for user-facing changes. Link updates covering LavaFlow execution changes and function-preview effects on deployment, variables, and source export.
Found by gpt-6.1-sol
AI review: re-assess the approachPR author, the AI review has found P0-P2 problems in 14 rounds in a row, through c535cab, 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, so the AI review moved this PR back to draft, where it reviews no pushes, until 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 14 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 |
Summary
API change report
Public API
New Endpoints: 18
GET /connectors
POST /connectors
DELETE /connectors/{connector_id}
GET /connectors/{connector_id}
POST /issues
GET /lavaflow/connector-bindings
POST /lavaflow/connector-bindings
DELETE /lavaflow/connector-bindings/{binding_id}
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
POST /realtime/v1/publish
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: 47
POST /auth/signup
email domain is not in
allowed_email_domains. The internalanonymous.volcano.internalandvolcano.localdomains are reservedfor the anonymous and Builder debug accounts Volcano creates, and are
refused whatever the project allows.
' to 'Forbidden - Signups disabled, anon key lacks signup permission, or the
email domain is not in
allowed_email_domains. The internalanonymous.volcano.internalandvolcano.localdomains are reservedfor anonymous accounts and for the debug accounts an earlier Builder
created (Volcano no longer creates them), and are refused whatever the
project allows.
'
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 wayissuesissues.createPOST /issues; written issues already recorded read and update either waylavaflowGET /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.migrationssharesai_gatewayai.invokewithPOST /projects/{id}/service-keys, and minting the first run token of a run; reading, regenerating and deleting existing keys, and reading, extending, revoking and minting again for a run already minted for, work either wayrealtime.http_publishPOST /realtime/v1/publish; while Realtime is paused it stays available, and the route answers503feature_pausedA 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.
After these, the list names each first-party app Volcano runs in this
environment, such as
builder, by its own ID. Such an app is availablewhile it accepts new work. When only the app's own release is off, work
it already accepted continues; when first-party app mounts are off, its
mount refuses every request with 404
feature_unavailable.'
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 /functions/{functionId}/invoke
visibilitydecides which credentialsmay call it, and the function does not run for any other. A
privatefunction answers every credential but a service key exactly as a
missing one, with 404, so its name and id cannot be discovered; an anon
key on an
authenticatedfunction gets 403. An SDK calling by nameresolves it first through
GET /functions/resolve, which answers thatanon key with 404 instead.
With Service Key (admin/background operations, every visibility):
With Auth User Token (user-facing,
authenticatedorpublicfunctions):__volcano_authcontext:With Anon Key (
publicfunctions only):functions.invokevisibility: public__volcano_auth)Reserved payload keys: the top-level
__volcano_authand__volcano_httpkeys are reserved. Volcano removes caller-suppliedvalues for both before the function runs; only an auth user token adds
a server-built
__volcano_auth, and only HTTP-mode ingress sets__volcano_http: true.Transport and CORS:
POST
{payload: ...}contract, including for functions whose DNS ingress isconfigured in HTTP mode.
invoke_url. It is on adifferent domain from this API, so it cannot be derived from the API host.
/. HTTP-mode DNS ingress accepts GET,HEAD, POST, PUT, PATCH, and DELETE at
/and nested paths.POST, OPTIONS. HTTP-mode DNSpreflight advertises
GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS.http_auth_mode: noneapplies only to public HTTP-mode DNS ingress; thisdirect operation always requires a Volcano credential.
Durable functions are not invocable here. A durable function's id
answers 404, whatever its visibility, because a synchronous call would
run it with no execution record, no idempotency and no concurrency
accounting. Start one with
POST /durable-functions/{functionId}/executions.' to 'Invoke a function. The function's
visibilitydecides which credentialsmay call it, and the function does not run for any other. A
privatefunction answers every credential but a service key exactly as a
missing one, with 404, so its name and id cannot be discovered; an anon
key on an
authenticatedfunction gets 403. An SDK calling by nameresolves it first through
GET /functions/resolve, which answers thatanon key with 404 instead.
With Service Key (admin/background operations, every visibility):
With Auth User Token (user-facing,
authenticatedorpublicfunctions):__volcano_authcontext:With Anon Key (
publicfunctions only):functions.invokevisibility: public__volcano_auth)Reserved payload keys: the top-level
__volcano_auth,__volcano_httpand__volcano_mountkeys are reserved. Volcanoremoves caller-supplied values for all three before the function runs;
only an auth user token adds a server-built
__volcano_auth, and onlyHTTP-mode ingress sets
__volcano_http: true.__volcano_mountis setonly by Volcano's first-party app mounts.
Transport and CORS:
POST
{payload: ...}contract, including for functions whose DNS ingress isconfigured in HTTP mode.
invoke_url. It is on adifferent domain from this API, so it cannot be derived from the API host.
/. HTTP-mode DNS ingress accepts GET,HEAD, POST, PUT, PATCH, and DELETE at
/and nested paths.POST, OPTIONS. HTTP-mode DNSpreflight advertises
GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS.http_auth_mode: noneapplies only to public HTTP-mode DNS ingress; thisdirect operation always requires a Volcano credential.
Durable functions are not invocable here. A durable function's id
answers 404, whatever its visibility, because a synchronous call would
run it with no execution record, no idempotency and no concurrency
accounting. Start one with
POST /durable-functions/{functionId}/executions.'
If invoked with auth user token, Volcano automatically injects
__volcano_authcontext:The top-level
__volcano_authand__volcano_httpkeys are reserved;Volcano removes caller-supplied values for both.
' to 'Payload to send to the function.
If invoked with auth user token, Volcano automatically injects
__volcano_authcontext:The top-level
__volcano_auth,__volcano_httpand__volcano_mountkeys are reserved; Volcano removes caller-supplied values for all three.
'
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.'runtimefor errors your code logged,code_qualityfor a LavaFlow Code Quality finding in code a deploy changed,buildfor deploys of one function or frontend that failed in its own build step, orreportfor a problem reported for the project, such as through Slack. Acode_qualityissue'serror_typeis the finding's rule, itsculpritthe enclosing function and file, and itsevent_countthe scans that found it. Abuildissue'stitleis the build's first error, itserror_typethe tool's code, such asTS2322ornpm ETARGET, itsculpritthe error'sfile:line, itsevent_countthe failed deploys, and itslast_deployment_idthe latest of them. A later deploy that builds resolves it. Deploys Volcano failed, such as a timeout or a refused build, never make one.' to 'Where the issue came from:runtimefor errors your code logged,code_qualityfor a LavaFlow Code Quality finding in code a deploy changed,buildfor deploys of one function or frontend that failed in its own build step,reportfor a problem reported for the project, such as through Slack, orrequestfor an issue a person wrote withPOST /issues. A later deploy that builds resolves abuildissue. Deploys Volcano failed, such as a timeout or a refused build, never make one.'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 holds a control character, one of the project's secret values or a secret gitleaks detects.'Hidden: this field matched a secret.when it holds one of the project's secret values or a secret gitleaks detects, or when one of itspathsreads"". Every question readReport truncated; see the source commit for the complete contract diff.
Validation