Cloud baseline
Qwen 3.8 27B on Forge 2.0 — 0.0014 on Forge 2.0
qwen/qwen3.8-27b · scorer forge-2.0
- Overall
- 0.0014
- Benchmark
- Forge 2.0
- Model build
- 150m 33s
Tier breakdown
Each bar is the tier's mean, from 0 to 1 (for E, its mean × the excellence gate). The percentage is the tier's share of the score. Mean × share, added over all tiers, is the tests earned figure below.
Scoring detail
How this score was built
Per-test scorer output, as posted by the app. Expand a section to inspect its tests.
The rules behind these numbers: Forge 2.0 requirements, weights and score caps.
The score, step by step
0.0054 tests earned × 1.0000 critical defects × 0.2500 reliability at the floor = 0.0014 final score
tests earned = 0.15 × 0.0360 v1 + 0.0000 v2 (out of 0.85)
v1 = 0.88 × 0.0409 tiers L–A + 0.12 × 0.0000 gate × 0.0000 excellence
Reliability: every tier in the breakdown above, except Excellence, is a group of tests. Each group of tests multiplies the score by 1 − 0.10 × the shortfall of its worst test: by 0.90 when that test fails completely, by 0.95 when it scores 0.5.
- L Lint and bundles: worst test
l_deployable, score 0 × 0.9000Already counted in this group: l_bundles_load, l_lint_warnings, l_real_packages, l_manifest_rules, l_scopes
- K Platform currency: worst test
k_dashboard_widget, score 0 × 0.9000Already counted in this group: k_widget_edit_bridge, k_rovo_skill, k_current_apis, k_consumer_shape, k_entity_declared, k_manifest_semantics, k_runtime_risks, k_rovo_mcp, k_llm_model_current
- T Event pipeline: worst test
t_trigger_handoff, score 0 × 0.9000Already counted in this group: t_event_rows, t_out_of_order, t_multi_sprint_parse, t_reestimate_followed, t_retry_after_honoured, t_no_user_in_async
- R Reconcile: worst test
r_backfill_complete, score 0 × 0.9000Already counted in this group: r_removals_found, r_heal_dropped, r_pagination, r_rate_limit, r_as_app, r_completes_in_timeout
- S Storage: worst test
s_storage_scope, score 0 × 0.9000Already counted in this group: s_entity_index_used, s_index_order, s_limits
- B Resolvers and permissions: worst test
b_invoke_contract, score 0 × 0.9000Already counted in this group: b_no_permission_leak, b_hidden_count, b_comment_adf_as_user, b_comment_exactly_once, b_realtime_payload_clean
- U UI function: worst test
u_widget_numbers, score 0 × 0.9000Already counted in this group: u_widget_chart, u_widget_edit_config, u_ledger_table, u_ledger_sort, u_issue_router, u_comment_flow, u_modal_close, u_not_started, u_widget_live, u_llm_explain
- V Visual: worst test
v_theme_tokens, score 0 × 0.9000Already counted in this group: v_dark_mode, v_csp_clean, v_console_clean, v_widget_sizes
- A Rovo: worst test
a_action_result, score 0 × 0.9000Already counted in this group: a_action_errors, a_action_permissions, a_skill_instructions
- R1 Migration: worst test
r1_v1_rows_migrated, score 0 × 0.9000Already counted in this group: r1_v1_rows_intact, r1_events_during_migration, r1_progress_visible
- R2 Dosing: worst test
r2_background_share, score 0 × 0.9000Already counted in this group: r2_person_never_quota_refused, r2_rate_limit_reaction, r2_backfill_complete
- R3 Time limits: worst test
r3_never_killed, score 0 × 0.9000Already counted in this group: r3_long_retry_after_deferred, r3_no_duplicate_rows
- R4 Changing world: worst test
r4_sprint_close_final, score 0 × 0.9000Already counted in this group: r4_move_new_board, r4_field_switch, r4_deleted_history, r4_permission_revoked
- R5 Admin panel: worst test
r5_panel_labels, score 0 × 0.9000Already counted in this group: r5_admin_actions_apply, r5_nonadmin_refused
- R6 CI web trigger: worst test
r6_unsigned_no_effect, score 0 × 0.9000Already counted in this group: r6_replay_once, r6_status_codes, r6_valid_applies, r6_secret_never_disclosed
- R7 Custom field: worst test
r7_values_fresh, score 0 × 0.9000Already counted in this group: r7_writes_accepted
- R8 Forge LLM: worst test
r8_tool_call_scope, score 0 × 0.9000Already counted in this group: r8_failure_handling, r8_cost_controls
- R9 Boot budget: worst test
r9_widget_boot, score 0 × 0.9000Already counted in this group: r9_sprint_boot, r9_admin_boot
- R10 Native JQL: worst test
r10_manifest, score 0 × 0.9000Already counted in this group: r10_initial_membership, r10_precomputation_refresh, r10_shared_permissions, r10_empty_and_closed, r10_invalid_arguments
At the floor: the groups multiply to less than 0.25, and together the groups never take the score below 0.25 of what the tests earned, so reliability stays at 0.25. A critical defect still multiplies on top.
v1 is this run's score on the tests carried over from Forge 1.0: 15% of the total. v2 is the requirements R1–R10, each at its share of the score: the other 85%. Critical defects multiply the whole score, and so does each group of tests, by 1 − 0.10 × the shortfall of its worst test.
Excellence gate 0.0000: the average of the 18 conditions below, each counted at the value shown. Green is met in full; red is not, and lowers the gate. The 3 excellence tests are paid in proportion to the gate; together they are 1.8% of the total.
Earned score 0.0014 · Cap 0.300 · Final score 0.0014
Under a cap the final score is min(earned, cap − 0.05 × (1 − earned)): always below the cap, and closer to it the more the run earned. With no cap it is the earned score. Avoiding a cap adds no points.
- Maximum 0.300None of the v2 surfaces exists: no jira:adminPage, no webtrigger and no scope-ledger entity.Failed:
k_v2_surfaces - Maximum 0.499Lint errors, or manifest functions that do not bundle and load.Failed:
l_deployablel_bundles_load
Forge's own linter reports no errors (warnings cost points), every manifest function bundles and loads, packages resolve at the kit's pins, the manifest rules the linter misses, and only the scopes the app's calls need.
l deployable
0.00manifest.yml does not parse: Nested mappings are not allowed in compact mappings at line 110, column 20: description: Current scope status of an issue relative to its active spri… ^
l bundles load
0.00vacuous — precondition unmet: >= 1 function declared
l lint warnings
0.00vacuous — precondition unmet: >= 1 function loads
l real packages
0.00vacuous — precondition unmet: >= 1 bundle imports @forge/*
l manifest rules
0.00vacuous — precondition unmet: >= 1 resource and >= 1 function
l scopes
0.00vacuous — precondition unmet: >= 1 product or KVS call observed
Current modules and APIs: dashboards:widget with its edit API, the rovo:skill and rovo:mcp wiring, a Forge LLM model the platform lists as active, no /rest/api/3/search, no @forge/api storage, a nodejs22.x or nodejs24.x runtime, the consumer shape, the declared KVS entity, and deploy readiness: a manifest and permissions real Forge would accept and no code predicted to fail there.
k dashboard widget
0.00required app surface absent: dashboards:widget module
k widget edit bridge
0.00vacuous — precondition unmet: edit surface rendered
k rovo skill
0.00required app surface absent: rovo:skill module
k current apis
0.00vacuous — precondition unmet: >= 1 product call observed
k consumer shape
0.00vacuous — precondition unmet: a consumer exists
k entity declared
0.00required app surface absent: app.storage.entities
k v2 surfacesdiagnostic, no weight
0.00v2 surfaces declared: none
k rovo mcp
0.00required app surface absent: rovo:mcp module
k llm model current
0.00vacuous — precondition unmet: >= 1 LLM call
k manifest semantics
0.00vacuous — precondition unmet: >= 1 function and >= 1 product call observed
k runtime risks
0.00vacuous — precondition unmet: >= 1 function and >= 1 product call observed
Issue updates flow trigger to queue to consumer: one ledger row per change under duplicate, reordered, dropped and concurrent deliveries, multi-sprint changelog values, re-estimates followed, Retry-After honoured, no user context in background work.
t trigger handoff
0.00vacuous — precondition unmet: a trigger exists and >= 1 push observed
t event rows
0.00required app surface absent: trigger + consumer
t no double count
1.00every change holds at most one ledger row in every phase (duplicated deliveries included)
t out of order
0.00permuted deliveries: 0/11 rows exact, 0/4 sprints with oracle numbers
t multi sprint parse
0.1707worst of 3 scoring sites (seed 3c04f61f28a4a511): 21/123 multi-id Sprint changes recorded exactly
t reestimate followed
0.000/6 re-estimated sprints show the oracle numbers
t retry after honoured
0.00vacuous — precondition unmet: the consumer-path fault fired
t no user in async
0.00vacuous — precondition unmet: >= 1 background Jira call
The first scheduled run starts the backfill of every change since each active sprint started, removals included; later runs heal what the event stream missed and a run with nothing new writes nothing; they page through results in each endpoint's own style, never retry before Retry-After and finish inside the module timeout, queue continuations included.
r backfill complete
0.00required app surface absent: scheduledTrigger module
r removals found
0.000/24 removed-to-backlog changes found
r heal dropped
0.000/4 dropped changes healed exactly once; 0 other row(s) added
r pagination
0.00vacuous — precondition unmet: >= 1 read the site served in two or more pages
r rate limit
0.00vacuous — precondition unmet: the reconcile fault fired
r as app
0.00vacuous — precondition unmet: >= 1 Jira read of the scheduled runs alone (the probe recorded no call lineage)
r completes in timeout
0.00vacuous — precondition unmet: >= 1 Jira read of the scheduled runs alone (the probe recorded no call lineage)
r idempotent rerun
1.000 ledger write(s) (scope-change) on a no-change run over 59 rows
Forge KVS with the storage scope, ledger reads through the declared entity index in change-time order, no KVS limit errors.
s storage scope
0.00vacuous — precondition unmet: >= 1 KVS call
s entity index used
0.00vacuous — precondition unmet: >= 1 ledger read
s index order
0.00vacuous — precondition unmet: table rows rendered
s limits
0.00vacuous — precondition unmet: >= 1 KVS write
Every invoked resolver exists and answers structured errors, nobody sees changes to issues they cannot browse (not on screen, not in an LLM prompt, not in a Realtime payload), the hidden-change count is right, and each click posts exactly one ADF comment as the viewer.
b invoke contract
0.00vacuous — precondition unmet: >= 1 invoke observed
b no permission leak
0.00vacuous — precondition unmet: >= 1 person-facing change list returned or rendered
b hidden count
0.00required app surface absent: hidden-count / hiddenChanges
b comment adf as user
0.00vacuous — precondition unmet: >= 1 comment POST
b comment exactly once
0.00vacuous — precondition unmet: >= 1 comment POST
b realtime payload clean
0.00vacuous — precondition unmet: >= 1 realtime publish
The dashboard widget's numbers and chart, its board choice saved through the host, live updates through Forge Realtime, the sprint action's ledger table, sorting, issue links, comment flow, the Forge LLM explanation, close and not-started states.
u widget loadsdiagnostic, no weight
0.00required app surface absent: dashboards:widget view
u widget numbers
0.00required app surface absent: configured widget view
u widget chart
0.00required app surface absent: configured widget view
u widget edit config
0.00required app surface absent: dashboards:widget
u ledger table
0.00required app surface absent: jira:sprintAction
u ledger sort
0.00vacuous — precondition unmet: table rows rendered
u issue router
0.00vacuous — precondition unmet: table rows rendered
u comment flow
0.00required app surface absent: post-summary flow
u modal close
0.00vacuous — precondition unmet: modal rendered
u not started
0.00required app surface absent: jira:sprintAction
u widget live
0.00vacuous — precondition unmet: widget rendered sprints
u llm explain
0.00vacuous — precondition unmet: explain control rendered
Atlassian design tokens with 4.5:1 contrast in light and dark, a painted surface, no Content Security Policy violations or console errors, and the widget readable at 380 px wide.
v theme tokens
0.00vacuous — precondition unmet: a surface rendered app content
v dark mode
0.00vacuous — precondition unmet: a surface rendered app content
v csp clean
0.00vacuous — precondition unmet: a surface rendered app content
v console clean
0.00vacuous — precondition unmet: a surface rendered app content
v widget sizes
0.00vacuous — precondition unmet: widget rendered sprints
The get-sprint-scope action returns exact numbers and the visible changes for the invoking person, returns errors instead of throwing, and the skill's SKILL.md tells the agent how to use it.
a action result
0.00required app surface absent: action get-sprint-scope
a action errors
0.00vacuous — precondition unmet: the action exists
a action permissions
0.00required app surface absent: action get-sprint-scope
a skill instructions
0.00vacuous — precondition unmet: SKILL.md exists
Few Jira requests in the first scheduled run and per relevant change in triggers and consumers, and surfaces that paint after one round trip — paid only in proportion to the excellence gate.
e reconcile economy
0.00mean over 3 scoring sites: backfill incomplete — economy is not credited on unfinished work
e event economy
0.00mean over 3 scoring sites: event rows inexact — economy is not credited on unfinished work
e ui round trips
0.00mean over 3 scoring sites: no surface rendered app content
Every v1 row moves to the new scope-ledger entity exactly once, with its change id and time, while events keep flowing and across invocation limits, within 2 virtual hours of the upgrade, with its progress in the admin panel; v1's entity stays intact.
r1 v1 rows migrated
0.00required app surface absent: storage entity `scope-ledger` (SPEC §2.4)
r1 v1 rows intact
0.00required app surface absent: storage entity `scope-ledger` (SPEC §2.4)
r1 events during migration
0.00required app surface absent: storage entity `scope-ledger` (SPEC §2.4)
r1 progress visible
0.00required app surface absent: jira:adminPage (the migration progress lives in the admin panel)
On a site of about 1,000 issues, background work stays inside its share of the 2,400-point hour, no person-facing request meets a quota 429, and Retry-After and RateLimit-Reason (quota, burst, per-issue write) decide every retry; the backfill still completes.
r2 background share
0.00vacuous — precondition unmet: no background Jira points were spent
r2 person never quota refused
0.00vacuous — precondition unmet: no person-facing Jira request was observed
r2 rate limit reaction
0.00vacuous — precondition unmet: no 429 with a Retry-After reached background work
r2 backfill complete
0.00required app surface absent: storage entity `scope-ledger` (SPEC §2.4)
Work longer than one invocation continues in the next, no function waits past its limit (a long Retry-After is handed back, not waited out), and a killed invocation leaves no duplicate.
r3 never killed
0.00vacuous — precondition unmet: no invocation was observed
r3 long retry after deferred
0.00vacuous — precondition unmet: no 429 carried a Retry-After longer than its invocation's limit
r3 no duplicate rows
0.00vacuous — precondition unmet: no scope-ledger row was observed
Sprints close, issues move to another board's sprint, a board's estimation field changes, issues are deleted and a person loses browse permission while the app runs; the ledger and every view come out right.
r4 sprint close final
0.00required app surface absent: storage entity `scope-ledger` (SPEC §2.4)
r4 move new board
0.00required app surface absent: storage entity `scope-ledger` (SPEC §2.4)
r4 field switch
0.00required app surface absent: storage entity `scope-ledger` (SPEC §2.4)
r4 deleted history
0.00required app surface absent: storage entity `scope-ledger` (SPEC §2.4)
r4 permission revoked
0.00vacuous — precondition unmet: no request after the browse revoke showed any ledger data, so hiding proves nothing
A jira:adminPage built in UI Kit with the contract's controls, and every admin resolver checking Jira's ADMINISTER permission on the server, never trusting the payload.
r5 panel labels
0.00required app surface absent: jira:adminPage
r5 admin actions apply
0.00required app surface absent: jira:adminPage
r5 nonadmin refused
0.00required app surface absent: jira:adminPage
Signed deployment events: a missing or wrong signature, a tampered body or a stale timestamp is refused with no effect, a replay applies once, a valid event records the deployment, and the secret is never disclosed.
r6 unsigned no effect
0.00required app surface absent: webtrigger (SPEC R6)
r6 replay once
0.00required app surface absent: webtrigger (SPEC R6)
r6 status codes
0.00required app surface absent: webtrigger (SPEC R6)
r6 valid applies
0.00required app surface absent: webtrigger (SPEC R6)
r6 secret never disclosed
0.00required app surface absent: jira:adminPage (where the CI secret is rotated)
The read-only scope-status field holds committed or added +points for an issue in an active sprint, removed for one that has left an active sprint since that sprint started, and nothing for any other issue, written in bulk through Jira's app field-value API and fresh within the virtual hour.
r7 values fresh
0.00required app surface absent: jira:customField scope-status
r7 writes accepted
0.00required app surface absent: jira:customField scope-status
Tool calls validated against the viewer's sprint scope, back-off on a 429 without Retry-After, answers with no finish reason refused, a 10-minute cache, and the admin's kill switch and daily token budget enforced on the server.
r8 tool call scope
0.00required app surface absent: llm (Forge LLM)
r8 failure handling
0.00required app surface absent: llm (Forge LLM)
r8 cost controls
0.00required app surface absent: llm (Forge LLM)
The widget and the sprint action each make at most one invoke and load at most 150 KB before their first data paint, with no external origin; the admin page renders after one invoke.
r9 widget boot
0.00required app surface absent: dashboards:widget
r9 sprint boot
0.00required app surface absent: jira:sprintAction
r9 admin boot
0.00required app surface absent: jira:adminPage
scopeChanged(sprintId) is a jira:jqlFunction returning native issue predicates from the ledger. Jira shares its precomputed expansion across users, applies each viewer's browse permissions, and keeps the same cached mapping fresh through the documented precomputation update API after changes and reconciliation. Empty, future and closed sprints, IN and NOT IN, and invalid arguments are checked by running actual native JQL.
r10 manifest
0.00scopeChanged jira:jqlFunction absent
r10 initial membership
0.00scopeChanged jira:jqlFunction absent
r10 precomputation refresh
0.00scopeChanged jira:jqlFunction absent
r10 shared permissions
0.00scopeChanged jira:jqlFunction absent
r10 empty and closed
0.00scopeChanged jira:jqlFunction absent
r10 invalid arguments
0.00scopeChanged jira:jqlFunction absent
Run notes and corrections
Canonical native verdict summary reports $0.332853692, 127 billed generations and 13455701 prompt / 12480954 cached / 108444 completion tokens. Per-call request and invoice correspondence remains an observation; no independent raw invoice audit is claimed.
Graded browser recording
No recording: no app surface ever rendered.
v_theme_tokens, v_dark_mode, v_csp_clean, v_console_clean: vacuous — precondition unmet: a surface rendered app content
Run details
- Model
- qwen/qwen3.8-27b
- Engine events
- 0
- Repair rounds
- 0
- Started
- Oct 13, 2026, 12:48 PM
- Finished
- Oct 13, 2026, 03:19 PM