@bongos/core 1.22.1 → 1.23.1

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.
Files changed (160) hide show
  1. package/.bongos-core.json +186 -161
  2. package/docs/copy-inventory.md +1 -1
  3. package/docs/copy-registry.json +1 -1
  4. package/docs/module-api-changelog.md +8 -0
  5. package/docs/page-readings.json +40 -40
  6. package/modules/agents/lib/answer-hold.js +1 -1
  7. package/modules/agents/lib/fire-budget.js +1 -1
  8. package/modules/autonomy/cadence.js +3 -3
  9. package/modules/autonomy/config-idle.js +1 -1
  10. package/modules/autonomy/fence.js +1 -1
  11. package/modules/autonomy/gauge.js +2 -2
  12. package/modules/autonomy/governor-docket.js +0 -1
  13. package/modules/autonomy/server-schedule.js +1 -1
  14. package/modules/builder-settings/builder-needs.js +1 -3
  15. package/modules/builder-settings/event-sound-prefs.js +0 -1
  16. package/modules/builder-settings/law-locks.js +0 -1
  17. package/modules/builder-settings/model-alloc-prefs.js +0 -5
  18. package/modules/builder-settings/profile-nudge-prefs.js +0 -1
  19. package/modules/builder-settings/render-prefs.js +0 -1
  20. package/modules/builder-settings/skill-prefs.js +0 -2
  21. package/modules/builder-settings/sound-prefs.js +0 -3
  22. package/modules/builder-settings/wandering-prefs.js +0 -2
  23. package/modules/copy-desk/artist-stats.js +1 -1
  24. package/modules/copy-desk/flags.js +1 -1
  25. package/modules/copy-desk/guarded-lines.js +1 -1
  26. package/modules/copy-desk/page-status.js +0 -5
  27. package/modules/copy-desk/proposals.js +0 -2
  28. package/modules/copy-desk/registry.js +1 -1
  29. package/modules/copy-desk/stuck-tweaks.js +1 -1
  30. package/modules/economy/credits-by-craft.js +0 -2
  31. package/modules/economy/streak.js +0 -3
  32. package/modules/government/asks-db.js +1 -1
  33. package/modules/government/asks.js +0 -1
  34. package/modules/government/decision-board.js +0 -1
  35. package/modules/government/docket.js +0 -6
  36. package/modules/government/leads.js +0 -1
  37. package/modules/government/positions.js +1 -1
  38. package/modules/government/recommendations.js +0 -3
  39. package/modules/government/routing.js +1 -1
  40. package/modules/government/treasury-db.js +1 -1
  41. package/modules/government/treasury.js +2 -2
  42. package/modules/grading/grade-engine.js +0 -1
  43. package/modules/hall-ui/public/deploy.js +3 -3
  44. package/modules/hall-ui/public/dom-utils.js +5 -1
  45. package/modules/hall-ui/public/genesis-home.js +1 -1
  46. package/modules/ideas/completeness.js +1 -1
  47. package/modules/ideas/descent.js +0 -1
  48. package/modules/ideas/governor-docket.js +0 -2
  49. package/modules/ideas/idea-state.js +0 -1
  50. package/modules/ideas/ideator-stats.js +1 -1
  51. package/modules/ideas/votes.js +1 -1
  52. package/modules/lifecycle/autopickup-files.js +0 -3
  53. package/modules/lifecycle/conflict-resolve.js +0 -1
  54. package/modules/lifecycle/criterion-uat-db.js +0 -4
  55. package/modules/lifecycle/dead-deps.js +2 -2
  56. package/modules/lifecycle/est-advisory.js +1 -1
  57. package/modules/lifecycle/github-push.js +1 -2
  58. package/modules/lifecycle/goal-category.js +0 -3
  59. package/modules/lifecycle/goal-spec-task.js +1 -1
  60. package/modules/lifecycle/governor-docket.js +0 -1
  61. package/modules/lifecycle/kickoff-seed.js +1 -1
  62. package/modules/lifecycle/mingle.js +3 -3
  63. package/modules/lifecycle/page-tweak-claim.js +1 -1
  64. package/modules/lifecycle/rebase-gate.js +1 -1
  65. package/modules/lifecycle/removal-derivation.js +0 -1
  66. package/modules/lifecycle/routes/abandon-handler.js +1 -1
  67. package/modules/lifecycle/routes/version-route-authz.js +0 -1
  68. package/modules/lifecycle/ship-card.js +1 -1
  69. package/modules/lifecycle/ship-preflight.js +0 -1
  70. package/modules/lifecycle/sky.js +1 -1
  71. package/modules/lifecycle/task-classifier.js +0 -1
  72. package/modules/lifecycle/task-visuals.js +0 -2
  73. package/modules/lifecycle/version-close.js +0 -1
  74. package/modules/memory/memory.js +0 -1
  75. package/modules/memory/search-chunker.js +1 -1
  76. package/modules/memory/search.js +0 -3
  77. package/modules/npm-release/preview/divert.js +1 -1
  78. package/modules/npm-release/preview/runtime.js +1 -1
  79. package/modules/npm-release/preview/supervisor.js +2 -1
  80. package/modules/onboarding/founding-builders.js +1 -1
  81. package/modules/onboarding/founding-mode.js +1 -1
  82. package/modules/onboarding/howto-guide.js +1 -1
  83. package/modules/onboarding/howto-state.js +1 -1
  84. package/modules/onboarding/onboarding-state.js +0 -4
  85. package/modules/onboarding/onboarding.js +0 -6
  86. package/modules/page-notes/notes.js +0 -1
  87. package/modules/platform-identity/community-leaderboard.js +0 -1
  88. package/modules/platform-identity/hub-keys.js +0 -2
  89. package/modules/platform-identity/instance-feedback.js +0 -1
  90. package/modules/platform-identity/project-stats.js +2 -1
  91. package/modules/platform-identity/read-rate-limit.js +1 -1
  92. package/modules/platform-identity/visibility-pull.js +0 -9
  93. package/modules/provisioning/app-status.js +1 -1
  94. package/modules/provisioning/catalog-bridge.js +0 -1
  95. package/modules/provisioning/core-upgrade.js +1 -1
  96. package/modules/provisioning/credential-preflight.js +1 -1
  97. package/modules/provisioning/demo.js +2 -2
  98. package/modules/provisioning/look.js +1 -1
  99. package/modules/provisioning/routes/callback-page.js +1 -1
  100. package/modules/raise/raise.js +1 -1
  101. package/modules/render-deploy/deploys.js +1 -1
  102. package/modules/security/artifact-scan/aggregate.js +0 -4
  103. package/modules/security/artifact-scan/detectors/capabilities.js +1 -1
  104. package/modules/security/artifact-scan/detectors/config-obfuscation.js +1 -1
  105. package/modules/security/artifact-scan/detectors/credentials.js +1 -1
  106. package/modules/security/artifact-scan/detectors/dependencies.js +1 -1
  107. package/modules/security/artifact-scan/detectors/injection.js +1 -1
  108. package/modules/security/artifact-scan/detectors/network.js +1 -1
  109. package/modules/security/artifact-scan/detectors/npm-lifecycle.js +1 -1
  110. package/modules/security/artifact-scan/detectors/permissions.js +1 -1
  111. package/modules/security/artifact-scan/detectors/shared.js +0 -3
  112. package/modules/security/artifact-scan/floor.js +0 -3
  113. package/modules/security/artifact-scan/mirror.js +1 -1
  114. package/modules/security/artifact-scan/quarantine.js +0 -1
  115. package/modules/security/artifact-scan/rebuild-spec.js +0 -2
  116. package/modules/security/artifact-scan/report.js +1 -1
  117. package/modules/security/artifact-scan/sanitize.js +0 -2
  118. package/modules/security/secret-scrub.js +0 -4
  119. package/modules/security/security.js +0 -2
  120. package/modules/sessions/accessibility.js +0 -2
  121. package/modules/sessions/bfg.js +0 -4
  122. package/modules/sessions/upload-health.js +0 -3
  123. package/modules/specialities/db.js +1 -1
  124. package/modules/specialities/specialities.js +1 -1
  125. package/modules/ui-design/kit/lib.js +2 -2
  126. package/package-lock.json +2 -2
  127. package/package.json +1 -1
  128. package/release-notes.json +13 -0
  129. package/scripts/bongos/autobongos-run.js +2 -1
  130. package/scripts/bongos/autonomy-gauge.js +2 -1
  131. package/scripts/bongos/backfill-disciplines.js +1 -1
  132. package/scripts/bongos/backfill-sessions.js +1 -1
  133. package/scripts/bongos/backup.js +2 -1
  134. package/scripts/bongos/dev.js +1 -1
  135. package/scripts/bongos/do-api.js +2 -1
  136. package/scripts/bongos/fitness.js +5 -6
  137. package/scripts/bongos/local-preview.js +2 -1
  138. package/scripts/bongos/login.js +1 -1
  139. package/scripts/bongos/page-reader.js +2 -1
  140. package/scripts/bongos/probe-cache.js +2 -1
  141. package/scripts/bongos/provision-core-upgrade.js +2 -1
  142. package/scripts/bongos/provision.js +5 -4
  143. package/scripts/bongos/publish-integration-gate.js +2 -1
  144. package/scripts/bongos/render-api.js +2 -1
  145. package/scripts/bongos/sandbox-stage.js +2 -1
  146. package/scripts/bongos/seed-bongos-v1-idea-routing-tasks.js +1 -1
  147. package/scripts/bongos/seed-bv1-profiles-tasks.js +1 -1
  148. package/scripts/bongos/seed-bv2-ideator-surface-tasks.js +1 -1
  149. package/scripts/bongos/session-eval.js +2 -1
  150. package/scripts/bongos/setup.js +2 -1
  151. package/scripts/bongos/sleep-helper-guard.js +88 -0
  152. package/scripts/bongos/upgrade.js +2 -2
  153. package/scripts/gds/sleep-helper-guard.js +6 -0
  154. package/src/bongos/module-scope-map.js +1 -0
  155. package/src/module-api.js +6 -1
  156. package/src/sleep.js +24 -0
  157. package/tests/deploy_page_projects.mjs +2 -1
  158. package/tests/module_api.mjs +1 -0
  159. package/tests/modules_external_export_contract.mjs +48 -0
  160. package/tests/sleep_helper.mjs +99 -0
@@ -76,4 +76,4 @@ async function runDigest({ nowMs = Date.now(), state, post, readStuckImpl = read
76
76
  return { posted: !!(r && r.posted), reason: r && r.reason, text };
77
77
  }
78
78
 
79
- module.exports = { DIGEST_CHANNEL, DIGEST_HOUR_UTC, CACHE_MS, readStuck, readStuckCached, readStuckFor, digestDue, runDigest, _resetCache };
79
+ module.exports = { CACHE_MS, readStuckCached, readStuckFor, runDigest, _resetCache };
@@ -199,10 +199,8 @@ module.exports = {
199
199
  creditsByCraft,
200
200
  foldCraftRows,
201
201
  apportion,
202
- craftOfDiscipline,
203
202
  craftForPreference,
204
203
  earnedCrafts,
205
204
  CRAFTS,
206
- DISCIPLINE_CRAFT,
207
205
  CREDITS_BY_CRAFT_SQL,
208
206
  };
@@ -316,10 +316,7 @@ module.exports = {
316
316
  computeStreak,
317
317
  wouldExtendStreak,
318
318
  streakPreviewsForTasks,
319
- previewFromStreak,
320
319
  // Exported for testing
321
320
  qualifyingShipDays,
322
- todayInBuilderTz,
323
- ymdToOrdinal,
324
321
  computeRunsFromShipDays,
325
322
  };
@@ -87,4 +87,4 @@ async function unclearFor(matterIds) {
87
87
  return out;
88
88
  }
89
89
 
90
- module.exports = { saveAsk, asksFor, flagUnclear, unclearFor, MAX_READ };
90
+ module.exports = { saveAsk, asksFor, flagUnclear, unclearFor };
@@ -256,7 +256,6 @@ module.exports = {
256
256
  CAPS,
257
257
  BUILDINGS,
258
258
  SEAT,
259
- MATTER_ID,
260
259
  ASK_REQUIRED_MESSAGE,
261
260
  checkAsk,
262
261
  refusalLine,
@@ -607,7 +607,6 @@ module.exports = {
607
607
  validateMatterAction,
608
608
  matterActFor,
609
609
  MATTER_ACTIONS,
610
- MATTER_ACT_POINT,
611
610
  openMatter,
612
611
  checkActAlone,
613
612
  leadsView,
@@ -913,23 +913,17 @@ module.exports = {
913
913
  EXPECTED_SOURCES,
914
914
  COMING_SOURCES,
915
915
  COMING_FLOORS,
916
- SOURCE_TIMEOUT_MS,
917
- normalizeFloor,
918
- normalizeHistory,
919
916
  normalizeActs,
920
917
  normalizeDeskRow,
921
918
  loadGovernment,
922
- SETTLED_WINDOW_MS,
923
919
  normalizeMatter,
924
920
  gateAllows,
925
- compareMatters,
926
921
  homeLine,
927
922
  boardMatter,
928
923
  fairnessReading,
929
924
  registeredContributions,
930
925
  buildDocket,
931
926
  docketFor,
932
- attachAsks,
933
927
  findMatter,
934
928
  findMatterFor,
935
929
  loadSeats,
@@ -161,7 +161,6 @@ function leadsView(rows, archons, { includePast = false, rights = null, structur
161
161
  module.exports = {
162
162
  CHARTER_MAX,
163
163
  DEFAULT_CHARTERS,
164
- LEAD_ACTS,
165
164
  isLeadAct,
166
165
  charterLine,
167
166
  answerFor,
@@ -104,4 +104,4 @@ async function readPositions(builderId, reads) {
104
104
  }
105
105
  }
106
106
 
107
- module.exports = { positionsOf, readPositions, titleOf, KINDS, KIND_ORDER };
107
+ module.exports = { positionsOf, readPositions, titleOf, KINDS };
@@ -222,11 +222,8 @@ function recommendationsFor({ type, headcount } = {}) {
222
222
 
223
223
  module.exports = {
224
224
  PROJECT_TYPES,
225
- SIZE_BANDS,
226
225
  JOB_GRANTS,
227
- JOB_NAMES,
228
226
  JOB_CAN,
229
- normalizeType,
230
227
  sizeBandFor,
231
228
  recommendedCharter,
232
229
  recommendedRankSet,
@@ -151,4 +151,4 @@ function passRefusal(matter, viewerId, toSeat, ctx, now = Date.now()) {
151
151
  return null;
152
152
  }
153
153
 
154
- module.exports = { seatOf, seatLabel, resolveSeat, routeMatter, routeAll, passRefusal, BUILDING_NAMES };
154
+ module.exports = { seatOf, resolveSeat, routeMatter, routeAll, passRefusal, BUILDING_NAMES };
@@ -163,4 +163,4 @@ async function openBorrowRows() {
163
163
  return rows.map((r) => ({ row: r, ask: stored.get(treasury.matterId(r.id)) || null }));
164
164
  }
165
165
 
166
- module.exports = { readSpend, listPots, listOpenGoals, listBorrows, getBorrow, readCap, readTreasury, setPot, goalById, fileBorrows, answerBorrow, openBorrowRows };
166
+ module.exports = { getBorrow, readTreasury, setPot, goalById, fileBorrows, answerBorrow, openBorrowRows };
@@ -235,7 +235,7 @@ function borrowMatter(borrow, { title, canAnswer = false } = {}) {
235
235
  }
236
236
 
237
237
  module.exports = {
238
- MATTER_SOURCE, SEAT, ROUND_USD, MAX_BUDGET_USD, ANSWERS, ACT_KEY,
239
- monthKey, prevMonth, monthGone, parseBudget, capView, borrowAmount, needsBorrow,
238
+ MATTER_SOURCE, SEAT, MAX_BUDGET_USD, ANSWERS,
239
+ monthKey, prevMonth, parseBudget, borrowAmount, needsBorrow,
240
240
  buildTreasury, borrowView, matterId, goalName, borrowAsk, answerOf, borrowMatter,
241
241
  };
@@ -256,7 +256,6 @@ function replayRecorded({ signals, workType } = {}) {
256
256
 
257
257
  module.exports = {
258
258
  PIPELINE_STAGES,
259
- WORK_TYPE_PORT_PREFIX,
260
259
  applyDeterministicGate,
261
260
  listWorkTypes,
262
261
  registerWorkType,
@@ -53,7 +53,7 @@
53
53
 
54
54
  const API = '/api/bongos';
55
55
  const api = window.BongosClient.createClient({ baseUrl: '', credentials: 'same-origin', throwOnError: false });
56
- const { escapeHtml } = window.OTB;
56
+ const { escapeHtml, sleep } = window.OTB;
57
57
  const toast = (msg) => window.OTB.toast(msg);
58
58
  const $ = (id) => document.getElementById(id);
59
59
 
@@ -511,7 +511,7 @@
511
511
  // confirming, or a reload — and goes on repainting a step the owner has left. It
512
512
  // also made every test that never converges sit through the full ~30s in real time.
513
513
  for (let i = 0; i < POLL_TRIES; i++) {
514
- await new Promise((r) => setTimeout(r, POLL_MS));
514
+ await sleep(POLL_MS);
515
515
  if (steps.get(p.instance_id) !== 'confirm') break; // the row was closed; stop.
516
516
  try {
517
517
  await refreshOne(p, { keepStep: true });
@@ -753,7 +753,7 @@
753
753
  repaint();
754
754
  let settled = false;
755
755
  for (let i = 0; i < MOVE_TRIES; i++) {
756
- await new Promise((r) => setTimeout(r, POLL_MS));
756
+ await sleep(POLL_MS);
757
757
  if (moving.get(p.instance_id) !== to) return; // superseded or the row is gone
758
758
  let now;
759
759
  try {
@@ -31,6 +31,10 @@
31
31
  return String(s ?? '').replace(/[&<>"']/g, (c) => ESCAPES[c]);
32
32
  }
33
33
 
34
+ // `await sleep(ms)` — THE browser "wait N milliseconds" (task 1004893). The server
35
+ // twin is src/sleep.js; fitness fails on a third hand-rolled copy.
36
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
37
+
34
38
  // querySelector shorthand. (7 copies; pair.js's single-arg form is a subset.)
35
39
  const $ = (sel, root = document) => root.querySelector(sel);
36
40
 
@@ -466,7 +470,7 @@
466
470
  }
467
471
 
468
472
  const OTB = {
469
- escapeHtml, $, fmtNum, num, fmtInt, fmtCompact, fmtDate, rankLabel, toast, moduleOn, disciplines,
473
+ escapeHtml, sleep, $, fmtNum, num, fmtInt, fmtCompact, fmtDate, rankLabel, toast, moduleOn, disciplines,
470
474
  // task 1003936 — ONE word for the role axis, all six surfaces
471
475
  roleAxisLabel, roleLabel, roleWord, roleOptions, roleIsUnset, ROLE_UNSET,
472
476
  fillKindFilter, kindLabel, kindIsUnset, KIND_UNSET, // task 1003453 — one Kind filler, all three surfaces
@@ -331,7 +331,7 @@
331
331
  if (!said) return null;
332
332
  toast(said);
333
333
  // Give the sentence time to be read before the reload takes it away.
334
- return new Promise(function (done) { setTimeout(done, 3500); });
334
+ return window.OTB.sleep(3500);
335
335
  }).then(function () { window.location.reload(); }));
336
336
  } else if (t.hasAttribute('data-genesis-close')) {
337
337
  // The solo fast-track (spec D4): when the founder's one yes decides the sitting
@@ -112,4 +112,4 @@ function weakestSectionPayload(fieldValues, { templateKey = DEFAULT_TEMPLATE_KEY
112
112
  };
113
113
  }
114
114
 
115
- module.exports = { completenessScore, scoreFieldValues, substanceOf, weakestField, weakestSectionPayload };
115
+ module.exports = { completenessScore, scoreFieldValues, weakestField, weakestSectionPayload };
@@ -275,7 +275,6 @@ async function syncDescentForTask(taskId, { client = null } = {}) {
275
275
 
276
276
  module.exports = {
277
277
  DESCENT_MAX_DEPTH,
278
- DESCENT_RELATIONS,
279
278
  linkTaskDescent,
280
279
  ancestorsOfTask,
281
280
  descendantsOfTask,
@@ -221,10 +221,8 @@ function contributeIdeasToDocket() {
221
221
  module.exports = {
222
222
  contributeIdeasToDocket,
223
223
  blockerDocketMatter,
224
- blockerOptions,
225
224
  ratifyDeskRows,
226
225
  rulesReading,
227
226
  rulesFloor,
228
227
  rulesHistory,
229
- countRoutedThisMonth,
230
228
  };
@@ -247,7 +247,6 @@ module.exports = {
247
247
  IDEA_STATES,
248
248
  IDEA_STATE_VALUES,
249
249
  IDEA_POSITIONS,
250
- AWAITING_NOD_STATUS,
251
250
  taskFactsFromIdeaRow,
252
251
  resolveIdeaState,
253
252
  attachStateToTrail,
@@ -146,4 +146,4 @@ async function readIdeatorStats(builderId, deps = {}) {
146
146
  return summarizeIdeatorTrail(ideas, { ideatorCredits, ratifiedIds, truncated: sky && sky.truncated, total: sky && sky.total });
147
147
  }
148
148
 
149
- module.exports = { readIdeatorStats, summarizeIdeatorTrail, PUBLIC_VIEWER_RANK };
149
+ module.exports = { readIdeatorStats, summarizeIdeatorTrail };
@@ -90,4 +90,4 @@ async function readIdeaVotes(pool, { voterId, ids }) {
90
90
  return out;
91
91
  }
92
92
 
93
- module.exports = { castIdeaVote, readIdeaVotes, ideaVoteTally };
93
+ module.exports = { castIdeaVote, readIdeaVotes };
@@ -130,10 +130,7 @@ function refusalMessage(r) {
130
130
  }
131
131
 
132
132
  module.exports = {
133
- SHIP_WRITES,
134
- pageIdFromRef,
135
133
  pageFiles,
136
- decideFiles,
137
134
  readRound,
138
135
  autoPickupFileRefusal,
139
136
  refusalMessage,
@@ -551,5 +551,4 @@ module.exports = {
551
551
  unmergedPaths,
552
552
  hasConflictMarkers,
553
553
  GENERATOR_SCRIPTS,
554
- MARKER_GREP_RE,
555
554
  };
@@ -271,10 +271,6 @@ async function setBackendOnly({ criterionId, builderId, backendOnly, authorize }
271
271
 
272
272
  module.exports = {
273
273
  DEPLOY_PORT,
274
- linkedTasks,
275
- summarizeLinked,
276
- currentSignoff,
277
- isBackendOnly,
278
274
  readLive,
279
275
  signOff,
280
276
  recordOverride,
@@ -340,6 +340,6 @@ function findProseGatedTasks(tasks, statusById) {
340
340
  module.exports = {
341
341
  DEAD_DEP_STATUSES, LIVE_STATUSES,
342
342
  absorbedInto, depRefusalRow, splitDeadDeps, deadDepHint, findStrandedTasks,
343
- proseGatedIds, findProseGatedTasks, idCandidates, GATE_PHRASE_RE, GATE_WINDOW, OTHER_ENTITY_RE,
344
- LIVENESS_BEFORE_RE, LIVENESS_AFTER_RE, IMPORT_ID_OFFSETS,
343
+ proseGatedIds, findProseGatedTasks, idCandidates,
344
+ IMPORT_ID_OFFSETS,
345
345
  };
@@ -186,4 +186,4 @@ async function buildEstAdvisory({ db, task } = {}) {
186
186
  }
187
187
  }
188
188
 
189
- module.exports = { adviseEstimate, pickRatio, buildEstAdvisory, calibrationSummary, resetCalibrationCache, CALIBRATION_TTL_MS, MIN_MATERIAL_DELTA, SCALE_OK_RATIO, MIN_KIND_SAMPLES, MIN_OVERALL_SAMPLES };
189
+ module.exports = { adviseEstimate, pickRatio, buildEstAdvisory, calibrationSummary, resetCalibrationCache, CALIBRATION_TTL_MS, MIN_MATERIAL_DELTA, SCALE_OK_RATIO };
@@ -39,7 +39,7 @@ const fs = require('node:fs');
39
39
  const os = require('node:os');
40
40
  const path = require('node:path');
41
41
  const { promisify } = require('node:util');
42
- const { repoInfo, userAgent } = require('../../src/module-api');
42
+ const { repoInfo, userAgent, sleep } = require('../../src/module-api'); // sleep: the one shared sleep (task 1004893)
43
43
  const { readCheckRollup, UNIT_REPORT_CONTEXT, isRedCheck } = require('./check-rollup'); // isRedCheck: only a FAILED check is red, never a pending one (task 1004666)
44
44
  const { loadRepoInfo } = repoInfo;
45
45
 
@@ -1363,7 +1363,6 @@ async function getPullRequestFiles({ number }, deps = {}) {
1363
1363
  // recheckPullRequest header for WHY this delay exists; overridable via deps.reopenDelayMs
1364
1364
  // so tests run instantly (and an operator can tune it without a code change).
1365
1365
  const RECHECK_REOPEN_DELAY_MS = 4000;
1366
- const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
1367
1366
 
1368
1367
  // recheckPullRequest — re-trigger the gate-review check after an owner approval was
1369
1368
  // recorded. WHY close+reopen: setting a commit status does NOT fire a `pull_request`
@@ -379,16 +379,13 @@ function goalCategoryHandler({ db, authorizeGoalManagement, validateOrRespond, p
379
379
  }
380
380
 
381
381
  module.exports = {
382
- CATEGORY_COLS,
383
382
  slugify,
384
383
  isValidSlug,
385
384
  listCategories,
386
385
  countGoalsByCategory,
387
386
  getCategory,
388
387
  adviseCategory,
389
- createCategory,
390
388
  updateCategory,
391
- setGoalCategory,
392
389
  decorateGoalCategory,
393
390
  categoryIndex,
394
391
  categoriesListHandler,
@@ -126,4 +126,4 @@ async function createGoalWithSpec({ db, withTx, goalFields, withSpecTask = false
126
126
  return { goal, specTask };
127
127
  }
128
128
 
129
- module.exports = { SPEC_SOURCE, specSourceRef, specTaskFields, openSpecTaskId, gateOnSpecTask, ensureSpecTask, createGoalWithSpec };
129
+ module.exports = { SPEC_SOURCE, specSourceRef, specTaskFields, gateOnSpecTask, ensureSpecTask, createGoalWithSpec };
@@ -463,7 +463,6 @@ module.exports = {
463
463
  overrideMatter,
464
464
  removalMatter,
465
465
  uatMatter,
466
- uatActs,
467
466
  joinRequestMatter,
468
467
  flowReading,
469
468
  promisesReading,
@@ -130,4 +130,4 @@ async function genesisStageTasks(deps = {}) {
130
130
  return out;
131
131
  }
132
132
 
133
- module.exports = { seedKickoffIfEmpty, specFromBranding, FIRST_VERSION_SQL, seedGenesisStages, genesisStageTasks, GENESIS_SOURCE };
133
+ module.exports = { seedKickoffIfEmpty, specFromBranding, FIRST_VERSION_SQL, seedGenesisStages, genesisStageTasks };
@@ -345,9 +345,9 @@ async function decidePair(pairId, builderId, decision, deps = {}) {
345
345
  }
346
346
 
347
347
  module.exports = {
348
- MINGLE_ENABLED_KEY, MAX_ROWS, MATCHING, matchingModel,
348
+ MAX_ROWS, MATCHING, matchingModel,
349
349
  parseEnabled, projectEnabled, setProjectEnabled,
350
- optInState, setOptIn, mingleStateFor,
351
- eligibleBuilders, isCrossCraft, planPairs, pairKey, openPairKeys,
350
+ setOptIn, mingleStateFor,
351
+ eligibleBuilders, isCrossCraft, planPairs, openPairKeys,
352
352
  runMingleRound, openPairsFor, countOpenPairsFor, decidePair,
353
353
  };
@@ -181,4 +181,4 @@ async function webClaimPageTweak({ pageId, builderId, versionId = null, round },
181
181
  }
182
182
  }
183
183
 
184
- module.exports = { webClaimPageTweak, lockKey, roundNumber };
184
+ module.exports = { webClaimPageTweak, lockKey };
@@ -75,4 +75,4 @@ function rebaseRefusalTasks(split) {
75
75
  ];
76
76
  }
77
77
 
78
- module.exports = { REBASE_GATE_LIMIT, WAITING_REASONS, waitsOn, splitRebaseGate, rebaseRefusalTasks };
78
+ module.exports = { REBASE_GATE_LIMIT, waitsOn, splitRebaseGate, rebaseRefusalTasks };
@@ -326,7 +326,6 @@ module.exports = {
326
326
  removalCandidatesForTask,
327
327
  listCommitsForPath,
328
328
  deletedPathsFrom,
329
- groupByTask,
330
329
  attributeDeletions,
331
330
  deriveRemovalsForShip,
332
331
  };
@@ -148,4 +148,4 @@ function makeAbandonHandler(deps) {
148
148
  };
149
149
  }
150
150
 
151
- module.exports = { makeAbandonHandler, requiredAtoms, floorsFor };
151
+ module.exports = { makeAbandonHandler };
@@ -222,5 +222,4 @@ module.exports = {
222
222
  authorizeVersionBuild,
223
223
  planVersionClose,
224
224
  rollForwardNeedsPlanningVersion,
225
- VERSION_CLOSE_VERBS,
226
225
  };
@@ -864,7 +864,7 @@ module.exports = {
864
864
  // untrusted-title rule is pinned by a test rather than trusted by eye.
865
865
  sanitizeOneLine, MAX_CONFIRM_LINE,
866
866
  // exported for unit tests:
867
- fmtTokens, fmtUsd, fmtInt, fmtMins, nextActionFor, esc, wrap, changedText,
867
+ fmtTokens, fmtUsd, fmtInt, fmtMins, esc, wrap,
868
868
  // task 1003150 — the session-boundary nudge, pure so every branch is pinned.
869
869
  handoffAdvice, HEAVY_SESSION_CACHED_TOKENS,
870
870
  PIPELINE, FORMS, trailSteps,
@@ -323,7 +323,6 @@ module.exports = {
323
323
  untrackedLeftBehind,
324
324
  untrackedWarningLines,
325
325
  cleanupMacFinderDupRefs,
326
- gitDirFor,
327
326
  findMainWorktree,
328
327
  findPrimaryWorktree,
329
328
  closeoutPlan,
@@ -301,4 +301,4 @@ function skyHandler({ read = sky, log = console, cache = skyCache() } = {}) {
301
301
  };
302
302
  }
303
303
 
304
- module.exports = { sky, skyRows, shapeSky, foldCriteria, normalizeBorn, skyCache, skyHandler, SKY_CACHE_TTL_MS };
304
+ module.exports = { sky, skyRows, shapeSky, foldCriteria, normalizeBorn, skyCache, skyHandler };
@@ -551,7 +551,6 @@ module.exports = {
551
551
  VALID_KINDS,
552
552
  VALID_DISCIPLINES,
553
553
  WRITABLE_DISCIPLINES,
554
- DISCIPLINE_CONFIDENCE_FLOOR,
555
554
  resolveWriteDiscipline,
556
555
  VOTABLE_TASK_STATUSES,
557
556
  TASK_FIELD_BOUNDS,
@@ -390,8 +390,6 @@ module.exports = {
390
390
  screenImage,
391
391
  readImageFile,
392
392
  normalizeAlt,
393
- urlForName,
394
- SERVE_PREFIX,
395
393
  isPubliclyViewable,
396
394
  persistImageBuffer,
397
395
  deleteStored,
@@ -101,7 +101,6 @@ async function getCloseSuggestionsForBuildingVersions() {
101
101
  }
102
102
 
103
103
  module.exports = {
104
- PERCENT_GATE,
105
104
  suggestClose,
106
105
  getCloseSuggestionsForBuildingVersions,
107
106
  };
@@ -568,5 +568,4 @@ module.exports = {
568
568
  assertBfgPath,
569
569
  isReservedNamespacePath,
570
570
  BFG_NAMESPACE_PREFIX,
571
- BFG_KINDS,
572
571
  };
@@ -275,4 +275,4 @@ function chunkMarkdown({ path, content, maxTokens = DEFAULT_MAX_TOKENS, targetTo
275
275
  return { path: path || null, title, frontmatter: frontmatter || null, chunks };
276
276
  }
277
277
 
278
- module.exports = { chunkMarkdown, parseFrontMatter, estTokens, fileLabel, stripPrivate, sanitizeForText, PG_INVALID_TEXT_RE, DEFAULT_TARGET_TOKENS, DEFAULT_MAX_TOKENS };
278
+ module.exports = { chunkMarkdown, parseFrontMatter, estTokens, stripPrivate, sanitizeForText };
@@ -581,8 +581,5 @@ module.exports = {
581
581
  RANK_LADDER,
582
582
  DEFAULT_LIMIT,
583
583
  MAX_LIMIT,
584
- RRF_K,
585
584
  TRGM_THRESHOLD,
586
- USEFULNESS_WEIGHT,
587
- USEFULNESS_SCALE,
588
585
  };
@@ -102,4 +102,4 @@ function createDivert({ supervisor, forward, requireBuilder, requirePermission }
102
102
  };
103
103
  }
104
104
 
105
- module.exports = { createDivert, cookieVersion, clearCookie, setCookie, AUTH_PATH, PREVIEW_PATH };
105
+ module.exports = { createDivert, cookieVersion, clearCookie, setCookie, AUTH_PATH };
@@ -114,4 +114,4 @@ function createRuntime({ liveDb, log, env = process.env, instanceRoot = null } =
114
114
  return supervisor;
115
115
  }
116
116
 
117
- module.exports = { createRuntime, runCommand, probeHealth };
117
+ module.exports = { createRuntime, probeHealth };
@@ -25,6 +25,7 @@ const path = require('node:path');
25
25
  const { buildPreviewEnv, PREVIEW_DB } = require('./env');
26
26
  const cmds = require('./commands');
27
27
  const { createChildLog, redact, secretValues } = require('./childlog');
28
+ const { sleep: sharedSleep } = require('../../../src/module-api'); // the one shared sleep (task 1004893)
28
29
 
29
30
  const IDLE_MS = 20 * 60 * 1000;
30
31
  const DEFAULT_PORT = 3190;
@@ -105,7 +106,7 @@ function copyInstance({ fsImpl, from, to }) {
105
106
  function createSupervisor({
106
107
  run, spawn, probe, liveDb, cacheRoot, instanceRoot = null,
107
108
  env = process.env, port = DEFAULT_PORT, killWaitMs = KILL_WAIT_MS,
108
- now = Date.now, sleep = (ms) => new Promise((r) => setTimeout(r, ms)),
109
+ now = Date.now, sleep = sharedSleep,
109
110
  fsImpl = fs, tmpdir = os.tmpdir(), idleMs = IDLE_MS,
110
111
  log = { info() {}, warn() {}, error() {} },
111
112
  copy = copyInstance,
@@ -124,4 +124,4 @@ async function foundingBuildersFor(deps = {}) {
124
124
  }
125
125
  }
126
126
 
127
- module.exports = { stageAt, shapeFoundingBuilders, foundingBuildersFor, MAX_MARKS };
127
+ module.exports = { stageAt, shapeFoundingBuilders, foundingBuildersFor };
@@ -204,6 +204,6 @@ async function setFoundingMode({ active, stage } = {}, builderId = null, deps =
204
204
 
205
205
  module.exports = {
206
206
  STAGES, WAKES, WAKES_WHEN_ALIVE, KEYS, stageAtKey,
207
- parseActive, asleepRooms, dayOf, shapeFoundingMode, waitingOnFromGovernment,
207
+ dayOf, shapeFoundingMode, waitingOnFromGovernment,
208
208
  foundingModeFor, setFoundingMode,
209
209
  };
@@ -262,4 +262,4 @@ if (require.main === module) {
262
262
  }
263
263
  }
264
264
 
265
- module.exports = { MOMENTS, STEPS, MOMENT_IDS, stepById, stepsForMoment, nextUnread, formatStep, formatGuide };
265
+ module.exports = { MOMENTS, STEPS, MOMENT_IDS, stepById, stepsForMoment, nextUnread, formatGuide };
@@ -105,4 +105,4 @@ async function reset(builderId, { steps, all = false } = {}, deps = {}) {
105
105
  return { ok: true, state: await readState(builderId, deps) };
106
106
  }
107
107
 
108
- module.exports = { HOWS, checkSteps, shapeState, readState, markRead, reset };
108
+ module.exports = { shapeState, readState, markRead, reset };
@@ -495,12 +495,8 @@ module.exports = {
495
495
  GRADUATED,
496
496
  ALL_STAGES,
497
497
  PRE_AUTH_STEP,
498
- SHIP_GRADUATION_TARGET,
499
- STAGE_LABELS,
500
498
  STAGE_HINTS,
501
- DISPLAY_STEPS,
502
499
  DISPLAY_LABELS,
503
- DISPLAY_HINTS,
504
500
  isKnownStage,
505
501
  nextStage,
506
502
  hasCleared,
@@ -489,20 +489,14 @@ function buildIdeaPayload({ sessionMeta = {}, analysis, signals = {} }) {
489
489
 
490
490
  module.exports = {
491
491
  ONBOARDING_FRICTION_TAG,
492
- ONBOARDING_FRICTION_KIND,
493
492
  // parsing
494
493
  parseTranscript,
495
- stripMachineNoise,
496
494
  // signals
497
495
  detectFrictionSignals,
498
- LONG_RESPONSE_CHARS,
499
- SIMILARITY_THRESHOLD,
500
496
  // subagent
501
497
  buildAnalysisPrompt,
502
- compactTranscript,
503
498
  extractJson,
504
499
  validateAnalysis,
505
- VALID_MOMENT_KINDS,
506
500
  // payload
507
501
  buildIdeaPayload,
508
502
  };
@@ -236,7 +236,6 @@ module.exports = {
236
236
  wholeDocIdea,
237
237
  noteLink,
238
238
  SITE_SURFACE,
239
- STUDIO_PATH,
240
239
  isSiteNote,
241
240
  siteListItem,
242
241
  ideaBody,
@@ -231,5 +231,4 @@ module.exports = {
231
231
  MAX_LIMIT,
232
232
  MAX_OFFSET,
233
233
  MAX_DISCIPLINE_CHARS,
234
- TOTALS_TTL_MS,
235
234
  };
@@ -157,8 +157,6 @@ function mintHubApplicationVouch({ clientId, githubId, githubLogin, handle }, op
157
157
  }
158
158
 
159
159
  module.exports = {
160
- ASSERTION_TTL_MS,
161
- ISSUER,
162
160
  LOGOUT_PURPOSE,
163
161
  generateHubKeypair,
164
162
  loadHubSigningKey,
@@ -229,7 +229,6 @@ module.exports = {
229
229
  sha256Hex,
230
230
  projectOrigin,
231
231
  isHostedBy,
232
- verifyDirectReport,
233
232
  fileDirectReport,
234
233
  FEEDBACK_KINDS,
235
234
  MESSAGE_MAX,