Qwen Validation Debugger Strategy and Implementation Record
Date created: June 30, 2026
Purpose
This document records the reason for creating tools/qwen-validation-debugger and its actual operation flow.
On June 28, I manually created Godot code chunks and JSONL with Qwen, and directly concatenated prompt + code chunk + JSONL to see how yes/no turned out. This method was good for getting a direction, but as the number of items increased, the cost of copying by hand, remembering the generation criteria, and comparing results became too high.
Therefore, on June 30 I turned this process into a separate web tool. The goal of this tool is not final model training, but to visually trace the relationship between the test code generated by Qwen and the JSONL, and to quickly discover incorrect yes/no judgments.
Current Screen
The current tool runs at http://localhost:8520/.

The screen is divided into three main areas.
- Left: checklist of 50 Godot test items
- Center/upper right: AI label and Godot code generation result for the selected item
- Bottom:
docs_chunks,api_mapping,label_prototypesJSONL generation/validation slots
Why a Separate Tool Was Needed
Originally I requested the following directly from the Qwen chatbot.
Create a Godot code chunk,
and generate a correct JSONL and an incorrect JSONL that conform to the `docs_chunks/api_mapping/label_prototypes` format.
We will then check that when the `SOURCE_CODE` and JSONL are combined, the yes/no result is correct.However, when doing manual testing, there were more axes to verify than expected.
| Axis | Items to verify |
|---|---|
| Test items | _ready(), _process(delta), movement, collision, UI, save/load, etc. (50 items) |
| Syntax scope | Whether it is common to Godot 3/4, or needs to be separated per version |
| Code basis | One common code or Godot 3 code + Godot 4 code |
| Table | docs_chunks, api_mapping, label_prototypes |
| JSONL nature | Explanation basis, other code description, needs conversion, already applied, common/unnecessary, irrelevant conversion |
| Validation target | Whether to validate in the same code that generated the JSONL, or in the opposite version code |
If it is common syntax, there are 6 slots.
Common Code
docs_chunks Description basis / Other code description
api_mapping Common/unnecessary / Irrelevant conversion
label_prototypes Common/unnecessary / Irrelevant conversionIf it is version-separated syntax, there are 12 slots.
Godot 3 Code
docs_chunks Explanation basis / other code description
api_mapping Conversion needed / irrelevant conversion
label_prototypes Conversion needed / irrelevant conversion
Godot 4 Code
docs_chunks Explanation basis / other code description
api_mapping Already applied / irrelevant conversion
label_prototypes Already applied / irrelevant conversionIf I keep making this by hand, more time is spent on copying/pasting and organizing results than on the test itself. Therefore, I bundled items, code, JSONL, and verification results on a single screen with a GUI.
Overall Flow
flowchart TD
A["50 test items"] --> B["Select item"]
B --> C["Qwen labeling"]
C --> D{"Is it common syntax?"}
D -->|"common"| E["Generate common code"]
D -->|"separate"| F["Generate Godot 3 code"]
D -->|"separate"| G["Generate Godot 4 code"]
E --> H["6 JSONL slots"]
F --> I["6 JSONL for Godot 3"]
G --> J["6 JSONL for Godot 4"]
I --> K["Validate Godot 3 code"]
I --> L["Validate Godot 4 code"]
J --> K
J --> L
H --> M["Validate common code"]The tool calls Qwen in three roles.
| Stage | Task Assigned to Qwen | Stored As |
|---|---|---|
| Labeling | Determine whether the test item is common syntax or version‑specific | classification |
| Code Generation | Generate common code or Godot 3/4 code | codes |
| JSONL Generation | Create JSONL that matches the table and slot characteristics | slots[].jsonlText |
| Verification | Decide whether SOURCE_CODE + JSONL is a direct justification with Yes/No |
slots[].verifications |
Labeling Stage
When an item is clicked, Qwen first decides whether it is common syntax or version‑specific.

For example, _process(delta) is used as a frame‑update function in both Godot 3 and Godot 4, so it can be considered common syntax.

Conversely, apply player movement speed and acceleration may have different physics bodies and move_and_slide() call patterns across versions, so separate Godot 3 and Godot 4 code slots are created.

JSONL Slot Design
Initially, slots were divided simply into correct JSONL and incorrect JSONL. That criterion proved too coarse.
docs_chunks are explanatory evidence. Therefore, if the description matches the code directly, the answer is Yes; if the document explains a different code behavior, the answer is No.
However, api_mapping and label_prototypes are not just explanations; they are conversion evidence when moving from Godot 3 to Godot 4. Thus, if a code already written for Godot 4 has api_mapping or label_prototypes marked Yes, it can read as “you’re already on Godot 4, why migrate again?”.
So the slot names were changed as follows.
| Table | Code Basis | Slot Meaning | Expected Generation Criterion |
|---|---|---|---|
docs_chunks |
Common / Godot 3 / Godot 4 | Explanation evidence JSONL | Yes |
docs_chunks |
Common / Godot 3 / Godot 4 | Explanation of other code JSONL | No |
api_mapping |
Godot 3 | Conversion‑required JSONL | Yes |
api_mapping |
Godot 4 | Already applied JSONL | No |
api_mapping |
Common | Common / unnecessary JSONL | No |
api_mapping |
All code | Irrelevant conversion JSONL | No |
label_prototypes |
Godot 3 | Conversion‑required JSONL | Yes |
label_prototypes |
Godot 4 | Already applied JSONL | No |
label_prototypes |
Common | Common / unnecessary JSONL | No |
label_prototypes |
All code | Irrelevant conversion JSONL | No |
Thanks to this criterion, Yes/No is no longer a simple relevance judgment but a decision aligned with the purpose of each table.
Separation of Generation‑Basis Code and Verification‑Target Code
The most important change today is at this point.
In the initial implementation, a slot was verified only against its own code.
Godot 3 code generated JSONL
-> Validate only in Godot 3 code
Godot 4 code generated JSONL
-> Validate only in Godot 4 codeBut the actual verification needed is broader than this.
When a JSONL created with Godot 3 code is attached to Godot 4 code, it should still return No. Conversely, we need to see what result occurs when a JSONL created with Godot 4 code is attached to Godot 3 code. That way we can detect the issue where mixed source/target strings incorrectly produce Yes.
So the single button was split into two.

Now each slot in the version‑separation section can perform all of the following checks.
Godot 3 code generated JSONL
-> Verify Godot 3 code
-> Verify Godot 4 code
Godot 4 code generated JSONL
-> Verify Godot 3 code
-> Verify Godot 4 codeInside the tool, it is separated as follows.
| Value | Meaning |
|---|---|
slot.versionKey |
Code version used when creating the JSONL |
sourceVersionKey |
JSONL generation reference version passed to the verification API |
targetVersionKey |
Code version actually used for verification |
slot.verifications.godot3 |
Result of attaching this JSONL to Godot 3 code for verification |
slot.verifications.godot4 |
Result of attaching this JSONL to Godot 4 code for verification |
Expected Response Calculation Criteria
The verification result is still received from Qwen as “yes” or “no”. However, the expected response is now calculated by looking at the table + JSONL generation reference version + verification target version + slot nature, rather than just a single slot.
| Case | Expected Response |
|---|---|
Verify docs_chunks explanation source JSONL with the same version code |
yes |
Verify docs_chunks explanation source JSONL with the opposite version code |
no |
docs_chunks other code explanation JSONL |
no |
Verify JSONL that requires api_mapping/label_prototypes conversion based on Godot 3 in Godot 3 code |
yes |
Verify JSONL that requires api_mapping/label_prototypes conversion based on Godot 3 in Godot 4 code |
no |
JSONL where api_mapping/label_prototypes already applied based on Godot 4 |
no |
Common code based api_mapping/label_prototypes common/unnecessary JSONL |
no |
| Irrelevant conversion JSONL | no |
This criterion is more of a debugging guideline to see where Qwen’s source matching wavers at this stage, rather than a final evaluation standard.
Changes to the Verification Prompt
The verification prompt now includes two pieces of version information.
JSONL_GENERATED_FROM_CODE_VERSION:
godot3
VERIFY_TARGET_CODE_VERSION:
godot4The reason for inserting it this way is to prevent Qwen from simply answering “yes” just because the target_api in the JSONL matches the current code.
In api_mapping and label_prototypes, the following criteria are important.
source_api,source_pattern,input_pattern,before_code,required_when_seen_in_codemust be directly present in the current code for a yes.- If only the
target_api,after_code, or the recommended target form matches the current code, it is already applied, so no. - When it indicates that no transformation is needed, such as
signature_stable,no_change,common, the answer is no. - Even if migration JSONL is attached to Godot 4 code or common‑syntax code, if no additional transformation is required, the answer is no.
Record of 50‑Item Test
1/50 Initialization of _ready() Function and Viewport Size Setting
On July 3, the first of the 50 test items was verified. This item was labeled as common code, and the reference code was as follows.
func _ready():
var vp_size = get_viewport().get_visible_rect().size
position = Vector2(vp_size.x / 2, vp_size.y / 2)Initially, the incorrect slot of docs_chunks was called “Irrelevant Description JSONL.” However, after actual testing, this name proved inaccurate. This slot is not meant to create deliberately odd or incorrect JSONL, but rather to insert other official documentation descriptions that the Retriever might fetch as search candidates, to see whether Qwen filters them out during final verification.
Therefore, the meaning of this slot was clarified as “Other Code Description JSONL.”
In this test, the problematic JSONL described Viewport.get_visible_rect and _ready(), but the actual content was about other code behaviors such as safe area, UI scaling, $Label, and $Button.rect_position. Since the SOURCE_CODE reads the viewport size and moves the current node’s position to the center of the screen, overlapping APIs should not be considered direct evidence.
The expected answer was “No,” but Qwen returned “Yes.” The cause was that the verification prompt interpreted “exact match with the actual string/API call” too broadly, accepting documentation that merely contains the same API as direct evidence.
Changes:
- Renamed the
docs_chunksincorrect slot from “Irrelevant Description JSONL” to “Other Code Description JSONL.” - Defined this slot in the JSONL generation prompt as “an official‑documentation‑style JSONL that may share some APIs/topics with the search candidate but actually describes a different code behavior.”
- Strengthened the verification prompt so that the
Yescriterion fordocs_chunksis not simple API string matching but whether the core purpose, target object, and final action/result of the code directly match. - Stated that even if the same API or method appears, if the JSONL describes a different purpose, target object, or result, it is only a search candidate and not direct evidence, thus the answer should be “No.”
- Adjusted the front‑UI slot label and preview text to follow the same criteria.
- Added a test in
core.test.jsto ensure this criterion is preserved in the prompts.
2/50 _process(delta) Frame‑by‑Frame Update Loop
On July 3, the second item was verified. This item was labeled by Qwen as common code.
Labeling summary:
syntax_scope: common
label: _process(delta) frame-by-frame update
reason: In both Godot 3 and 4, the signature and calling method of the _process(delta) function are the same, and there is no syntactic difference when writing frame‑based logic.The verification results matched the expected responses for all 6 slots.
| Item | Value |
|---|---|
| Number of slots | 6 |
| Passed | 6 |
| Mismatches | 0 |
This entry records a case where, in the common grammar, docs_chunks yields yes as an explanatory basis, while api_mapping and label_prototypes result in no due to common/unnecessary or irrelevant transformations, and the flow operates correctly.
3/50 Player Movement Input Handling
Item 3 was labeled by Qwen as version separation code.
Labeling summary:
syntax_scope: separate
label: Player Movement Input Handling
reason: Although the input checking itself is similar, due to the introduction of Input.get_vector() in Godot 4 and the signature change of CharacterBody2D's move_and_slide(), the code structure needs to be separated.
godot3_focus: Inherits KinematicBody2D, manually calculates velocity.x/y and calls move_and_slide(up_direction)
godot4_focus: Inherits CharacterBody2D, simplifies diagonal movement with Input.get_vector() and applies removal of parameters in move_and_slide()Verification Result:
| Item | Value |
|---|---|
| Number of Slots | 12 |
| Number of Verifications | 24 |
| Passed | 20 |
| Mismatched | 4 |
Mismatches:
| Slot | Verification Target | Expected | Response | Observation |
|---|---|---|---|---|
godot3:api_mapping:positive |
Godot 4 code | No | Yes | The Godot 3‑based conversion JSONL was attached to Godot 4 code, yet the response was Yes. If it is already in Godot 4 form, even with related conversion notes, it is not a target for migration now. |
godot3:label_prototypes:positive |
Godot 4 code | No | Yes | label_prototypes · conversion needed JSONL should be Yes only when the current code uses the pre‑conversion usage pattern. If it yields Yes when attached to Godot 4 code, it implies “already Godot 4, migrate again,” which is problematic. |
godot3:label_prototypes:negative |
Godot 4 code | No | Yes | An irrelevant conversion JSONL should be No regardless of whether the code is Godot 4 or Godot 3, as long as the conversion is not actually applicable to that code. |
godot4:label_prototypes:negative |
Godot 3 code | No | Yes | An irrelevant conversion JSONL created for Godot 4 produced Yes when attached to Godot 3 code. This is also an incorrect result. The verification question should be “Should this conversion be applied to this SOURCE_CODE?” rather than “How related is it?” |
Prompt Observation:
In hybrid search, it is natural for a code chunk and a similar JSONL candidate to appear together. Therefore, the verification prompt must judge whether the search candidate is a basis for actually applying it to the current SOURCE_CODE. The three mismatches above stem from the question not being fixed enough, causing Qwen to interpret api_mapping and label_prototypes as broad relevance matches rather than migration‑necessity checks.
Specifically, issue 3 revealed the following problems:
- If a function name like
move_and_slide, which can appear in both Godot 3 and Godot 4, matches alone, Qwen may lean towardYes. - When a Godot 3‑based JSONL is attached to Godot 4 code, if the code is already post‑conversion,
label_prototypes · conversion neededmust not returnYes. - When a Godot 4‑based irrelevant conversion JSONL is attached to Godot 3 code, it must not return
Yesif the conversion is not actually applicable to the current code. - The key is not the JSONL generation method but the verification question. It must determine whether the current code is pre‑conversion, post‑conversion, or an entirely different transformation.
Thus, the prompt criteria were revised as follows:
- Change the verification question from “Is the JSONL related to the code?” to “Should we apply a migration to the current SOURCE_CODE based on this JSONL?”.
- If the current SOURCE_CODE is already in Godot 4 target form, even if the JSONL appears related to migration, mark it as “No” because it is “already applied”.
label_prototypes · conversion neededis marked as “Yes” only when the current SOURCE_CODE actually contains the pre‑conversion usage pattern, argument composition, and call pattern.- Irrelevant conversion JSONL is marked as “No” even when the verification target is Godot 3 code, if the conversion does not apply to the current SOURCE_CODE.
- Each field of the JSONL provides contextual judgment. In the verification stage, this context is used to decide whether the current SOURCE_CODE is in a pre‑conversion state or already post‑conversion.
- Because
source_apiandtarget_apimay share the same name ormatch_termsmay contain both source and target terms, a single function name or a broadmatch_termsmatch alone is not sufficient for a “Yes”. - Even if the function name matches, the source‑side pre‑conversion pattern described by the JSONL (e.g., argument list, return handling, inheritance node, surrounding code structure) must be present in the SOURCE_CODE for a “Yes”.
- If
JSONL_GENERATED_FROM_CODE_VERSIONandVERIFY_TARGET_CODE_VERSIONdiffer, first determine whether the current SOURCE_CODE is the pre‑conversion code or already the post‑conversion code.
4/50 Player Movement Speed and Acceleration Application
Item 4 was also labeled by Qwen as version‑separated code.
Labeling Summary:
**Label:** Apply Player Movement Speed and Acceleration
**Reason:** In Godot 4, the physics node changed from `KinematicBody` to `CharacterBody`, and the `move_and_slide()` signature was altered to use argument passing, which changes the code structure.
**Godot 3 Focus:** Assign speed to the `velocity` property, then call `move_and_slide()`, using `KinematicBody2D/3D`.
**Godot 4 Focus:** Pass the argument with `move_and_slide(velocity)`, use `CharacterBody2D/3D`, and apply acceleration using `lerp()` or `move_toward()`.Verification Result:
| Item | Value |
|---|---|
| Number of Slots | 12 |
| Number of Verifications | 24 |
| Passed | 23 |
| Mismatched | 1 |
Mismatches:
| Slot | Verification Target | Expected | Response | Observation |
|---|---|---|---|---|
godot3:api_mapping:positive |
Godot 4 code | No | Yes | When the Godot 3‑based move_and_slide conversion JSONL was attached to Godot 4 code, the result was also Yes. If it is already in Godot 4 form, even though the conversion description is relevant, it is not a target for applying migration to the current code. |
Prompt Observation:
The four mismatches were fewer than the three, but the cause is the same. When the source and target function names in api_mapping are the same or similar, Qwen may judge a broad relevance—“this JSONL describes the function change”—and give a Yes. However, what this tool needs is not a relevance judgment but whether migration is required for the current code.
Therefore, based on observations up to case 4, the verification prompt was strengthened to consider more than just matching API names:
- Whether the current code actually contains the pre‑change pattern described in the JSONL
- Even with the same function name, whether the call arguments and return‑value handling match the pre‑change code
- If the verification target code is already in the post‑change form, whether migration is No
- Whether unrelated conversion JSONLs are not promoted to Yes merely due to simple relevance
Maximum Speed Limit for Player 5/50
Item 5 was labeled by Qwen as version‑separation code.
Labeling Summary:
**syntax_scope:** separate
**label:** Player maximum speed limit
**reason:** Because of the class name change between Godot 3's `KinematicBody2D` and Godot 4's `CharacterBody2D`, and the differences in the `move_and_slide()` method signature and how velocity is passed, separate code is required.
**godot3_focus:** Inherit from `KinematicBody2D`, assign speed to `self.velocity` and then call `move_and_slide()`, limit speed with `limit_length()`.
**godot4_focus:** Inherit from `CharacterBody2D`, assign speed to the `velocity` variable and explicitly pass it to `move_and_slide(velocity)`, apply `limit_length()`.Generated code flow:
| Version | Core code flow |
|---|---|
| Godot 3 | Create an input vector with Input.get_action_strength(), reassign the return value like velocity = move_and_slide(), and if velocity.length() > max_speed then normalize to limit the maximum speed. |
| Godot 4 | Written with extends CharacterBody2D, Input.get_vector(), velocity = direction * max_speed, velocity = velocity.limit_length(max_speed), move_and_slide() flow. |
Verification results:
| Item | Value |
|---|---|
| Number of slots | 12 |
| Number of checks | 24 |
| Passed | 23 |
| Mismatched | 1 |
Mismatches:
| Slot | Verification target | Expected | Response | Observation |
|---|---|---|---|---|
godot3:docs_chunks:negative |
Godot 3 code | No | Yes | When a docs_chunks candidate for code explanation was attached to the Godot 3 code, the answer was “Yes”. Because the same Godot 3 family, move_and_slide, speed/collision handling clues overlapped, Qwen appears to have judged the search candidate as a direct explanation basis. |
Prompt observation:
Number 5 is close to a situation that can actually occur in hybrid search. Later, when searching the DB, not only completely unrelated JSONL appears, but also similar candidates from the same API or the same movement/speed handling family can appear together. At this point, the verification prompt should not ask “Is this a similar search candidate?” but rather “Does this JSONL directly describe the actual behavior of the current SOURCE_CODE?”
In this number 5, api_mapping and label_prototypes worked as expected in both Godot 3/4 validations. In particular, the fact that JSONL already applied to Godot 4 code or of the no_change, pattern_validation type fell to “No” can be seen as a signal that the migration judgment issue observed in previous numbers 3/4 has been somewhat mitigated.
Conversely, docs_chunks still needs further examination. Since docs_chunks is about matching explanation evidence rather than migration applicability, if it becomes “Yes” merely because of the same API name or version clue, noise remains in the hybrid search candidate verification stage. Therefore, future verification prompts should more strongly confirm that the purpose, target object, and result state of the SOURCE_CODE match the description in the JSONL for docs_chunks.
6~10/50 Additional Verification Records
From 6 to 10, we first record the results and then fix the verification prompts. In this stage, we only note which slots the current tool gets right or wrong without modifying the prompts.
Overall Summary:
| Range | Number of Slots | Verifications | Passed | Mismatches |
|---|---|---|---|---|
| Total for 6~10 | 54 | 102 | 97 | 5 |
Item‑by‑Item Summary:
| No. | Item | Label | Code Category | Verification Result |
|---|---|---|---|---|
| 6 | Create and fire projectile on mouse click | Mouse‑click projectile creation and movement/collision | Version split | 24/24 passed |
| 7 | Manage projectile movement and time‑to‑live | Projectile movement and TTL management | Version split | 22/24 passed, 2 mismatches |
| 8 | Enemy player‑tracking (AI) logic | Enemy player‑tracking AI logic | Version split | 21/24 passed, 3 mismatches |
| 9 | Enemy movement speed and rotation logic | Enemy movement speed and rotation logic | Version split | 24/24 passed |
| 10 | Remove player when it leaves the screen | Node removal/hide on screen exit | Common | 6/6 passed |
Numbers 6, 9, and 10 all matched expectations under the current criteria. For 6, the Godot 3 flow (PackedScene.instance(), Input.is_mouse_button_pressed(1), get_viewport().get_mouse_position()) and the Godot 4 flow (instantiate(), InputEventMouseButton, get_global_mouse_position()) were separated, and the correct/incorrect candidates were each well distinguished. For 9, the version‑split candidates for enemy movement and rotation were also judged as expected. Number 10 was classified as common syntax, and the handling of off‑screen nodes based on get_viewport_rect().size, global_position, hide() was documented as “yes” in the docs, while the migration candidates of type api_mapping/label_prototypes were marked “no”.
Mismatches:
| No. | Slot | Verification Target | Expected | Response | Observation |
|---|---|---|---|---|---|
| 7 | godot3:api_mapping:positive |
Godot 4 code | No | Yes | The JSONL conversion for Godot 3 was already verified against Godot 4 code, yet it returned “yes”. The interpretation still leans toward “related conversion” rather than “conversion that must be applied to the current code”. |
| 7 | godot3:label_prototypes:positive |
Godot 4 code | No | Yes | A prototype describing a Godot 3 source‑side usage pattern was also marked “yes” for Godot 4 code. If the code is already migrated, the migration need should be “no”. |
| 8 | godot4:docs_chunks:positive |
Godot 3 code | No | Yes | Docs evidence for Godot 4 was also attached as “yes” to Godot 3 code. It appears that docs candidates on the same tracking/movement topic or similar API cues were judged as direct evidence. |
| 8 | godot4:docs_chunks:negative |
Godot 3 code | No | Yes | Another docs candidate intended for code explanation was also marked “yes” for Godot 3 code. When a similar docs candidate appears in hybrid search, its purpose and result need to be distinguished more clearly. |
| 8 | godot4:docs_chunks:negative |
Godot 4 code | No | Yes | Even within the Godot 4 family, a different code‑explanation candidate should be “no”, but it returned “yes”. Verification of docs_chunks should consider the actual purpose, target, and outcome of the SOURCE_CODE rather than just the API name. |
Observations:
Looking at 6–10, there is an overall improvement signal. Out of 102 verifications, 97 matched expectations, and 6, 9, 10 all passed. Especially for the common syntax case (10), both api_mapping and label_prototypes were marked “no”, indicating that the policy “do not attach migration evidence to common code” is working to some extent.
The remaining mismatches fall into two categories. One is like case 7, where migration evidence based on Godot 3 is also attached as “yes” to Godot 4 code. In this case we need to ask more clearly whether the current code is already in the post‑migration form or still pre‑migration. The other is like case 8, where docs_chunks candidates appear as “yes” because they share the same topic or similar API. Here we must better discriminate whether the explanatory evidence directly describes the actual behavior of the SOURCE_CODE or is merely a similar search candidate.
The key point is that this problem is not solved by blocking specific strings or candidates. When the JSONL is later inserted into the DB and retrieved via hybrid search, it is normal for similar but different candidates to appear together. Therefore, subsequent fixes should not artificially filter candidates, but rather make the verification prompt judge the relationship between the current SOURCE_CODE and the retrieved candidates more accurately.
Prompt enhancements applied after recording:
- For
docs_chunks, when the JSONL generation version differs from the verification target version, we first check whether the JSONL explains the behavior of the current target‑version code. - Even if versions differ, a candidate that explicitly describes a common API/common behavior may be “yes”, but a candidate that explains version‑specific code structure or node/API differences must be separately verified against the current SOURCE_CODE.
- For
api_mappingandlabel_prototypes, we first determine whether the current SOURCE_CODE is pre‑migration, post‑migration, unrelated, or a code that does not require conversion. - “Yes” is allowed only when the current SOURCE_CODE is pre‑migration and the JSONL‑described conversion should be applied now; the wording has been clarified accordingly.
- This enhancement is not about handling specific strings, but about strengthening the procedure that judges candidates retrieved by hybrid search against the current code.
Verification Result Check
Verification results are displayed separately for each slot by version.

With this approach, you can see the following directly within a single slot.
Godot 3 Code verification before / Response / Expectation / Match status
Godot 4 Code verification before / Response / Expectation / Match statusPreviously, only “whether this JSONL is correct/incorrect” was visible. Now you can see “whether it is correct/incorrect when attached to a specific code”.
Problems Solved by the Current Tool
| Previous Method | Current Method |
|---|---|
| Requested code and JSONL directly from the Qwen chatbot | Accumulate label, code, JSONL, and verification results for each item in the web UI |
| Distinguished only correct/incorrect JSONL | Separated into explanation basis, other code explanations, conversion needed, already applied, common/unnecessary, irrelevant conversion |
| Godot 3 JSONL was validated only against Godot 3 code | Can be validated against both Godot 3 and Godot 4 code |
| Copied results manually and remembered them | Stores raw response, prompt, and verification result for each slot |
| Difficult to trace the cause of failures | Immediately see which slot and which verification target was wrong |
| Testing 50 items was essentially manual work | Provides sample load, item add/remove, and full generate/full verification buttons |
Changes in Development Productivity
Before creating the tool, each test required the following steps to be done manually.
1. Explain test items to Qwen
2. Request Godot 3 code
3. Request Godot 4 code
4. Request docs_chunks correct/incorrect JSONL
5. Request api_mapping correct/incorrect JSONL
6. Request label_prototypes correct/incorrect JSONL
7. Attach each JSONL to SOURCE_CODE again for verification
8. Manually record yes/no results
9. Compare mentally whether the expected values matchNow the same flow is fixed within the screen.
1. Click the item
2. Generate AI label
3. Generate common or Godot 3/4 code
4. Generate JSONL per slot
5. Verify Godot 3 code / Verify Godot 4 code
6. Check results and prompt/responseEspecially the part where productivity improved is closer to “not getting confused” rather than “making a lot quickly.” In this work, it is more important that the judgment criteria do not wobble than the sheer amount generated. With the tool, the following became easier.
- Fix whether it is a common grammar or a version split first
- Continuously check the purpose of each table’s JSONL on the screen
- Separate the expected generation criteria from the actual verification results
- Cross‑validate the same JSONL in Godot 3/4 code
- Immediately view the prompt and raw response of a failed slot
- Reduce the state a person has to remember when repeating 50 items
Still Open Issues
This tool is not yet a final evaluator. It is currently a debugging tool.
The open issues are as follows.
- The explanation for
docs_chunkscan sometimes be accepted as a common description even when the versions differ. - In
api_mapping, if both source and target strings appear in the JSONL, Qwen could see only the target string and answer “yes.” - For
label_prototypes, distinguishing before/after patterns may be more important than simple string matching. - The current expected response calculation is a debugging metric, so the actual score/F1 calculation criteria need to be refined later.
- It is difficult to separate the search‑candidate selection problem and the verification‑prompt judgment problem just by looking at the results.
Current Conclusion
On June 28 the feeling was “let’s do the 50 tests manually.” When we actually tried it, there were far too many axes to test, and mixing common grammar with version splits, generation‑criteria versions, and verification‑target versions quickly became confusing.
By June 30, after building the tool, this problem was largely resolved. Now we can see not only whether Qwen’s generated JSONL is correct/incorrect, but also which code generated it and which code verified it.
This tool can be used in the same way when the actual search results of docs_chunks, api_mapping, and label_prototypes are attached later. In other words, it became a foundational tool that can extend from manual demo data to verification of DB search results.