idea_world_labDEV JOURNAL
Tuesday, June 30, 2026

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/.

Qwen Validation Debugger Current Screen

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_prototypes JSONL 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 conversion

If 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 conversion

If 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.

Labeling screen

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.

Common code slot screen

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.

Version‑specific slot screen

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 code

But 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.

Godot 3/4 verification button separation

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 code

Inside 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:
godot4

The 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_code must 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_chunks incorrect 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 Yes criterion for docs_chunks is 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.js to 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 toward Yes.
  • When a Godot 3‑based JSONL is attached to Godot 4 code, if the code is already post‑conversion, label_prototypes · conversion needed must not return Yes.
  • When a Godot 4‑based irrelevant conversion JSONL is attached to Godot 3 code, it must not return Yes if 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 needed is 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_api and target_api may share the same name or match_terms may contain both source and target terms, a single function name or a broad match_terms match 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_VERSION and VERIFY_TARGET_CODE_VERSION differ, 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_mapping and label_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.

Verification Result Screen

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 status

Previously, 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 match

Now 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/response

Especially 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_chunks can 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.