@bongos/core 1.17.2 → 1.17.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.bongos-core.json +292 -32
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +2 -0
- package/clients/bongos-client/index.cjs +2 -0
- package/clients/bongos-client/index.d.ts +4 -2
- package/clients/bongos-client/index.mjs +2 -0
- package/docs/api/openapi.json +65 -26
- package/docs/api-reference.md +3 -2
- package/modules/hall-ui/public/builders.js +96 -646
- package/modules/hall-ui/public/goal-inbox.js +67 -26
- package/modules/hall-ui/public/goals-page.js +4 -1
- package/modules/hall-ui/public/goals.html +8 -0
- package/modules/hall-ui/public/hall-kit.js +474 -0
- package/modules/hall-ui/public/hall-widgets.js +11 -15
- package/modules/hall-ui/public/instances-panel.js +24 -3
- package/modules/hall-ui/public/new-project-wizard.js +6 -5
- package/modules/hall-ui/public/style.css +125 -0
- package/modules/hall-ui/public/work.css +194 -0
- package/modules/hall-ui/public/work.html +46 -374
- package/modules/hall-ui/public/work.js +137 -102
- package/modules/lifecycle/criterion-suggest.js +80 -0
- package/modules/lifecycle/db.js +42 -5
- package/modules/lifecycle/routes/goals.js +26 -0
- package/modules/lifecycle/routes/tasks.js +21 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/scripts/hall-preview/README.md +103 -0
- package/scripts/hall-preview/fixtures/access-requests.json +1 -0
- package/scripts/hall-preview/fixtures/achievements.json +76 -0
- package/scripts/hall-preview/fixtures/analytics__builder.json +251 -0
- package/scripts/hall-preview/fixtures/audit-log.json +1 -0
- package/scripts/hall-preview/fixtures/boxes__cost-ledger.json +1 -0
- package/scripts/hall-preview/fixtures/builders__active-claims.json +1 -0
- package/scripts/hall-preview/fixtures/builders__directory.json +81 -0
- package/scripts/hall-preview/fixtures/builders__roster.json +1 -0
- package/scripts/hall-preview/fixtures/goals.json +502 -0
- package/scripts/hall-preview/fixtures/goals__25.json +96 -0
- package/scripts/hall-preview/fixtures/goals__26.json +67 -0
- package/scripts/hall-preview/fixtures/goals__3.json +103 -0
- package/scripts/hall-preview/fixtures/goals__35.json +49 -0
- package/scripts/hall-preview/fixtures/goals__conflicts.json +154 -0
- package/scripts/hall-preview/fixtures/goals__detail.json +96 -0
- package/scripts/hall-preview/fixtures/goals__inbox.json +5 -0
- package/scripts/hall-preview/fixtures/goals__requests.json +3 -0
- package/scripts/hall-preview/fixtures/grades__by-builder.json +1 -0
- package/scripts/hall-preview/fixtures/inbox.json +330 -0
- package/scripts/hall-preview/fixtures/instance.json +124 -0
- package/scripts/hall-preview/fixtures/leaderboard.json +184 -0
- package/scripts/hall-preview/fixtures/me.json +476 -0
- package/scripts/hall-preview/fixtures/me__recent-ships.json +304 -0
- package/scripts/hall-preview/fixtures/override-requests.json +1 -0
- package/scripts/hall-preview/fixtures/provisioning__fleet.json +1 -0
- package/scripts/hall-preview/fixtures/provisioning__fleet__cost-ledger.json +1 -0
- package/scripts/hall-preview/fixtures/provisioning__instances.json +1 -0
- package/scripts/hall-preview/fixtures/public__analytics__ecosystem.json +516 -0
- package/scripts/hall-preview/fixtures/public__bounty-table.json +37 -0
- package/scripts/hall-preview/fixtures/public__cost-summary.json +742 -0
- package/scripts/hall-preview/fixtures/public__estimation-drift.json +41 -0
- package/scripts/hall-preview/fixtures/public__grades.json +50 -0
- package/scripts/hall-preview/fixtures/public__progress.json +124 -0
- package/scripts/hall-preview/fixtures/public__recent-shipped.json +426 -0
- package/scripts/hall-preview/fixtures/public__repo-health.json +160 -0
- package/scripts/hall-preview/fixtures/public__repo-info.json +5 -0
- package/scripts/hall-preview/fixtures/security__docs.json +1 -0
- package/scripts/hall-preview/fixtures/security__reports.json +1 -0
- package/scripts/hall-preview/fixtures/sessions__search.json +1 -0
- package/scripts/hall-preview/fixtures/tasks.json +2420 -0
- package/scripts/hall-preview/fixtures/tasks__claimable.json +2555 -0
- package/scripts/hall-preview/fixtures/tasks__detail.json +111 -0
- package/scripts/hall-preview/fixtures/tasks__peer-votes__feed.json +330 -0
- package/scripts/hall-preview/fixtures/versions.json +89 -0
- package/scripts/hall-preview/refresh-fixtures.js +77 -0
- package/scripts/hall-preview/server.js +178 -0
- package/scripts/migrate.sh +29 -4
- package/src/bongos/optimizer.js +37 -2
- package/tests/criterion_suggest.mjs +106 -0
- package/tests/migrate_root_resolution.mjs +97 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Hall preview harness
|
|
2
|
+
|
|
3
|
+
The dev-box sandbox previews the **game only** — `/builders` 404s there (idea 490) — so
|
|
4
|
+
hall-ui changes are reviewed here: a DB-less fixture server that serves the **real**
|
|
5
|
+
`modules/hall-ui/public` files through the **real** serving seams (boot-time `?v=`
|
|
6
|
+
content-hash stamping, `{{token}}` replacement, `window.__BRANDING__`/`__MODULES__`
|
|
7
|
+
injection, theme markup), answering every `/api/gds|bongos/*` read from checked-in
|
|
8
|
+
fixtures. Proven recipe from tasks 1723/1742, checked in by task 2167.
|
|
9
|
+
|
|
10
|
+
## Quickstart
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
node scripts/hall-preview/server.js # neutral pack, port 4600
|
|
14
|
+
# → browse http://builders.localhost:4600/ (Chromium resolves *.localhost;
|
|
15
|
+
# the builders. host prefix exercises the real subdomain serving path)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
| Flag | Effect |
|
|
19
|
+
|---|---|
|
|
20
|
+
| `--port 4600` | listen port |
|
|
21
|
+
| `--brand config/branding.json` | serve the instance pack (default: `config/branding.neutral.json`, the vanilla skin) |
|
|
22
|
+
| `--modules-off dev-box,provisioning` | report those modules disabled in `window.__MODULES__` — verifies `moduleOn()` gating (Harbor nav item, Instances/Start-a-project widgets must vanish) |
|
|
23
|
+
| `--empty` | drain every array in every fixture — the empty-state screenshot pass |
|
|
24
|
+
|
|
25
|
+
Writes are not wired: any `POST/PATCH/DELETE` answers `501 preview_readonly`.
|
|
26
|
+
A GET with no fixture answers 404 and logs
|
|
27
|
+
`no fixture: <path>` — that log line names the exact file to add.
|
|
28
|
+
|
|
29
|
+
## Fixtures
|
|
30
|
+
|
|
31
|
+
`fixtures/<path>.json`, slashes as `__` (`/me/recent-ships` → `me__recent-ships.json`).
|
|
32
|
+
Query strings are ignored. Id-bearing paths try the exact file first
|
|
33
|
+
(`goals__25.json`), then a generic fallback (`goals__detail.json`, `tasks__detail.json`,
|
|
34
|
+
`analytics__builder.json`, …) so one fixture serves any id.
|
|
35
|
+
|
|
36
|
+
Refresh from live data (needs a GDS CLI session; read-only; Archon-gated endpoints
|
|
37
|
+
skip for lower ranks and keep the checked-in synthetic empties):
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
node scripts/hall-preview/refresh-fixtures.js
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Box/terminal endpoints are deliberately never snapshotted (connection details).
|
|
44
|
+
|
|
45
|
+
## The evidence matrix (per page-redesign ship)
|
|
46
|
+
|
|
47
|
+
Screenshot every changed page at **{light, dark} × {1280w, 390w}**, plus one
|
|
48
|
+
instance-pack run (`--brand config/branding.json`) proving the theming contract
|
|
49
|
+
survives. With the Playwright MCP (`npx playwright install chrome` once):
|
|
50
|
+
|
|
51
|
+
1. `browser_navigate` → the page. `browser_console_messages` must show **0 errors**.
|
|
52
|
+
2. 1280w: `browser_resize 1280×900` → `browser_take_screenshot` (fullPage for tall pages).
|
|
53
|
+
3. dark: `browser_evaluate` `() => { localStorage.setItem('hall-theme','dark'); location.reload(); }` → screenshot. (Reset with `'light'`.)
|
|
54
|
+
4. 390w: `browser_resize 390×844` → light + dark screenshots.
|
|
55
|
+
|
|
56
|
+
## Seam assertions (copy-paste `browser_evaluate` snippets)
|
|
57
|
+
|
|
58
|
+
The hard seams every redesign must keep. Run on each changed page:
|
|
59
|
+
|
|
60
|
+
```js
|
|
61
|
+
// 1. Window is the ONLY scroller — no inner scroll pane may appear.
|
|
62
|
+
() => [...document.querySelectorAll('.app-content *')].filter((el) => {
|
|
63
|
+
const s = getComputedStyle(el);
|
|
64
|
+
return /(auto|scroll)/.test(s.overflowY) && el.scrollHeight > el.clientHeight + 1
|
|
65
|
+
&& !el.matches('.section-rail, .kit-tabs'); // the two sanctioned x-scroll strips
|
|
66
|
+
}).map((el) => el.className).join(',') || 'OK'
|
|
67
|
+
|
|
68
|
+
// 2. Deep-link overlay namespace intact: #/idea/N opens the overlay…
|
|
69
|
+
() => { location.hash = '#/idea/1';
|
|
70
|
+
return new Promise((r) => setTimeout(() => r(
|
|
71
|
+
document.querySelector('.deeplink-overlay, #deeplink') ? 'overlay OK' : 'OVERLAY BROKEN'), 400)); }
|
|
72
|
+
|
|
73
|
+
// …and #/task/N navigates to the task page (task-detail.js redirect).
|
|
74
|
+
() => { location.hash = '#/task/5'; return 'expect navigation to /task/5'; }
|
|
75
|
+
|
|
76
|
+
// 3. Index hash views: exactly one .view visible per hash.
|
|
77
|
+
() => ['#home', '#standing', '#leaderboard'].map((h) => { location.hash = h;
|
|
78
|
+
return `${h}:${[...document.querySelectorAll('main .view, main [id^="view-"]')]
|
|
79
|
+
.filter((v) => !v.hidden).length}`; }).join(' ') // each → :1
|
|
80
|
+
|
|
81
|
+
// 4. Goals sub-routes: #/goal/25 opens detail; back restores the list.
|
|
82
|
+
() => { location.hash = '#/goal/25'; return new Promise((r) => setTimeout(() =>
|
|
83
|
+
r(document.querySelector('#goal-detail, [data-goal-view="detail"]') ? 'detail OK' : 'BROKEN'), 400)); }
|
|
84
|
+
|
|
85
|
+
// 5. SSE nudge triggered one refetch (the harness emits a single nudge ~1.2s
|
|
86
|
+
// after connect): watch the network panel, or count via a fixture hit log line.
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Module gating: rerun the page with `--modules-off dev-box,provisioning` — the
|
|
90
|
+
Harbor nav item and the Instances/Start-a-project widgets must be absent, with
|
|
91
|
+
zero console errors.
|
|
92
|
+
|
|
93
|
+
## Gotchas
|
|
94
|
+
|
|
95
|
+
- **Worktrees have no `node_modules`** — the server resolves `express` via node's
|
|
96
|
+
upward walk (the main checkout's copy). The `src/` seams always load from *this*
|
|
97
|
+
tree, so a worktree's edits are exactly what renders.
|
|
98
|
+
- The harness serves pages **pre-auth** (its page handlers register before
|
|
99
|
+
`mountInternalSurfaces`). Auth-gated *page* behavior (sign-in redirects, Archon
|
|
100
|
+
gates) is server truth — do not judge it here; assets and 404s fall through to
|
|
101
|
+
the real internal-surface code.
|
|
102
|
+
- The SSE fixture logs one console error against JSON-fixture parsing on some
|
|
103
|
+
pages — pages tolerate it; a page's own console must otherwise be clean.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "requests": [] }
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"achievements": [
|
|
3
|
+
{
|
|
4
|
+
"id": "first-ship",
|
|
5
|
+
"name": "First Ship",
|
|
6
|
+
"description": "Ship your first task.",
|
|
7
|
+
"icon": "📦",
|
|
8
|
+
"credit_bonus": 1,
|
|
9
|
+
"sort_order": 10
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"id": "first-claim",
|
|
13
|
+
"name": "First Claim",
|
|
14
|
+
"description": "Claim your first task.",
|
|
15
|
+
"icon": "🪙",
|
|
16
|
+
"credit_bonus": 1,
|
|
17
|
+
"sort_order": 20
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "first-parallel-claim",
|
|
21
|
+
"name": "First Parallel Claim",
|
|
22
|
+
"description": "Hold two simultaneous claims; ship both successfully.",
|
|
23
|
+
"icon": "⚓",
|
|
24
|
+
"credit_bonus": 2,
|
|
25
|
+
"sort_order": 30
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "streak-3",
|
|
29
|
+
"name": "Streak: 3 Nights",
|
|
30
|
+
"description": "Ship a task in 3 consecutive local-time nights (>=15min; cleanup/refactor now counts).",
|
|
31
|
+
"icon": "🔥",
|
|
32
|
+
"credit_bonus": 2,
|
|
33
|
+
"sort_order": 40
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "streak-7",
|
|
37
|
+
"name": "Streak: 7 Nights",
|
|
38
|
+
"description": "Ship a task in 7 consecutive local-time nights (>=15min; cleanup/refactor now counts).",
|
|
39
|
+
"icon": "🌋",
|
|
40
|
+
"credit_bonus": 5,
|
|
41
|
+
"sort_order": 50
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "art-pipeline-shipper",
|
|
45
|
+
"name": "Art Pipeline Shipper",
|
|
46
|
+
"description": "Ship a task whose touches[] include the art/ pipeline.",
|
|
47
|
+
"icon": "🎨",
|
|
48
|
+
"credit_bonus": 2,
|
|
49
|
+
"sort_order": 60
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "subtractor",
|
|
53
|
+
"name": "Subtractor",
|
|
54
|
+
"description": "Earn the net-negative ship bonus on 3 ships — across your work you have deleted more than you have added.",
|
|
55
|
+
"icon": "🪓",
|
|
56
|
+
"credit_bonus": 2,
|
|
57
|
+
"sort_order": 65
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"id": "gds-shipper",
|
|
61
|
+
"name": "GDS Shipper",
|
|
62
|
+
"description": "Ship a task whose touches[] include src/gds/ or scripts/gds/.",
|
|
63
|
+
"icon": "⚙️",
|
|
64
|
+
"credit_bonus": 2,
|
|
65
|
+
"sort_order": 70
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"id": "breaking-the-100c-bar",
|
|
69
|
+
"name": "Breaking the 100c Bar",
|
|
70
|
+
"description": "Cross 100 total credits.",
|
|
71
|
+
"icon": "💯",
|
|
72
|
+
"credit_bonus": 5,
|
|
73
|
+
"sort_order": 80
|
|
74
|
+
}
|
|
75
|
+
]
|
|
76
|
+
}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
{
|
|
2
|
+
"builder_id": 95,
|
|
3
|
+
"window_days": 90,
|
|
4
|
+
"ship_rate": [
|
|
5
|
+
{
|
|
6
|
+
"day": "2026-06-22",
|
|
7
|
+
"n": 2
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"day": "2026-06-23",
|
|
11
|
+
"n": 3
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"day": "2026-06-25",
|
|
15
|
+
"n": 7
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"day": "2026-06-26",
|
|
19
|
+
"n": 8
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"day": "2026-06-27",
|
|
23
|
+
"n": 12
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"day": "2026-06-28",
|
|
27
|
+
"n": 17
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"day": "2026-06-29",
|
|
31
|
+
"n": 9
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"day": "2026-06-30",
|
|
35
|
+
"n": 5
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"day": "2026-07-02",
|
|
39
|
+
"n": 7
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"day": "2026-07-03",
|
|
43
|
+
"n": 17
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"day": "2026-07-04",
|
|
47
|
+
"n": 6
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"day": "2026-07-05",
|
|
51
|
+
"n": 11
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"day": "2026-07-10",
|
|
55
|
+
"n": 6
|
|
56
|
+
}
|
|
57
|
+
],
|
|
58
|
+
"cost_trend": [
|
|
59
|
+
{
|
|
60
|
+
"day": "2026-06-22",
|
|
61
|
+
"total_usd": 33.45,
|
|
62
|
+
"n_tasks": 0,
|
|
63
|
+
"per_work": 16.73
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"day": "2026-06-23",
|
|
67
|
+
"total_usd": 131.56,
|
|
68
|
+
"n_tasks": 0,
|
|
69
|
+
"per_work": 33
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"day": "2026-06-24",
|
|
73
|
+
"total_usd": 0,
|
|
74
|
+
"n_tasks": 0,
|
|
75
|
+
"per_work": 33
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"day": "2026-06-25",
|
|
79
|
+
"total_usd": 194.21,
|
|
80
|
+
"n_tasks": 0,
|
|
81
|
+
"per_work": 29.94
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"day": "2026-06-26",
|
|
85
|
+
"total_usd": 74.35,
|
|
86
|
+
"n_tasks": 0,
|
|
87
|
+
"per_work": 21.68
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"day": "2026-06-27",
|
|
91
|
+
"total_usd": 16.08,
|
|
92
|
+
"n_tasks": 0,
|
|
93
|
+
"per_work": 14.05
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"day": "2026-06-28",
|
|
97
|
+
"total_usd": 24.24,
|
|
98
|
+
"n_tasks": 0,
|
|
99
|
+
"per_work": 9.67
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"day": "2026-06-29",
|
|
103
|
+
"total_usd": 57.04,
|
|
104
|
+
"n_tasks": 0,
|
|
105
|
+
"per_work": 9.15
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"day": "2026-07-02",
|
|
109
|
+
"total_usd": 198.6,
|
|
110
|
+
"n_tasks": 0,
|
|
111
|
+
"per_work": 10.42
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"day": "2026-07-03",
|
|
115
|
+
"total_usd": 297.04,
|
|
116
|
+
"n_tasks": 0,
|
|
117
|
+
"per_work": 11.8
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"day": "2026-07-04",
|
|
121
|
+
"total_usd": 0.74,
|
|
122
|
+
"n_tasks": 0,
|
|
123
|
+
"per_work": 11.05
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"day": "2026-07-05",
|
|
127
|
+
"total_usd": 154.61,
|
|
128
|
+
"n_tasks": 0,
|
|
129
|
+
"per_work": 11.36
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"day": "2026-07-06",
|
|
133
|
+
"total_usd": 0.6,
|
|
134
|
+
"n_tasks": 0,
|
|
135
|
+
"per_work": 11.37
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"day": "2026-07-10",
|
|
139
|
+
"total_usd": 59.44,
|
|
140
|
+
"n_tasks": 0,
|
|
141
|
+
"per_work": 11.29
|
|
142
|
+
}
|
|
143
|
+
],
|
|
144
|
+
"duration_trend": [
|
|
145
|
+
{
|
|
146
|
+
"day": "2026-06-22",
|
|
147
|
+
"avg_actual": 28,
|
|
148
|
+
"avg_est": 40
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"day": "2026-06-23",
|
|
152
|
+
"avg_actual": 125,
|
|
153
|
+
"avg_est": 147
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"day": "2026-06-25",
|
|
157
|
+
"avg_actual": 242,
|
|
158
|
+
"avg_est": 283
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"day": "2026-06-26",
|
|
162
|
+
"avg_actual": 16,
|
|
163
|
+
"avg_est": 184
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"day": "2026-06-27",
|
|
167
|
+
"avg_actual": 12,
|
|
168
|
+
"avg_est": 154
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"day": "2026-06-28",
|
|
172
|
+
"avg_actual": 85,
|
|
173
|
+
"avg_est": 140
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"day": "2026-06-29",
|
|
177
|
+
"avg_actual": 19,
|
|
178
|
+
"avg_est": 221
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"day": "2026-06-30",
|
|
182
|
+
"avg_actual": 12,
|
|
183
|
+
"avg_est": 150
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"day": "2026-07-03",
|
|
187
|
+
"avg_actual": 15,
|
|
188
|
+
"avg_est": 60
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"day": "2026-07-04",
|
|
192
|
+
"avg_actual": 17,
|
|
193
|
+
"avg_est": 270
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"day": "2026-07-05",
|
|
197
|
+
"avg_actual": 8,
|
|
198
|
+
"avg_est": 65
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"day": "2026-07-10",
|
|
202
|
+
"avg_actual": 8,
|
|
203
|
+
"avg_est": 108
|
|
204
|
+
}
|
|
205
|
+
],
|
|
206
|
+
"grade_trend": [],
|
|
207
|
+
"top_kinds": [
|
|
208
|
+
{
|
|
209
|
+
"kind": "feature",
|
|
210
|
+
"n": 62
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"kind": "refactor",
|
|
214
|
+
"n": 12
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"kind": "bug",
|
|
218
|
+
"n": 11
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"kind": "infra",
|
|
222
|
+
"n": 7
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"kind": "decision",
|
|
226
|
+
"n": 6
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"kind": "cleanup",
|
|
230
|
+
"n": 5
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
"kind": "learning-capture",
|
|
234
|
+
"n": 4
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"kind": "spike",
|
|
238
|
+
"n": 3
|
|
239
|
+
}
|
|
240
|
+
],
|
|
241
|
+
"headline": {
|
|
242
|
+
"total_shipped": 110,
|
|
243
|
+
"total_cost_usd": 1241.96,
|
|
244
|
+
"cost_per_task": 11.29,
|
|
245
|
+
"avg_duration_min": 39,
|
|
246
|
+
"confirmation_rate": 0.85,
|
|
247
|
+
"resolved_claims": 136,
|
|
248
|
+
"grade_pass_rate": null,
|
|
249
|
+
"graded_n": 0
|
|
250
|
+
}
|
|
251
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "rows": [] }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "totals_by_builder": [], "ledger": [] }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "claims": [] }
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"builders": [
|
|
3
|
+
{
|
|
4
|
+
"id": "25",
|
|
5
|
+
"github_login": "IAMMASTERQUA",
|
|
6
|
+
"display_name": "IAMMASTERQUA",
|
|
7
|
+
"avatar_url": "https://avatars.githubusercontent.com/u/290184380?v=4",
|
|
8
|
+
"rank": "metic"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"id": "95",
|
|
12
|
+
"github_login": "jaxri",
|
|
13
|
+
"display_name": "Jackson Rini",
|
|
14
|
+
"avatar_url": "https://avatars.githubusercontent.com/u/64553469?v=4",
|
|
15
|
+
"rank": "metic"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "3",
|
|
19
|
+
"github_login": "LarsCode",
|
|
20
|
+
"display_name": "LarsCode",
|
|
21
|
+
"avatar_url": "https://avatars.githubusercontent.com/u/35337514?v=4",
|
|
22
|
+
"rank": "xenos"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "51",
|
|
26
|
+
"github_login": "MrTenkpro",
|
|
27
|
+
"display_name": "MrTenkpro",
|
|
28
|
+
"avatar_url": "https://avatars.githubusercontent.com/u/291558470?v=4",
|
|
29
|
+
"rank": "xenos"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "50",
|
|
33
|
+
"github_login": "Svensson-CMD",
|
|
34
|
+
"display_name": "Svensson-CMD",
|
|
35
|
+
"avatar_url": "https://avatars.githubusercontent.com/u/290959655?v=4",
|
|
36
|
+
"rank": "xenos"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "71",
|
|
40
|
+
"github_login": "erikwils",
|
|
41
|
+
"display_name": "erikwils",
|
|
42
|
+
"avatar_url": "https://avatars.githubusercontent.com/u/51457175?v=4",
|
|
43
|
+
"rank": "xenos"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "70",
|
|
47
|
+
"github_login": "kingaonline",
|
|
48
|
+
"display_name": "kingaonline",
|
|
49
|
+
"avatar_url": "https://avatars.githubusercontent.com/u/293641659?v=4",
|
|
50
|
+
"rank": "thetes"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"id": "57",
|
|
54
|
+
"github_login": "largekristensen-svg",
|
|
55
|
+
"display_name": "largekristensen-svg",
|
|
56
|
+
"avatar_url": "https://avatars.githubusercontent.com/u/292408002?v=4",
|
|
57
|
+
"rank": "xenos"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"id": "1",
|
|
61
|
+
"github_login": "lars589",
|
|
62
|
+
"display_name": "lars589",
|
|
63
|
+
"avatar_url": "https://avatars.githubusercontent.com/u/283020391?v=4",
|
|
64
|
+
"rank": "archon"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "94",
|
|
68
|
+
"github_login": "scootermack",
|
|
69
|
+
"display_name": "scootermack",
|
|
70
|
+
"avatar_url": "https://avatars.githubusercontent.com/u/295990394?v=4",
|
|
71
|
+
"rank": "metic"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"id": "27",
|
|
75
|
+
"github_login": "willHermesLines",
|
|
76
|
+
"display_name": "willHermesLines",
|
|
77
|
+
"avatar_url": "https://avatars.githubusercontent.com/u/267458743?v=4",
|
|
78
|
+
"rank": "xenos"
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "builders": [] }
|