@bongos/core 1.19.801 → 1.19.803

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.
@@ -269,10 +269,10 @@
269
269
  "text": "Task {…}",
270
270
  "occurrences": 4,
271
271
  "at": [
272
- "modules/hall-ui/public/task.js:451",
273
- "modules/hall-ui/public/task.js:460",
274
- "modules/hall-ui/public/task.js:688",
275
- "modules/hall-ui/public/task.js:700"
272
+ "modules/hall-ui/public/task.js:455",
273
+ "modules/hall-ui/public/task.js:464",
274
+ "modules/hall-ui/public/task.js:693",
275
+ "modules/hall-ui/public/task.js:705"
276
276
  ]
277
277
  },
278
278
  {
@@ -348,8 +348,8 @@
348
348
  "text": "Copy prompt",
349
349
  "occurrences": 3,
350
350
  "at": [
351
- "modules/hall-ui/public/task.js:614",
352
- "modules/hall-ui/public/task.js:634",
351
+ "modules/hall-ui/public/task.js:619",
352
+ "modules/hall-ui/public/task.js:639",
353
353
  "modules/hall-ui/public/work.js:599"
354
354
  ]
355
355
  },
@@ -700,7 +700,7 @@
700
700
  "occurrences": 2,
701
701
  "at": [
702
702
  "modules/hall-ui/public/project-settings.js:242",
703
- "modules/hall-ui/public/task.js:707"
703
+ "modules/hall-ui/public/task.js:712"
704
704
  ]
705
705
  },
706
706
  {
@@ -2692,7 +2692,7 @@
2692
2692
  "surface": "builders-hall",
2693
2693
  "text": "Awaiting the grader, or a confirmation, before it can ship.",
2694
2694
  "file": "modules/hall-ui/public/task.js",
2695
- "line": 604,
2695
+ "line": 609,
2696
2696
  "origin": "js-markup",
2697
2697
  "confidence": "certain"
2698
2698
  },
@@ -3106,7 +3106,7 @@
3106
3106
  "surface": "builders-hall",
3107
3107
  "text": "Choose a goal first.",
3108
3108
  "file": "modules/hall-ui/public/task.js",
3109
- "line": 663,
3109
+ "line": 668,
3110
3110
  "origin": "js-notice",
3111
3111
  "confidence": "certain"
3112
3112
  },
@@ -3412,7 +3412,7 @@
3412
3412
  "surface": "builders-hall",
3413
3413
  "text": "Confirm that verification for #{…} actually passed?",
3414
3414
  "file": "modules/hall-ui/public/task.js",
3415
- "line": 649,
3415
+ "line": 654,
3416
3416
  "origin": "js-notice",
3417
3417
  "confidence": "certain"
3418
3418
  },
@@ -3547,7 +3547,7 @@
3547
3547
  "surface": "builders-hall",
3548
3548
  "text": "Copy prompt",
3549
3549
  "file": "modules/hall-ui/public/task.js",
3550
- "line": 614,
3550
+ "line": 619,
3551
3551
  "origin": "js-markup",
3552
3552
  "confidence": "certain"
3553
3553
  },
@@ -3556,7 +3556,7 @@
3556
3556
  "surface": "builders-hall",
3557
3557
  "text": "Copy prompt",
3558
3558
  "file": "modules/hall-ui/public/task.js",
3559
- "line": 634,
3559
+ "line": 639,
3560
3560
  "origin": "js-text-assign",
3561
3561
  "confidence": "certain"
3562
3562
  },
@@ -3790,7 +3790,7 @@
3790
3790
  "surface": "builders-hall",
3791
3791
  "text": "Could not load",
3792
3792
  "file": "modules/hall-ui/public/task.js",
3793
- "line": 707,
3793
+ "line": 712,
3794
3794
  "origin": "js-text-assign",
3795
3795
  "confidence": "certain"
3796
3796
  },
@@ -3934,7 +3934,7 @@
3934
3934
  "surface": "builders-hall",
3935
3935
  "text": "Could not load {…}",
3936
3936
  "file": "modules/hall-ui/public/task.js",
3937
- "line": 700,
3937
+ "line": 705,
3938
3938
  "origin": "js-markup",
3939
3939
  "confidence": "certain"
3940
3940
  },
@@ -5131,7 +5131,7 @@
5131
5131
  "surface": "builders-hall",
5132
5132
  "text": "Full log",
5133
5133
  "file": "modules/hall-ui/public/task.js",
5134
- "line": 440,
5134
+ "line": 444,
5135
5135
  "origin": "js-markup",
5136
5136
  "confidence": "certain"
5137
5137
  },
@@ -6049,7 +6049,7 @@
6049
6049
  "surface": "builders-hall",
6050
6050
  "text": "Last claimed by",
6051
6051
  "file": "modules/hall-ui/public/task.js",
6052
- "line": 546,
6052
+ "line": 551,
6053
6053
  "origin": "js-markup",
6054
6054
  "confidence": "certain"
6055
6055
  },
@@ -6553,7 +6553,7 @@
6553
6553
  "surface": "builders-hall",
6554
6554
  "text": "Move to goal",
6555
6555
  "file": "modules/hall-ui/public/task.js",
6556
- "line": 507,
6556
+ "line": 511,
6557
6557
  "origin": "js-markup",
6558
6558
  "confidence": "certain"
6559
6559
  },
@@ -6859,7 +6859,7 @@
6859
6859
  "surface": "builders-hall",
6860
6860
  "text": "No open goals in this version",
6861
6861
  "file": "modules/hall-ui/public/task.js",
6862
- "line": 506,
6862
+ "line": 510,
6863
6863
  "origin": "js-markup",
6864
6864
  "confidence": "certain"
6865
6865
  },
@@ -7003,7 +7003,7 @@
7003
7003
  "surface": "builders-hall",
7004
7004
  "text": "Not found",
7005
7005
  "file": "modules/hall-ui/public/task.js",
7006
- "line": 695,
7006
+ "line": 700,
7007
7007
  "origin": "js-text-assign",
7008
7008
  "confidence": "certain"
7009
7009
  },
@@ -7291,7 +7291,7 @@
7291
7291
  "surface": "builders-hall",
7292
7292
  "text": "Open in Sessions",
7293
7293
  "file": "modules/hall-ui/public/task.js",
7294
- "line": 440,
7294
+ "line": 444,
7295
7295
  "origin": "js-markup",
7296
7296
  "confidence": "certain"
7297
7297
  },
@@ -7975,7 +7975,7 @@
7975
7975
  "surface": "builders-hall",
7976
7976
  "text": "Read the handoff notes",
7977
7977
  "file": "modules/hall-ui/public/task.js",
7978
- "line": 438,
7978
+ "line": 442,
7979
7979
  "origin": "js-markup",
7980
7980
  "confidence": "certain"
7981
7981
  },
@@ -8731,7 +8731,7 @@
8731
8731
  "surface": "builders-hall",
8732
8732
  "text": "Session log{…}",
8733
8733
  "file": "modules/hall-ui/public/task.js",
8734
- "line": 444,
8734
+ "line": 448,
8735
8735
  "origin": "js-markup",
8736
8736
  "confidence": "certain"
8737
8737
  },
@@ -8830,7 +8830,7 @@
8830
8830
  "surface": "builders-hall",
8831
8831
  "text": "Ship it",
8832
8832
  "file": "modules/hall-ui/public/task.js",
8833
- "line": 600,
8833
+ "line": 605,
8834
8834
  "origin": "js-markup",
8835
8835
  "confidence": "certain"
8836
8836
  },
@@ -8848,7 +8848,7 @@
8848
8848
  "surface": "builders-hall",
8849
8849
  "text": "Shipped {…}{…}, {…}.",
8850
8850
  "file": "modules/hall-ui/public/task.js",
8851
- "line": 581,
8851
+ "line": 586,
8852
8852
  "origin": "js-markup",
8853
8853
  "confidence": "certain"
8854
8854
  },
@@ -9271,7 +9271,7 @@
9271
9271
  "surface": "builders-hall",
9272
9272
  "text": "Task {…}",
9273
9273
  "file": "modules/hall-ui/public/task.js",
9274
- "line": 451,
9274
+ "line": 455,
9275
9275
  "origin": "js-text-assign",
9276
9276
  "confidence": "certain"
9277
9277
  },
@@ -9280,7 +9280,7 @@
9280
9280
  "surface": "builders-hall",
9281
9281
  "text": "Task {…}",
9282
9282
  "file": "modules/hall-ui/public/task.js",
9283
- "line": 460,
9283
+ "line": 464,
9284
9284
  "origin": "js-markup",
9285
9285
  "confidence": "certain"
9286
9286
  },
@@ -9289,7 +9289,7 @@
9289
9289
  "surface": "builders-hall",
9290
9290
  "text": "Task {…}",
9291
9291
  "file": "modules/hall-ui/public/task.js",
9292
- "line": 688,
9292
+ "line": 693,
9293
9293
  "origin": "js-markup",
9294
9294
  "confidence": "certain"
9295
9295
  },
@@ -9298,7 +9298,7 @@
9298
9298
  "surface": "builders-hall",
9299
9299
  "text": "Task {…}",
9300
9300
  "file": "modules/hall-ui/public/task.js",
9301
- "line": 700,
9301
+ "line": 705,
9302
9302
  "origin": "js-markup",
9303
9303
  "confidence": "certain"
9304
9304
  },
@@ -9334,7 +9334,7 @@
9334
9334
  "surface": "builders-hall",
9335
9335
  "text": "Tasks in the ledger are numbered separately from GitHub pull requests, so this may be a PR number rather than a task. The work board lists everything that does exist.",
9336
9336
  "file": "modules/hall-ui/public/task.js",
9337
- "line": 688,
9337
+ "line": 693,
9338
9338
  "origin": "js-markup",
9339
9339
  "confidence": "certain"
9340
9340
  },
@@ -9451,7 +9451,7 @@
9451
9451
  "surface": "builders-hall",
9452
9452
  "text": "The adversarial panel. Each worker reports pass, concerns or fail on its own; the gating workers must all pass before confirmed becomes {…}, and one concerns falls the task through to the manual confirm path.",
9453
9453
  "file": "modules/hall-ui/public/task.js",
9454
- "line": 388,
9454
+ "line": 392,
9455
9455
  "origin": "js-markup",
9456
9456
  "confidence": "certain"
9457
9457
  },
@@ -9568,7 +9568,7 @@
9568
9568
  "surface": "builders-hall",
9569
9569
  "text": "The grading panel could not run when this task was shipped, so no quality signal was recorded — an outage, not a verdict.",
9570
9570
  "file": "modules/hall-ui/public/task.js",
9571
- "line": 370,
9571
+ "line": 374,
9572
9572
  "origin": "js-markup",
9573
9573
  "confidence": "certain"
9574
9574
  },
@@ -9892,7 +9892,7 @@
9892
9892
  "surface": "builders-hall",
9893
9893
  "text": "The task feed did not answer. Nothing on the record has changed, only the read failed. Try again in a moment, or go back.",
9894
9894
  "file": "modules/hall-ui/public/task.js",
9895
- "line": 700,
9895
+ "line": 705,
9896
9896
  "origin": "js-markup",
9897
9897
  "confidence": "certain"
9898
9898
  },
@@ -10198,7 +10198,7 @@
10198
10198
  "surface": "builders-hall",
10199
10199
  "text": "This task has shipped and its credits have landed. Neither Ship it nor Confirm is available.",
10200
10200
  "file": "modules/hall-ui/public/task.js",
10201
- "line": 609,
10201
+ "line": 614,
10202
10202
  "origin": "js-markup",
10203
10203
  "confidence": "certain"
10204
10204
  },
@@ -12556,7 +12556,7 @@
12556
12556
  "surface": "builders-hall",
12557
12557
  "text": "verdict {…}",
12558
12558
  "file": "modules/hall-ui/public/task.js",
12559
- "line": 392,
12559
+ "line": 396,
12560
12560
  "origin": "js-markup",
12561
12561
  "confidence": "certain"
12562
12562
  },
@@ -12799,7 +12799,7 @@
12799
12799
  "surface": "builders-hall",
12800
12800
  "text": "{…} awarded",
12801
12801
  "file": "modules/hall-ui/public/task.js",
12802
- "line": 435,
12802
+ "line": 439,
12803
12803
  "origin": "js-markup",
12804
12804
  "confidence": "certain"
12805
12805
  },
@@ -12952,7 +12952,7 @@
12952
12952
  "surface": "builders-hall",
12953
12953
  "text": "{…} sessions",
12954
12954
  "file": "modules/hall-ui/public/task.js",
12955
- "line": 443,
12955
+ "line": 447,
12956
12956
  "origin": "js-markup",
12957
12957
  "confidence": "certain"
12958
12958
  },
@@ -13177,7 +13177,7 @@
13177
13177
  "surface": "builders-hall",
13178
13178
  "text": "{…}, no such task",
13179
13179
  "file": "modules/hall-ui/public/task.js",
13180
- "line": 688,
13180
+ "line": 693,
13181
13181
  "origin": "js-markup",
13182
13182
  "confidence": "certain"
13183
13183
  },
@@ -13222,7 +13222,7 @@
13222
13222
  "surface": "builders-hall",
13223
13223
  "text": "{…}{…} · {…}",
13224
13224
  "file": "modules/hall-ui/public/task.js",
13225
- "line": 543,
13225
+ "line": 548,
13226
13226
  "origin": "js-markup",
13227
13227
  "confidence": "certain"
13228
13228
  },
package/docs/file-map.md CHANGED
@@ -443,6 +443,7 @@ tests/
443
443
  ```
444
444
  .claude/scheduled-tasks/
445
445
  ├── artifact-audit/SKILL.md ← weekly artifact audit (task 1003200): every task at shipped/confirmed/completed that DECLARES a code artifact is checked against main's commit messages AND the content of its tracked files — both, because a fix can land under another branch and be cited only in a comment (task 1003212). Anything unproven is filed as a blocker, deduped on the finding set. Scoped to ships on/after the ship-assurance gate (2026-08-19, ADR 0184), before which a DB-only ship recorded no declaration and silence proves nothing. FIRED BY .github/workflows/artifact-audit.yml, Mondays 06:23 UTC — `cadence: weekly` here and that cron must agree or fitness Check 25 (scripts/gds/routine-schedule.js) fails the gate (task 1003209, ADR 0188)
446
+ ├── artifact-staleness/SKILL.md ← freshness backstop for the gitignored deploy-generated navigation docs (task 1001930, ADR 0110 pt.5): docs/repo-map.md and docs/session-log-index.md are untracked, so no PR gate can see them and a broken deploy regen step leaves a stale or missing map with only a journald line as the alarm. Asks each artifact's own generator (--check-whole) whether it still matches the served commit, reports absent and stale separately, and posts findings to Discord #ship-news itself. INSTANCE-SIDE ONLY — a fresh CI clone legitimately lacks these files, so it declares no cadence and no workflow fires it; config/scheduled-routines.json records the intended daily cadence.
446
447
  ├── bfg/SKILL.md ← nightly BFG pass (MAS Phase 6, ADR 0026) — doc/memory hygiene + DB counter-vs-ledger drift (Part A), per-builder interaction scoring into transferable-practice suggestions (Part B), and the audited cross-builder memory write (Part C, OFF unless BFG_WRITE_ENABLED) (restored in task 1003365; unscheduled in core — only redteam-weekly has a firing workflow; config/scheduled-routines.json records the intended cadence)
447
448
  ├── bfg-session-eval/SKILL.md ← nightly session-inefficiency evaluator (MAS Phase 6D, ADR 0027) — mines the session corpus for wasteful sessions and files the fixes as idea_inbox rows plus a docs/audits report (restored in task 1003365; unscheduled in core — only redteam-weekly has a firing workflow; config/scheduled-routines.json records the intended cadence)
448
449
  ├── box-dormant-reclaim/SKILL.md ← daily control-plane sweep that fully de-provisions dev boxes parked longer than BOX_DORMANT_DAYS, destroying the leftover snapshot and pinging the builder (ADR 0031 §5(a)); a no-op on an instance with no managed boxes (restored in task 1003365; unscheduled in core — only redteam-weekly has a firing workflow; config/scheduled-routines.json records the intended cadence)
@@ -2076,5 +2076,9 @@ is load-bearing: the script throws rather than guess if it is missing, and
2076
2076
  landed since 1.19.799 with no explicit bump. run 35172784518. (task 1002620)
2077
2077
  1.19.801 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2078
2078
  landed since 1.19.800 with no explicit bump. run 35173442594. (task 1002620)
2079
+ 1.19.802 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2080
+ landed since 1.19.801 with no explicit bump. run 35174865190. (task 1002620)
2081
+ 1.19.803 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2082
+ landed since 1.19.802 with no explicit bump. run 35175617185. (task 1002620)
2079
2083
  ---------------------------------------------------------------------------
2080
2084
  ```
@@ -275,11 +275,15 @@
275
275
  // hall renders. Only figures the record actually CARRIES are drawn: most tasks
276
276
  // have no recorded actual, and a band of dashes reads as a broken record
277
277
  // rather than an honest one. Under two figures there is no band at all.
278
+ // A fourth element is an optional `title` for the cell — for a figure whose
279
+ // label is shorter than what the number actually counts. 'Actual' is the case
280
+ // it exists for (task 1003964): it is claimed-session time, so a re-graded
281
+ // task's recovery session is not in it, and the bare word promises otherwise.
278
282
  function figureBand(figs) {
279
283
  const present = figs.filter((f) => f && f[1] != null && f[1] !== '');
280
284
  if (present.length < 2) return '';
281
- const cells = present.map(([label, value, unit]) =>
282
- `<div class="rec-fig"><span class="rec-fig__l">${escapeHtml(label)}</span>` +
285
+ const cells = present.map(([label, value, unit, title]) =>
286
+ `<div class="rec-fig"${title ? ` title="${escapeHtml(title)}"` : ''}><span class="rec-fig__l">${escapeHtml(label)}</span>` +
283
287
  `<span class="rec-fig__v">${escapeHtml(String(value))}` +
284
288
  `${unit ? `<u class="rec-fig__u">${escapeHtml(unit)}</u>` : ''}</span></div>`).join('');
285
289
  return `<div class="rec-figs">${cells}</div>`;
@@ -520,7 +524,8 @@
520
524
  parts.push(figureBand([
521
525
  [window.OTBBranding?.taskCreditLabel?.(t) ?? curLabel(), creditVal],
522
526
  ['Estimated', t.est_minutes, 'm'],
523
- ['Actual', t.actual_minutes, 'm'],
527
+ ['Actual', t.actual_minutes, 'm',
528
+ 'Time measured across this task\u2019s claimed sessions. A re-grade has no claim, so a re-graded task\u2019s recovery session is not counted here.'],
524
529
  ['Priority', t.priority == null ? null : 'P' + t.priority],
525
530
  ]));
526
531
  parts.push(lifecycleRail(t, creditVal));
@@ -60,6 +60,13 @@ async function recentShippedTasks(limit = 30, { days = null } = {}) {
60
60
 
61
61
  // Rolling median of actual/est ratio for a builder's last N shipped tasks.
62
62
  // Returns null if there is insufficient data.
63
+ //
64
+ // actual_minutes is CLAIMED-session time (see the note at the recompute in
65
+ // db-ship.js, task 1003964). A task that was re-graded carries only its first
66
+ // attempt's figure, so its ratio understates the work — deliberately, because no
67
+ // defensible clock exists for a claimless window. It is noise in a median, not a
68
+ // bias worth correcting for: every re-grade pulls the same direction, and the
69
+ // sample is dominated by tasks that were never re-graded.
63
70
 
64
71
  async function getEstVsActualRatio(builderId, limit = 10) {
65
72
  const { rows } = await pool.query(
@@ -221,9 +221,30 @@ async function resolveClaim({ claimId, builderId, outcome, notesMd, valueSummary
221
221
  );
222
222
  }
223
223
 
224
- // Write the session_logs entry + recompute actual_minutes FIRST, so the
225
- // grader (below) can see a fresh actual_minutes value when scoring the
226
- // est/actual ratio criterion.
224
+ // WHAT actual_minutes MEANS, and what it deliberately does not (task 1003964).
225
+ //
226
+ // It is the SUM of every session_logs row for the task, and session_logs rows
227
+ // are sealed per CLAIM — so the field measures CLAIMED session time, nothing
228
+ // else. A --regrade has no claim (that is the defining property of the
229
+ // #678 path): it never reaches resolveClaim, seals no row, and does not
230
+ // recompute. The recovery session's time is therefore NOT counted, and a
231
+ // re-graded task keeps the figure its first attempt measured.
232
+ //
233
+ // That is a DECISION, not an oversight. A claimless window has no defensible
234
+ // start: the prior grade's timestamp puts the whole gap between attempts in
235
+ // the sum (task 1002343 would have recorded ~3 days instead of 19 minutes —
236
+ // worse than stale, and calibration reads this field), and the ship's own
237
+ // session digest measures a Claude Code session, which routinely spans
238
+ // several tasks and is absent entirely outside an interactive session.
239
+ //
240
+ // The ordering below is NOT for the grader, whatever this comment used to
241
+ // say. V3.R18 (#209) moved the grader out of resolveClaim — see the block
242
+ // after this one — and the live panel never receives actual_minutes at all
243
+ // (modules/grading/grader-prompt.js buildPrompt prints est_minutes only;
244
+ // scoreEstActualBand lives in gradeDeterministic, whose one non-test caller
245
+ // is the retroactive audit in scripts/gds/audit-ships.js). The seal must
246
+ // still precede the recompute, because the recompute SUMs the row it writes.
247
+ // tests/regrade_actual_minutes.mjs pins the panel half of that.
227
248
  await sealSessionLog(client, {
228
249
  builderId, taskId: claim.task_id, claimId, startedAt: claim.claimed_at,
229
250
  outcome, notesMd: notesMd ?? null,
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.19.801",
3
+ "version": "1.19.803",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.19.801",
9
+ "version": "1.19.803",
10
10
  "license": "AGPL-3.0-or-later",
11
11
  "dependencies": {
12
12
  "express": "^4.21.2",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.19.801",
3
+ "version": "1.19.803",
4
4
  "description": "Cloud Bongos — the AI-first build platform core (GDS + platform surfaces + module system), installed as a versioned dependency (ADR 0108).",
5
5
  "license": "AGPL-3.0-or-later",
6
6
  "main": "src/platform-server.js",