@bongos/core 1.19.50 → 1.19.51
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 +14 -14
- package/clients/bongos-client/index.d.ts +1 -1
- package/docs/api/openapi.json +5 -0
- package/docs/api-reference.md +1 -1
- package/modules/lifecycle/db.js +8 -1
- package/modules/lifecycle/routes/tasks.js +18 -2
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/src/module-api.js +3 -1
- package/tests/migration_allocation.mjs +1 -0
package/.bongos-core.json
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
"artifact": "bongos-core",
|
|
3
3
|
"manifest_schema": 1,
|
|
4
4
|
"generator": "scripts/gds/package-core.js",
|
|
5
|
-
"core_version": "1.19.
|
|
6
|
-
"core_contract": "1.19.
|
|
7
|
-
"source_commit": "
|
|
5
|
+
"core_version": "1.19.51",
|
|
6
|
+
"core_contract": "1.19.51",
|
|
7
|
+
"source_commit": "fe0b1449ce7c972b972778e74945261c35565c48",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-08-11T18:
|
|
9
|
+
"built_at": "2026-08-11T18:53:46.990Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
12
|
"docs_redacted": 291,
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
19
|
"file_count": 1529,
|
|
20
|
-
"tree_sha256": "
|
|
20
|
+
"tree_sha256": "c3aec243f4a401c529edd9c426192e56b1264abfa615e29045ac5cf054e33d57",
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": ".claude/skills/blocker-review/SKILL.md",
|
|
@@ -367,7 +367,7 @@
|
|
|
367
367
|
{
|
|
368
368
|
"path": "clients/bongos-client/index.d.ts",
|
|
369
369
|
"mode": "0000644",
|
|
370
|
-
"sha256": "
|
|
370
|
+
"sha256": "a5b9642b383c8c415158e091785ff40f28490d8341b4010f4c051b1a68942daf"
|
|
371
371
|
},
|
|
372
372
|
{
|
|
373
373
|
"path": "clients/bongos-client/index.mjs",
|
|
@@ -1307,12 +1307,12 @@
|
|
|
1307
1307
|
{
|
|
1308
1308
|
"path": "docs/api-reference.md",
|
|
1309
1309
|
"mode": "0000644",
|
|
1310
|
-
"sha256": "
|
|
1310
|
+
"sha256": "27e9c0ab46db5386833b9e03bcff0dae31f4606882e845e7e830f9ef6f2550b5"
|
|
1311
1311
|
},
|
|
1312
1312
|
{
|
|
1313
1313
|
"path": "docs/api/openapi.json",
|
|
1314
1314
|
"mode": "0000644",
|
|
1315
|
-
"sha256": "
|
|
1315
|
+
"sha256": "612c7a81756f61f2c18d4b35540379cf63f32a4caa9e8d84a64b247d497ad7a3"
|
|
1316
1316
|
},
|
|
1317
1317
|
{
|
|
1318
1318
|
"path": "docs/architecture.md",
|
|
@@ -3387,7 +3387,7 @@
|
|
|
3387
3387
|
{
|
|
3388
3388
|
"path": "modules/lifecycle/db.js",
|
|
3389
3389
|
"mode": "0000644",
|
|
3390
|
-
"sha256": "
|
|
3390
|
+
"sha256": "8e67cd1325da44cf95d5d8c34427222e555e0458bb17f23f33c1055b1ae7e211"
|
|
3391
3391
|
},
|
|
3392
3392
|
{
|
|
3393
3393
|
"path": "modules/lifecycle/done-when.js",
|
|
@@ -3492,7 +3492,7 @@
|
|
|
3492
3492
|
{
|
|
3493
3493
|
"path": "modules/lifecycle/routes/tasks.js",
|
|
3494
3494
|
"mode": "0000644",
|
|
3495
|
-
"sha256": "
|
|
3495
|
+
"sha256": "68b4f47e3a5016645893c60eca2fe11a242012abf6625c99d6a774356d82d1ce"
|
|
3496
3496
|
},
|
|
3497
3497
|
{
|
|
3498
3498
|
"path": "modules/lifecycle/routes/versions.js",
|
|
@@ -4037,12 +4037,12 @@
|
|
|
4037
4037
|
{
|
|
4038
4038
|
"path": "package-lock.json",
|
|
4039
4039
|
"mode": "0000644",
|
|
4040
|
-
"sha256": "
|
|
4040
|
+
"sha256": "43bd308850fdf28f3fa803c778af55a4a86e72edb62ccd8dc2d3297da95efbe2"
|
|
4041
4041
|
},
|
|
4042
4042
|
{
|
|
4043
4043
|
"path": "package.json",
|
|
4044
4044
|
"mode": "0000644",
|
|
4045
|
-
"sha256": "
|
|
4045
|
+
"sha256": "a402f396d0bfd5b10f24685a15ac36f9022c182db018787fbdd96b296e26c5db"
|
|
4046
4046
|
},
|
|
4047
4047
|
{
|
|
4048
4048
|
"path": "public-docs/index.html",
|
|
@@ -5662,7 +5662,7 @@
|
|
|
5662
5662
|
{
|
|
5663
5663
|
"path": "src/module-api.js",
|
|
5664
5664
|
"mode": "0000644",
|
|
5665
|
-
"sha256": "
|
|
5665
|
+
"sha256": "3c2f62e446506de3fa855989e8606aad486566e37eed47b61c3a18b835a404f4"
|
|
5666
5666
|
},
|
|
5667
5667
|
{
|
|
5668
5668
|
"path": "src/module-loader/loader.js",
|
|
@@ -6882,7 +6882,7 @@
|
|
|
6882
6882
|
{
|
|
6883
6883
|
"path": "tests/migration_allocation.mjs",
|
|
6884
6884
|
"mode": "0000644",
|
|
6885
|
-
"sha256": "
|
|
6885
|
+
"sha256": "6755c9568cd6cdb7b8600ae2c6651856d63c053684dcb8b765f7329590a9fc08"
|
|
6886
6886
|
},
|
|
6887
6887
|
{
|
|
6888
6888
|
"path": "tests/migration_namespace.mjs",
|
|
@@ -131,7 +131,7 @@ export interface PatchMeSkillPrefsResponse { prefs: unknown; effective: unknown;
|
|
|
131
131
|
export interface PatchMeSoundPrefsResponse { prefs: unknown; effective: unknown; effective_map: unknown; volume: unknown; defaults: unknown; known_sounds: unknown }
|
|
132
132
|
export interface PatchProjectsIdFeaturedRequest { featured: boolean }
|
|
133
133
|
export interface PatchProjectsIdFeaturedResponse { project: unknown }
|
|
134
|
-
export interface PatchTasksIdRequest { kind?: string; discipline?: string; requires_rank?: string; module_key?: string; goal_id?: number; parent_task_id?: StringifiableId; parallel_safe?: unknown; newcomer_friendly?: boolean; xenos_claimable?: boolean; security_sensitive?: boolean; automation_tag?: string; needs_migration?: boolean; status?: unknown }
|
|
134
|
+
export interface PatchTasksIdRequest { kind?: string; discipline?: string; requires_rank?: string; module_key?: string; goal_id?: number; parent_task_id?: StringifiableId; parallel_safe?: unknown; newcomer_friendly?: boolean; xenos_claimable?: boolean; security_sensitive?: boolean; automation_tag?: string; needs_migration?: boolean; description?: string; status?: unknown }
|
|
135
135
|
export interface PostAccessRequestsRequest { github_login: string; display_name?: string; note?: string }
|
|
136
136
|
export interface PostAccessRequestsResponse { ok: boolean; request?: unknown; already_pending?: boolean }
|
|
137
137
|
export interface PostAuthAppPairApproveRequest { pair_code: string }
|
package/docs/api/openapi.json
CHANGED
|
@@ -13792,6 +13792,11 @@
|
|
|
13792
13792
|
"needs_migration": {
|
|
13793
13793
|
"type": "boolean"
|
|
13794
13794
|
},
|
|
13795
|
+
"description": {
|
|
13796
|
+
"type": "string",
|
|
13797
|
+
"minLength": 1,
|
|
13798
|
+
"maxLength": 50000
|
|
13799
|
+
},
|
|
13795
13800
|
"status": {}
|
|
13796
13801
|
},
|
|
13797
13802
|
"additionalProperties": false
|
package/docs/api-reference.md
CHANGED
|
@@ -463,7 +463,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
463
463
|
| GET | `/api/bongos/tasks` | `any-builder` | — | reads (filtered task list); preserved per CRITICAL §4. |
|
|
464
464
|
| POST | `/api/bongos/tasks` | `metic+archon` | `version_id`, `title`, `description`, `status`, `touches`, `est_minutes`, `est_cost_usd`, `manual_degree`, `priority`, `automation_tag`, `credits_reward`, `source`, `source_ref`, `value_summary`, `kind`, `discipline`, `parallel_safe`, `newcomer_friendly`, `security_sensitive`, `requires_rank`, `auto_detect_touches`, `criterion_ids`, `module_key`, `goal_id` | Task create/promote/edit (plan/scope mutation) is Metic+ as of ADR 0090 (owner decision 2026-06-26): a Metic who can run idea-triage may … |
|
|
465
465
|
| GET | `/api/bongos/tasks/:id` | `any-builder` | — | single-task read; preserved per CRITICAL §4 (supervisor hot path). |
|
|
466
|
-
| PATCH | `/api/bongos/tasks/:id` | `metic+archon` | `kind`, `discipline`, `requires_rank`, `module_key`, `goal_id`, `parent_task_id`, `parallel_safe`, `newcomer_friendly`, `xenos_claimable`, `security_sensitive`, `automation_tag`, `needs_migration`, `status` | PATCH /tasks/:id — supports body.parent_task_id (V2 C2), body.kind (V2 B1), body.discipline (mig 014), body.parallel_safe (mig 028), and … |
|
|
466
|
+
| PATCH | `/api/bongos/tasks/:id` | `metic+archon` | `kind`, `discipline`, `requires_rank`, `module_key`, `goal_id`, `parent_task_id`, `parallel_safe`, `newcomer_friendly`, `xenos_claimable`, `security_sensitive`, `automation_tag`, `needs_migration`, `description`, `status` | PATCH /tasks/:id — supports body.parent_task_id (V2 C2), body.kind (V2 B1), body.discipline (mig 014), body.parallel_safe (mig 028), and … |
|
|
467
467
|
| POST | `/api/bongos/tasks/:id/abandon` | `metic+archon` | `reason` | POST /tasks/:id/abandon — terminal "retire this task" transition (task 987). |
|
|
468
468
|
| POST | `/api/bongos/tasks/:id/attest-gate` | `any-builder` | `head_sha` | POST /tasks/:id/attest-gate — body: { head_sha }. |
|
|
469
469
|
| POST | `/api/bongos/tasks/:id/confirm` | `any-builder` | `verified` | |
|
package/modules/lifecycle/db.js
CHANGED
|
@@ -1477,7 +1477,7 @@ async function findTaskBySourceRef({ source, sourceRef } = {}, deps = {}) {
|
|
|
1477
1477
|
|
|
1478
1478
|
const TASK_SETTER_COLUMNS = new Set([
|
|
1479
1479
|
'kind', 'discipline', 'newcomer_friendly', 'security_sensitive', 'parallel_safe', 'automation_tag',
|
|
1480
|
-
'needs_migration', 'module_key',
|
|
1480
|
+
'needs_migration', 'module_key', 'description',
|
|
1481
1481
|
]);
|
|
1482
1482
|
|
|
1483
1483
|
async function updateTaskColumn(id, column, value) {
|
|
@@ -1532,6 +1532,12 @@ async function updateTaskGoal(id, goalId) {
|
|
|
1532
1532
|
|
|
1533
1533
|
async function updateTaskKind(id, kind) { return updateTaskColumn(id, 'kind', kind); }
|
|
1534
1534
|
|
|
1535
|
+
// task 1002647 (choke-point map s4.3): the task body is a load-bearing prompt —
|
|
1536
|
+
// it was settable only at create, un-editable at every rank. Editable now under
|
|
1537
|
+
// the same task.edit permission as the other planning fields; the global
|
|
1538
|
+
// write-audit middleware captures each edit's new body in audit_log.
|
|
1539
|
+
async function updateTaskDescription(id, description) { return updateTaskColumn(id, 'description', description); }
|
|
1540
|
+
|
|
1535
1541
|
|
|
1536
1542
|
async function updateTaskDiscipline(id, discipline) { return updateTaskColumn(id, 'discipline', discipline); }
|
|
1537
1543
|
|
|
@@ -5457,6 +5463,7 @@ module.exports = {
|
|
|
5457
5463
|
updateTaskGoal,
|
|
5458
5464
|
createCriterion,
|
|
5459
5465
|
updateTaskKind,
|
|
5466
|
+
updateTaskDescription,
|
|
5460
5467
|
updateTaskDiscipline,
|
|
5461
5468
|
updateTaskNewcomerFriendly,
|
|
5462
5469
|
updateTaskRequiresRank,
|
|
@@ -793,6 +793,12 @@ module.exports = function buildTasksRouter() {
|
|
|
793
793
|
security_sensitive: { type: 'boolean' }, // task 990 — Archon-only ship broadcast
|
|
794
794
|
automation_tag: { type: 'string', maxLength: 64 },
|
|
795
795
|
needs_migration: { type: 'boolean' }, // task 1002648 — correct the create-time heuristic's flag (the claim-time allocator keys off it)
|
|
796
|
+
// task 1002647 (map s4.3): the task body is a load-bearing builder prompt
|
|
797
|
+
// and was settable only at create — no route edited it at any rank. Now
|
|
798
|
+
// editable under this route's task.edit permission. minLength 1: a body
|
|
799
|
+
// can be rewritten, never blanked (and null is refused by the type check).
|
|
800
|
+
// Each edit's new body lands in audit_log via the write-audit middleware.
|
|
801
|
+
description: { type: 'string', minLength: 1, maxLength: LIMITS.DESCRIPTION },
|
|
796
802
|
// task 1002614 (map D-18): DECLARED so strict-mode admits the request far
|
|
797
803
|
// enough to reach the deliberate status_not_patchable hint below (#514) —
|
|
798
804
|
// the hint had been unreachable dead code behind unknown_field since the
|
|
@@ -818,6 +824,7 @@ module.exports = function buildTasksRouter() {
|
|
|
818
824
|
const hasRequiresRank = Object.prototype.hasOwnProperty.call(body, 'requires_rank');
|
|
819
825
|
const hasModuleKey = Object.prototype.hasOwnProperty.call(body, 'module_key');
|
|
820
826
|
const hasGoalId = Object.prototype.hasOwnProperty.call(body, 'goal_id');
|
|
827
|
+
const hasDescription = Object.prototype.hasOwnProperty.call(body, 'description');
|
|
821
828
|
// #514: status is a lifecycle field, not a PATCH-able column — it moves only
|
|
822
829
|
// through the dedicated transition routes. The #506 session tried
|
|
823
830
|
// `PATCH status=ready`, got the generic no_supported_fields error, and had
|
|
@@ -829,8 +836,8 @@ module.exports = function buildTasksRouter() {
|
|
|
829
836
|
if (Object.prototype.hasOwnProperty.call(body, 'status')) {
|
|
830
837
|
return res.fail('status_not_patchable', { status: 400, message: STATUS_HINT });
|
|
831
838
|
}
|
|
832
|
-
if (!hasParent && !hasKind && !hasDiscipline && !hasNewcomerOrXenos && !hasParallelSafe && !hasSecuritySensitive && !hasAutomationTag && !hasNeedsMigration && !hasRequiresRank && !hasModuleKey && !hasGoalId) {
|
|
833
|
-
return res.fail('no_supported_fields', { status: 400, message: 'PATCH /tasks/:id supports parent_task_id, kind, discipline, parallel_safe, security_sensitive, automation_tag, needs_migration, requires_rank, module_key, goal_id, and newcomer_friendly (alias: xenos_claimable). ' + STATUS_HINT });
|
|
839
|
+
if (!hasParent && !hasKind && !hasDiscipline && !hasNewcomerOrXenos && !hasParallelSafe && !hasSecuritySensitive && !hasAutomationTag && !hasNeedsMigration && !hasRequiresRank && !hasModuleKey && !hasGoalId && !hasDescription) {
|
|
840
|
+
return res.fail('no_supported_fields', { status: 400, message: 'PATCH /tasks/:id supports parent_task_id, kind, discipline, description, parallel_safe, security_sensitive, automation_tag, needs_migration, requires_rank, module_key, goal_id, and newcomer_friendly (alias: xenos_claimable). ' + STATUS_HINT });
|
|
834
841
|
}
|
|
835
842
|
// ---- task 1002609 (G-22): settle EVERY gate and validation before the ----
|
|
836
843
|
// ---- FIRST write. The previous shape validated-and-wrote per field in ----
|
|
@@ -976,6 +983,15 @@ module.exports = function buildTasksRouter() {
|
|
|
976
983
|
return res.fail('patch_failed', { status: 500, message: 'internal error' });
|
|
977
984
|
}
|
|
978
985
|
}
|
|
986
|
+
if (hasDescription) {
|
|
987
|
+
try {
|
|
988
|
+
updated = await db.updateTaskDescription(id, body.description);
|
|
989
|
+
if (!updated) return res.fail('task_not_found', 404);
|
|
990
|
+
} catch (err) {
|
|
991
|
+
console.error('[gds] PATCH /tasks/:id description', err);
|
|
992
|
+
return res.fail('patch_failed', { status: 500, message: 'internal error' });
|
|
993
|
+
}
|
|
994
|
+
}
|
|
979
995
|
if (hasGoalId) {
|
|
980
996
|
try {
|
|
981
997
|
updated = await db.updateTaskGoal(id, body.goal_id);
|
package/package-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bongos/core",
|
|
3
|
-
"version": "1.19.
|
|
3
|
+
"version": "1.19.51",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@bongos/core",
|
|
9
|
-
"version": "1.19.
|
|
9
|
+
"version": "1.19.51",
|
|
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.
|
|
3
|
+
"version": "1.19.51",
|
|
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",
|
package/src/module-api.js
CHANGED
|
@@ -527,8 +527,10 @@ const { validateOrRespond, LIMITS, parseId, asyncHandler, corsPublicGet, parsePa
|
|
|
527
527
|
// landed since 1.19.48 with no explicit bump. run 31523559509. (task 1002620)
|
|
528
528
|
// 1.19.50 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
529
529
|
// landed since 1.19.49 with no explicit bump. run 31524280584. (task 1002620)
|
|
530
|
+
// 1.19.51 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
531
|
+
// landed since 1.19.50 with no explicit bump. run 31525032273. (task 1002620)
|
|
530
532
|
// ---------------------------------------------------------------------------
|
|
531
|
-
const CORE_VERSION = '1.19.
|
|
533
|
+
const CORE_VERSION = '1.19.51'; // CI auto-patch carrier (ADR 0161); see changelog above
|
|
532
534
|
|
|
533
535
|
// A namespaced logger so a module's log lines are attributable + consistent.
|
|
534
536
|
// Usage: const log = api.logger('dev-box'); log.info('mounted');
|
|
@@ -197,6 +197,7 @@ function shouldReserveMigrationNumber(task) {
|
|
|
197
197
|
[() => db.updateTaskAutomationTag(1, 'live-only'), 'automation_tag'],
|
|
198
198
|
[() => db.updateTaskNeedsMigration(1, false), 'needs_migration'],
|
|
199
199
|
[() => db.updateTaskModuleKey(1, null), 'module_key'],
|
|
200
|
+
[() => db.updateTaskDescription(1, 'edited body'), 'description'], // task 1002647
|
|
200
201
|
];
|
|
201
202
|
for (const [call, column] of setters) {
|
|
202
203
|
const before = seen.length;
|