@bongos/core 1.19.380 → 1.19.382

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 CHANGED
@@ -2,22 +2,22 @@
2
2
  "artifact": "bongos-core",
3
3
  "manifest_schema": 1,
4
4
  "generator": "scripts/gds/package-core.js",
5
- "core_version": "1.19.380",
6
- "core_contract": "1.19.380",
7
- "source_commit": "9ac31cfa402b87da10f79f47ebd3853ea094ade1",
5
+ "core_version": "1.19.382",
6
+ "core_contract": "1.19.382",
7
+ "source_commit": "e25777564172174924d9ee444d920a7c1b6dee44",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-08-27T15:01:57.285Z",
9
+ "built_at": "2026-08-27T16:42:17.638Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 336,
13
13
  "agent_docs_stubbed": 22,
14
- "functional_verbatim": 1595,
14
+ "functional_verbatim": 1598,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 1953,
20
- "tree_sha256": "2def5dd84550a7068c137514fb8fa1fcbb7631e2f817a841738ff3ef6d0c634f",
19
+ "file_count": 1956,
20
+ "tree_sha256": "0f3a95aa9c80905da7b7ec21e7cf6edfa3208ae622fe0674fcdb36cbc9319dd5",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/blocker-review/SKILL.md",
@@ -347,12 +347,12 @@
347
347
  {
348
348
  "path": "clients/bongos-client/README.md",
349
349
  "mode": "0000644",
350
- "sha256": "c35dae1d34955947517c4481105267b0153f921a8db4b4c5d3b5293ab4b7987d"
350
+ "sha256": "838e52897ec1b7642d7cc9d3955c0a8b123caa2bc17bf323422eed7b5f2c9322"
351
351
  },
352
352
  {
353
353
  "path": "clients/bongos-client/bongos-client.global.js",
354
354
  "mode": "0000644",
355
- "sha256": "05629fc4ba2d8b3c965a1e8eadee5aece7ffbb446fb473d720df890d28b2ccba"
355
+ "sha256": "c04c5b4959c3bd6ddf7247a5f9b2ff07078384af505ece4de7932b1108bafd50"
356
356
  },
357
357
  {
358
358
  "path": "clients/bongos-client/examples/hello-world.mjs",
@@ -362,17 +362,17 @@
362
362
  {
363
363
  "path": "clients/bongos-client/index.cjs",
364
364
  "mode": "0000644",
365
- "sha256": "e72156a07def001a8ac5ca95920f079c55a49bd0fd713fd22a06a6b84d7957d3"
365
+ "sha256": "0d92a14fe49b6d9b82aa8611c83d23c89dccdf22f68802c129624b924cb6daf6"
366
366
  },
367
367
  {
368
368
  "path": "clients/bongos-client/index.d.ts",
369
369
  "mode": "0000644",
370
- "sha256": "e9a6dd8d60741347814d184016bb3eaae1b319ba299121e7a39a55367bc12e56"
370
+ "sha256": "4b36b46a77832a0f4fb56f627691e396e519ba886addcb9624db2301d67d5006"
371
371
  },
372
372
  {
373
373
  "path": "clients/bongos-client/index.mjs",
374
374
  "mode": "0000644",
375
- "sha256": "7332b346c70cf367f441ba15aa19a0c35180d98239b3525bc2c26285e94c6eb7"
375
+ "sha256": "d0cee5f3378977180a8b7de8ef657a5fd258f81e183074dbd02220f169d7cd49"
376
376
  },
377
377
  {
378
378
  "path": "clients/bongos-client/package.json",
@@ -1477,12 +1477,12 @@
1477
1477
  {
1478
1478
  "path": "docs/api-reference.md",
1479
1479
  "mode": "0000644",
1480
- "sha256": "1d40e3666f05b4b28d7b9433e84c0ae4bfccc907660053006694814799365bf0"
1480
+ "sha256": "01f4d002d3ea1b02c204b48674125deae8e0ffabdd77384852cc51348ecbd18b"
1481
1481
  },
1482
1482
  {
1483
1483
  "path": "docs/api/openapi.json",
1484
1484
  "mode": "0000644",
1485
- "sha256": "57b66bbfe0c1d7aa8274a43d813c77c83986a3e4cf43046e9e0a637ac4fe308d"
1485
+ "sha256": "246192acc035ea58448701176e6f98f6d2f0a01cf27930efcbc58c019291cd3e"
1486
1486
  },
1487
1487
  {
1488
1488
  "path": "docs/architecture.md",
@@ -1507,12 +1507,12 @@
1507
1507
  {
1508
1508
  "path": "docs/copy-inventory.md",
1509
1509
  "mode": "0000644",
1510
- "sha256": "d33a88dc1e00b39960e7e92fadeae3017ed44381eeccdb0a2c104bc01c015da2"
1510
+ "sha256": "80311a873183c3480b49014b5b7a2f6ae9383348941e529c9a9e61a21cf4d6e3"
1511
1511
  },
1512
1512
  {
1513
1513
  "path": "docs/copy-registry.json",
1514
1514
  "mode": "0000644",
1515
- "sha256": "6c208eae7de91f25b52939cb23933a7e5d5b1ae9fac835c87826530460a01270"
1515
+ "sha256": "02d3c0b762c635d55febb7510d6aebdbb56213eb2841bd703b5eff1a044aa5e7"
1516
1516
  },
1517
1517
  {
1518
1518
  "path": "docs/design-contract.md",
@@ -2674,6 +2674,11 @@
2674
2674
  "mode": "0000644",
2675
2675
  "sha256": "b3fbc5d91adf6c6021859bdd8050015c0449360eb33d70c71fdeda0cc1276dd3"
2676
2676
  },
2677
+ {
2678
+ "path": "migrations/core_228_idea_inbox_captured_by_idx.sql",
2679
+ "mode": "0000644",
2680
+ "sha256": "031f739e4e22e2bf9fa3480147f4b0f280d4ed8610d71d8d8a828a83b9cabca2"
2681
+ },
2677
2682
  {
2678
2683
  "path": "modules/agents/migrations/agents_001_definitions.sql",
2679
2684
  "mode": "0000644",
@@ -3057,7 +3062,7 @@
3057
3062
  {
3058
3063
  "path": "modules/dev-box/app/src/vendor/bongos-client.cjs",
3059
3064
  "mode": "0000644",
3060
- "sha256": "e72156a07def001a8ac5ca95920f079c55a49bd0fd713fd22a06a6b84d7957d3"
3065
+ "sha256": "0d92a14fe49b6d9b82aa8611c83d23c89dccdf22f68802c129624b924cb6daf6"
3061
3066
  },
3062
3067
  {
3063
3068
  "path": "modules/dev-box/app/test/unit.mjs",
@@ -3757,7 +3762,7 @@
3757
3762
  {
3758
3763
  "path": "modules/hall-ui/public/hall-kit.js",
3759
3764
  "mode": "0000644",
3760
- "sha256": "eea1102877233794d84a6f76187a9fbd26c4a58cf523df3bf0a31c041ead9933"
3765
+ "sha256": "e392af98c2d310bfe80ccc560895dc2729abbe416087fcc7609d22dd4593484c"
3761
3766
  },
3762
3767
  {
3763
3768
  "path": "modules/hall-ui/public/hall-render.js",
@@ -3912,12 +3917,12 @@
3912
3917
  {
3913
3918
  "path": "modules/hall-ui/public/profile.html",
3914
3919
  "mode": "0000644",
3915
- "sha256": "b40e046ca91cb99f0f8a701bd4cc96c03b23432691e256c97cd55527c0be604b"
3920
+ "sha256": "437a1d29edb129f2c21aaa842a57e06058e4355c14c8b0deba6576c83672a90d"
3916
3921
  },
3917
3922
  {
3918
3923
  "path": "modules/hall-ui/public/profile.js",
3919
3924
  "mode": "0000644",
3920
- "sha256": "a63cb32c0c8b8fa5628e80bcf1d27b8a556340d585c38f98a7c3bee629eb6804"
3925
+ "sha256": "d1e73a781b88743c5cfe21452d738989e631d30f12e38a2589a6519fc7b4b81e"
3921
3926
  },
3922
3927
  {
3923
3928
  "path": "modules/hall-ui/public/ranks.html",
@@ -4072,7 +4077,7 @@
4072
4077
  {
4073
4078
  "path": "modules/ideas/inbox.js",
4074
4079
  "mode": "0000644",
4075
- "sha256": "edb3fc66ff0c89fde112b691bd761478ccf621bacb0bb91f7ae94ec63c2546c7"
4080
+ "sha256": "72b69185c90131cc8004ad28f24e9d5bfb7eaf4cc01b8d13ad898019a6f58f39"
4076
4081
  },
4077
4082
  {
4078
4083
  "path": "modules/ideas/migrations/ideas_001_grades.sql",
@@ -4112,7 +4117,7 @@
4112
4117
  {
4113
4118
  "path": "modules/ideas/routes/inbox.js",
4114
4119
  "mode": "0000644",
4115
- "sha256": "cfe139439ef93d42718354fd10781e0aa11f5f8a730d64dbf09c7232305daaaf"
4120
+ "sha256": "a092eea43d9030eb55a23b60bd1ad5673132b83a3a2649961413cd505fd685ef"
4116
4121
  },
4117
4122
  {
4118
4123
  "path": "modules/ideas/routing.js",
@@ -4129,6 +4134,11 @@
4129
4134
  "mode": "0000644",
4130
4135
  "sha256": "7cb9dac9cb87b679e1ae50e4112b3a7928a38ebb9902c8947a74d17bec4d9009"
4131
4136
  },
4137
+ {
4138
+ "path": "modules/lifecycle/activity.js",
4139
+ "mode": "0000644",
4140
+ "sha256": "38bbb1b0f0992c655cd48f95476fbbdac11381bb929999b6da0f68fbbf802b16"
4141
+ },
4132
4142
  {
4133
4143
  "path": "modules/lifecycle/claim-eligibility.js",
4134
4144
  "mode": "0000644",
@@ -4302,7 +4312,7 @@
4302
4312
  {
4303
4313
  "path": "modules/lifecycle/lifecycle.js",
4304
4314
  "mode": "0000644",
4305
- "sha256": "ba8f6356c8ec9f908878d592d294033db1c9ff9403306a2ae5099df7aa466e72"
4315
+ "sha256": "2d683f62f6813d7894dd54657a70b027cf686dfa76879541adc84544f03d4b51"
4306
4316
  },
4307
4317
  {
4308
4318
  "path": "modules/lifecycle/merge-lock.js",
@@ -5077,12 +5087,12 @@
5077
5087
  {
5078
5088
  "path": "package-lock.json",
5079
5089
  "mode": "0000644",
5080
- "sha256": "05f2e731a6530add843687946f4d1a183df137883aa72b0f5e05fbcd245a9606"
5090
+ "sha256": "b29fad739b5ae1c818f7974aaffa1a2c9cdcd468a96fdd5cf557e669539a26ea"
5081
5091
  },
5082
5092
  {
5083
5093
  "path": "package.json",
5084
5094
  "mode": "0000644",
5085
- "sha256": "aefb29c1023e56ba909de7085ef2fabc5235bc5281698ebe6b7f02db20b48b56"
5095
+ "sha256": "d0986bb5a781bc56402c86519e1c293f7672c0b52938574913356eceba838dfb"
5086
5096
  },
5087
5097
  {
5088
5098
  "path": "public-docs/index.html",
@@ -6452,7 +6462,7 @@
6452
6462
  {
6453
6463
  "path": "scripts/gds/ship-memory-sync.js",
6454
6464
  "mode": "0000644",
6455
- "sha256": "3eb7d979b1d1706b532cd93e272e254e166bdc27d18101e0d4b7b1a0f7b51346"
6465
+ "sha256": "85d3fae0872110a184650e3b45ee7ea5f5fc45d0dfc41374bca0926231dba4b8"
6456
6466
  },
6457
6467
  {
6458
6468
  "path": "scripts/gds/ship-merge.js",
@@ -6477,7 +6487,7 @@
6477
6487
  {
6478
6488
  "path": "scripts/gds/ship-session-upload.js",
6479
6489
  "mode": "0000644",
6480
- "sha256": "f340c466aa2eb2b7e79fb8626f687de3f85f3631a103e36f0ca91a27787efb7f"
6490
+ "sha256": "8a700110c7e13249dc16991b481c6abf385c9c4ee7d1e683b7d495f6aef5f708"
6481
6491
  },
6482
6492
  {
6483
6493
  "path": "scripts/gds/ship-state.js",
@@ -6627,7 +6637,7 @@
6627
6637
  {
6628
6638
  "path": "scripts/hall-preview/server.js",
6629
6639
  "mode": "0000644",
6630
- "sha256": "384b6ee204f1ca1bb0f352d6a879f7674c9e7741999e584b72dfe4bf1983d0d1"
6640
+ "sha256": "eb2c9bde186fcd050c41d68697945f46b9d891e545cc65f81db71b647a7cb3d9"
6631
6641
  },
6632
6642
  {
6633
6643
  "path": "scripts/migrate.sh",
@@ -6887,7 +6897,7 @@
6887
6897
  {
6888
6898
  "path": "src/bongos/routes/builders.js",
6889
6899
  "mode": "0000644",
6890
- "sha256": "38760c782a379b7a977b9ed4e0af00726d4080ebedf9ea071cefe8d90ceb69b1"
6900
+ "sha256": "a5250b0ff33a42087c2546ab74b68cc7decdd3a08fda7a2f0ad56bcbf51837cd"
6891
6901
  },
6892
6902
  {
6893
6903
  "path": "src/bongos/routes/github.js",
@@ -6987,7 +6997,7 @@
6987
6997
  {
6988
6998
  "path": "src/module-api.js",
6989
6999
  "mode": "0000644",
6990
- "sha256": "01bd9ccb349c0ae53bcf4ea71094aebb92ba90c5a21b75eace035f75a6ddfc32"
7000
+ "sha256": "9a9f751f0b8da59f2e74a6ee3ea8f57c3ddbd0be971b97d5c654d7ef02d6b322"
6991
7001
  },
6992
7002
  {
6993
7003
  "path": "src/module-loader/catalog.js",
@@ -8944,6 +8954,11 @@
8944
8954
  "mode": "0000644",
8945
8955
  "sha256": "3c85d28ecc55e375988f3e55aee993c8c84220889678262d8207146c2772f3f5"
8946
8956
  },
8957
+ {
8958
+ "path": "tests/profile_activity.mjs",
8959
+ "mode": "0000644",
8960
+ "sha256": "013df2528c4998588c1d3f89a9a25f8fa1e912b8abc2d8e95c26c250869a386f"
8961
+ },
8947
8962
  {
8948
8963
  "path": "tests/profile_fields.mjs",
8949
8964
  "mode": "0000644",
@@ -9352,7 +9367,7 @@
9352
9367
  {
9353
9368
  "path": "tests/session_records.mjs",
9354
9369
  "mode": "0000644",
9355
- "sha256": "8c62fe0bec07aea4c30f84d296eb7b40c9550606aacf6cb63f9644ca34f12069"
9370
+ "sha256": "1beb0554d1e29b853d54d17e4345ca7c62f1cd34c72fe6a20b9e2d712e7f2dce"
9356
9371
  },
9357
9372
  {
9358
9373
  "path": "tests/session_reward_on_land.mjs",
@@ -5,7 +5,7 @@ A **generated**, zero-dependency typed client for the Bongos API — produced fr
5
5
  by hand; it regenerates when the spec changes, so it can never drift from the routes.
6
6
 
7
7
  - API version: **v1** (served at `/api/bongos/v1`)
8
- - 322 operations across 52 resource groups
8
+ - 324 operations across 52 resource groups
9
9
 
10
10
  ## Install
11
11
 
@@ -223,6 +223,8 @@ function createClient(opts = {}) {
223
223
  "builders": {
224
224
  // GET /builders/{id}/active-claims — rank: metic+archon — GET /builders/:id/active-claims
225
225
  getBuildersIdActiveClaims: (args) => request("GET", "/builders/{id}/active-claims", { hasBody: false }, args),
226
+ // GET /builders/{id}/activity — rank: any-builder — GET /builders/:id/activity
227
+ getBuildersIdActivity: (args) => request("GET", "/builders/{id}/activity", { hasBody: false }, args),
226
228
  // PATCH /builders/{id}/budget — rank: metic+archon — PATCH /builders/:id/budget
227
229
  patchBuildersIdBudget: (args) => request("PATCH", "/builders/{id}/budget", { hasBody: true }, args),
228
230
  // GET /builders/{id}/onboarding — rank: public — GET /builders/:id/onboarding
@@ -441,6 +443,8 @@ function createClient(opts = {}) {
441
443
  postInboxIdSpark: (args) => request("POST", "/inbox/{id}/spark", { hasBody: true }, args),
442
444
  // GET /inbox/awaiting-nod — rank: metic+archon — GET /inbox/awaiting-nod
443
445
  getInboxAwaitingNod: (args) => request("GET", "/inbox/awaiting-nod", { hasBody: false }, args),
446
+ // GET /inbox/by-builder/{id} — rank: any-builder — GET /inbox/by-builder/:id
447
+ getInboxByBuilderId: (args) => request("GET", "/inbox/by-builder/{id}", { hasBody: false }, args),
444
448
  // POST /inbox/score — rank: any-builder — POST /inbox/score
445
449
  postInboxScore: (args) => request("POST", "/inbox/score", { hasBody: true }, args),
446
450
  // GET /inbox/sparks — rank: any-builder — GET /inbox/sparks
@@ -222,6 +222,8 @@ function createClient(opts = {}) {
222
222
  "builders": {
223
223
  // GET /builders/{id}/active-claims — rank: metic+archon — GET /builders/:id/active-claims
224
224
  getBuildersIdActiveClaims: (args) => request("GET", "/builders/{id}/active-claims", { hasBody: false }, args),
225
+ // GET /builders/{id}/activity — rank: any-builder — GET /builders/:id/activity
226
+ getBuildersIdActivity: (args) => request("GET", "/builders/{id}/activity", { hasBody: false }, args),
225
227
  // PATCH /builders/{id}/budget — rank: metic+archon — PATCH /builders/:id/budget
226
228
  patchBuildersIdBudget: (args) => request("PATCH", "/builders/{id}/budget", { hasBody: true }, args),
227
229
  // GET /builders/{id}/onboarding — rank: public — GET /builders/:id/onboarding
@@ -440,6 +442,8 @@ function createClient(opts = {}) {
440
442
  postInboxIdSpark: (args) => request("POST", "/inbox/{id}/spark", { hasBody: true }, args),
441
443
  // GET /inbox/awaiting-nod — rank: metic+archon — GET /inbox/awaiting-nod
442
444
  getInboxAwaitingNod: (args) => request("GET", "/inbox/awaiting-nod", { hasBody: false }, args),
445
+ // GET /inbox/by-builder/{id} — rank: any-builder — GET /inbox/by-builder/:id
446
+ getInboxByBuilderId: (args) => request("GET", "/inbox/by-builder/{id}", { hasBody: false }, args),
443
447
  // POST /inbox/score — rank: any-builder — POST /inbox/score
444
448
  postInboxScore: (args) => request("POST", "/inbox/score", { hasBody: true }, args),
445
449
  // GET /inbox/sparks — rank: any-builder — GET /inbox/sparks
@@ -31,6 +31,7 @@ export interface GetBoxTerminalResponse { state: unknown; url: unknown; credenti
31
31
  export interface GetBoxesResponse { boxes: unknown }
32
32
  export interface GetBuildersDirectoryResponse { builders: unknown }
33
33
  export interface GetBuildersIdActiveClaimsResponse { builder_id: unknown; claims: unknown; stale_hours: unknown }
34
+ export interface GetBuildersIdActivityResponse { builder_id: unknown; section: unknown; role: unknown; rows: unknown; total: unknown }
34
35
  export interface GetBuildersIdOnboardingResponse { builder_id: unknown; onboarding: unknown }
35
36
  export interface GetBuildersIdProfileResponse { builder: unknown; shipped_count: unknown; recent_ships: unknown; achievements: unknown; cross_project?: unknown }
36
37
  export interface GetBuildersMePendingRankChangeResponse { change: unknown; greeting?: unknown }
@@ -55,6 +56,7 @@ export interface GetHealthzResponse { ok: boolean; auth_configured: unknown }
55
56
  export interface GetHelpRequestsForMeResponse { help_requests: unknown; count: unknown; crafts: unknown }
56
57
  export interface GetHelpRequestsMineResponse { help_requests: unknown; count: unknown }
57
58
  export interface GetInboxAwaitingNodResponse { awaiting: unknown; count: unknown }
59
+ export interface GetInboxByBuilderIdResponse { builder_id: unknown; ideas: unknown; total: unknown; limit: unknown; offset: unknown }
58
60
  export interface GetInboxIdResponse { idea: unknown }
59
61
  export interface GetInboxResponse { ideas: unknown; open_count: unknown }
60
62
  export interface GetInboxSparksResponse { sparks: unknown; count: unknown }
@@ -513,6 +515,8 @@ export interface BongosClient {
513
515
  "builders": {
514
516
  /** GET /builders/{id}/active-claims — rank: metic+archon */
515
517
  getBuildersIdActiveClaims(args?: RequestArgs): Promise<GetBuildersIdActiveClaimsResponse>;
518
+ /** GET /builders/{id}/activity — rank: any-builder */
519
+ getBuildersIdActivity(args?: RequestArgs): Promise<GetBuildersIdActivityResponse>;
516
520
  /** PATCH /builders/{id}/budget — rank: metic+archon */
517
521
  patchBuildersIdBudget(args?: RequestArgs & { body?: PatchBuildersIdBudgetRequest }): Promise<PatchBuildersIdBudgetResponse>;
518
522
  /** GET /builders/{id}/onboarding — rank: public */
@@ -731,6 +735,8 @@ export interface BongosClient {
731
735
  postInboxIdSpark(args?: RequestArgs): Promise<PostInboxIdSparkResponse>;
732
736
  /** GET /inbox/awaiting-nod — rank: metic+archon */
733
737
  getInboxAwaitingNod(args?: RequestArgs): Promise<GetInboxAwaitingNodResponse>;
738
+ /** GET /inbox/by-builder/{id} — rank: any-builder */
739
+ getInboxByBuilderId(args?: RequestArgs): Promise<GetInboxByBuilderIdResponse>;
734
740
  /** POST /inbox/score — rank: any-builder */
735
741
  postInboxScore(args: RequestArgs & { body: PostInboxScoreRequest }): Promise<PostInboxScoreResponse>;
736
742
  /** GET /inbox/sparks — rank: any-builder */
@@ -219,6 +219,8 @@ export function createClient(opts = {}) {
219
219
  "builders": {
220
220
  // GET /builders/{id}/active-claims — rank: metic+archon — GET /builders/:id/active-claims
221
221
  getBuildersIdActiveClaims: (args) => request("GET", "/builders/{id}/active-claims", { hasBody: false }, args),
222
+ // GET /builders/{id}/activity — rank: any-builder — GET /builders/:id/activity
223
+ getBuildersIdActivity: (args) => request("GET", "/builders/{id}/activity", { hasBody: false }, args),
222
224
  // PATCH /builders/{id}/budget — rank: metic+archon — PATCH /builders/:id/budget
223
225
  patchBuildersIdBudget: (args) => request("PATCH", "/builders/{id}/budget", { hasBody: true }, args),
224
226
  // GET /builders/{id}/onboarding — rank: public — GET /builders/:id/onboarding
@@ -437,6 +439,8 @@ export function createClient(opts = {}) {
437
439
  postInboxIdSpark: (args) => request("POST", "/inbox/{id}/spark", { hasBody: true }, args),
438
440
  // GET /inbox/awaiting-nod — rank: metic+archon — GET /inbox/awaiting-nod
439
441
  getInboxAwaitingNod: (args) => request("GET", "/inbox/awaiting-nod", { hasBody: false }, args),
442
+ // GET /inbox/by-builder/{id} — rank: any-builder — GET /inbox/by-builder/:id
443
+ getInboxByBuilderId: (args) => request("GET", "/inbox/by-builder/{id}", { hasBody: false }, args),
440
444
  // POST /inbox/score — rank: any-builder — POST /inbox/score
441
445
  postInboxScore: (args) => request("POST", "/inbox/score", { hasBody: true }, args),
442
446
  // GET /inbox/sparks — rank: any-builder — GET /inbox/sparks
@@ -2676,6 +2676,58 @@
2676
2676
  ]
2677
2677
  }
2678
2678
  },
2679
+ "/builders/{id}/activity": {
2680
+ "get": {
2681
+ "operationId": "get_builders_id_activity",
2682
+ "tags": [
2683
+ "builders"
2684
+ ],
2685
+ "summary": "GET /builders/:id/activity",
2686
+ "description": "GET /builders/:id/activity — the profile's PER-CRAFT activity log (task 1003281, goal 1000072, criterion legibility-activity-by-role). WHAT IT ADDS OVER /profile. The profile answers \"how much has this person shipped\" — one count and the last five works, craft-blind. A person's artist track record is a different question from their engineer one, so this route serves ONE section (`tasks` or `goals`) for ONE craft, paged. It EXTENDS the profile surface rather than forking it: the page is the same page, the identity band and the achievement shelf are unchanged, and this fills the ledger below them. The third section of that log — the IDEA TRAIL — is served by the ideas module's GET /inbox/by-builder/:id, because an idea is its domain's row, not a lifecycle one. ONE SECTION PER CALL, not all three in one payload: each ledger pages independently, and a single response carrying three page windows would need three limit/offset pairs on one query string to say anything at all. rank: any-builder, NOT owner-only — a track record is a thing other people read; that is what makes the profile a portfolio rather than a dashboard, and it is the same posture /profile, /builders/roster and the leaderboard already take toward the same rows. The per-viewer filtering that DOES matter is the private-goal wall below, and it is applied to the DATA, not to the caller. But, unlike /profile directly above, this read IS gated to a sign-in. The goals half is viewer-dependent: a private goal's title is exactly what ADR 0112 says a non-member must not learn, so the read needs to know who is asking. Serving it publicly would mean either leaking private goals or silently omitting the viewer's own — both worse than a sign-in. The tasks half is the same already-public shipped-work data /profile returns.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
2687
+ "x-rank": "any-builder",
2688
+ "x-source": "src/bongos/routes/builders.js",
2689
+ "parameters": [
2690
+ {
2691
+ "name": "id",
2692
+ "in": "path",
2693
+ "required": true,
2694
+ "schema": {
2695
+ "type": "string"
2696
+ },
2697
+ "description": "Path parameter `id`."
2698
+ }
2699
+ ],
2700
+ "responses": {
2701
+ "200": {
2702
+ "description": "Success.",
2703
+ "content": {
2704
+ "application/json": {
2705
+ "schema": {
2706
+ "$ref": "#/components/schemas/GetBuildersIdActivityResponse"
2707
+ }
2708
+ }
2709
+ }
2710
+ },
2711
+ "400": {
2712
+ "$ref": "#/components/responses/BadRequest"
2713
+ },
2714
+ "401": {
2715
+ "$ref": "#/components/responses/Unauthorized"
2716
+ },
2717
+ "403": {
2718
+ "$ref": "#/components/responses/Forbidden"
2719
+ },
2720
+ "404": {
2721
+ "$ref": "#/components/responses/NotFound"
2722
+ }
2723
+ },
2724
+ "security": [
2725
+ {
2726
+ "builderSession": []
2727
+ }
2728
+ ]
2729
+ }
2730
+ },
2679
2731
  "/builders/{id}/budget": {
2680
2732
  "patch": {
2681
2733
  "operationId": "patch_builders_id_budget",
@@ -6778,6 +6830,58 @@
6778
6830
  ]
6779
6831
  }
6780
6832
  },
6833
+ "/inbox/by-builder/{id}": {
6834
+ "get": {
6835
+ "operationId": "get_inbox_by_builder_id",
6836
+ "tags": [
6837
+ "inbox"
6838
+ ],
6839
+ "summary": "GET /inbox/by-builder/:id",
6840
+ "description": "THE IDEA TRAIL: every idea one builder filed, newest first, with what became of each (task 1003281, goal 1000072, criterion legibility-activity-by-role). Backs the ideator view of the profile's activity log; the tasks and goals halves of that log are served by the core GET /builders/:id/activity, because they are lifecycle rows, not ideas. WHY IT IS A LIST ROUTE AND NOT A FIELD ON THE PROFILE: the trail is paged. A prolific filer's trail is long, and the criterion asks for \"every idea you submitted\", so it cannot be a top-N attached to another response. Gated to any signed-in builder, matching GET /inbox/:id directly below: idea TITLES and triage notes are builder-visible, not world-visible, and the public profile route deliberately carries none of them. The viewer's rank rides into the read so the skill-friction gate holds here as it does on every other idea list. DECLARED BEFORE `GET /inbox/:id` DELIBERATELY — the fourth route in this file to need that. `/inbox/by-builder/41` would otherwise bind `:id='by-builder'` and parseId would 400 the whole trail. tests/profile_activity.mjs pins the relative order.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
6841
+ "x-rank": "any-builder",
6842
+ "x-source": "modules/ideas/routes/inbox.js",
6843
+ "parameters": [
6844
+ {
6845
+ "name": "id",
6846
+ "in": "path",
6847
+ "required": true,
6848
+ "schema": {
6849
+ "type": "string"
6850
+ },
6851
+ "description": "Path parameter `id`."
6852
+ }
6853
+ ],
6854
+ "responses": {
6855
+ "200": {
6856
+ "description": "Success.",
6857
+ "content": {
6858
+ "application/json": {
6859
+ "schema": {
6860
+ "$ref": "#/components/schemas/GetInboxByBuilderIdResponse"
6861
+ }
6862
+ }
6863
+ }
6864
+ },
6865
+ "400": {
6866
+ "$ref": "#/components/responses/BadRequest"
6867
+ },
6868
+ "401": {
6869
+ "$ref": "#/components/responses/Unauthorized"
6870
+ },
6871
+ "403": {
6872
+ "$ref": "#/components/responses/Forbidden"
6873
+ },
6874
+ "404": {
6875
+ "$ref": "#/components/responses/NotFound"
6876
+ }
6877
+ },
6878
+ "security": [
6879
+ {
6880
+ "builderSession": []
6881
+ }
6882
+ ]
6883
+ }
6884
+ },
6781
6885
  "/inbox/score": {
6782
6886
  "post": {
6783
6887
  "operationId": "post_inbox_score",
@@ -14986,6 +15090,23 @@
14986
15090
  "stale_hours"
14987
15091
  ]
14988
15092
  },
15093
+ "GetBuildersIdActivityResponse": {
15094
+ "type": "object",
15095
+ "properties": {
15096
+ "builder_id": {},
15097
+ "section": {},
15098
+ "role": {},
15099
+ "rows": {},
15100
+ "total": {}
15101
+ },
15102
+ "required": [
15103
+ "builder_id",
15104
+ "section",
15105
+ "role",
15106
+ "rows",
15107
+ "total"
15108
+ ]
15109
+ },
14989
15110
  "GetBuildersIdOnboardingResponse": {
14990
15111
  "type": "object",
14991
15112
  "properties": {
@@ -15272,6 +15393,23 @@
15272
15393
  "count"
15273
15394
  ]
15274
15395
  },
15396
+ "GetInboxByBuilderIdResponse": {
15397
+ "type": "object",
15398
+ "properties": {
15399
+ "builder_id": {},
15400
+ "ideas": {},
15401
+ "total": {},
15402
+ "limit": {},
15403
+ "offset": {}
15404
+ },
15405
+ "required": [
15406
+ "builder_id",
15407
+ "ideas",
15408
+ "total",
15409
+ "limit",
15410
+ "offset"
15411
+ ]
15412
+ },
15275
15413
  "GetInboxIdResponse": {
15276
15414
  "type": "object",
15277
15415
  "properties": {
@@ -20310,9 +20448,9 @@
20310
20448
  "description": "A required dependency/feature is not configured or is temporarily down."
20311
20449
  }
20312
20450
  },
20313
- "x-endpoint-count": 322,
20314
- "x-schema-count": 357,
20451
+ "x-endpoint-count": 324,
20452
+ "x-schema-count": 359,
20315
20453
  "x-undocumented-bodies": 9,
20316
- "x-response-schemas": 240,
20454
+ "x-response-schemas": 242,
20317
20455
  "x-generated-by": "scripts/gds/gen-api-docs.js"
20318
20456
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Bongos API reference
4
4
 
5
- > **Generated from the live route files** — the route file is authoritative. 322 endpoints across 52 route files.
5
+ > **Generated from the live route files** — the route file is authoritative. 324 endpoints across 52 route files.
6
6
  > Machine-readable spec: [`docs/api/openapi.json`](api/openapi.json) (OpenAPI 3.1). Rendered docs site: **`/docs`** (e.g. `cloudbongos.com/docs`).
7
7
 
8
8
  Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>.md)): `public` < `any-builder` < `metic+archon` < `archon`.
@@ -119,11 +119,12 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
119
119
  |---|---|---|---|---|
120
120
  | GET | `/api/bongos/bug-attachments/:name` | `any-builder` | — | GET /api/bongos/bug-attachments/:name — stream one stored image. |
121
121
 
122
- ## `builders` (9)
122
+ ## `builders` (10)
123
123
 
124
124
  | Method | Path | Rank | Body | Description |
125
125
  |---|---|---|---|---|
126
126
  | GET | `/api/bongos/builders/:id/active-claims` | `metic+archon` | — | GET /builders/:id/active-claims — V3.R14 (task 238). |
127
+ | GET | `/api/bongos/builders/:id/activity` | `any-builder` | — | GET /builders/:id/activity — the profile's PER-CRAFT activity log (task 1003281, goal 1000072, criterion legibility-activity-by-role). |
127
128
  | PATCH | `/api/bongos/builders/:id/budget` | `metic+archon` | `monthly_budget_usd` | PATCH /builders/:id/budget — set or clear a builder's monthly spend ceiling (V3.R84 task 302, criterion C3). |
128
129
  | GET | `/api/bongos/builders/:id/onboarding` | `public` | — | GET /builders/:id/onboarding — V3.R75 (task 294) onboarding checklist read. |
129
130
  | GET | `/api/bongos/builders/:id/profile` | `public` | — | GET /builders/:id/profile — the viewable builder profile page's read (task 1467, goal 25 "bx-identity"). |
@@ -278,7 +279,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
278
279
  | GET | `/api/bongos/help-requests/for-me` | `any-builder` | — | The addressed read — C01's answer to "and fires a notification". |
279
280
  | GET | `/api/bongos/help-requests/mine` | `any-builder` | — | your own asks, so you can settle them. |
280
281
 
281
- ## `inbox` (14)
282
+ ## `inbox` (15)
282
283
 
283
284
  | Method | Path | Rank | Body | Description |
284
285
  |---|---|---|---|---|
@@ -293,6 +294,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
293
294
  | POST | `/api/bongos/inbox/:id/spark` | `any-builder` | — | Mark a Quick Idea as a Big Idea Spark — "I have the spark but not the full picture, someone develop this". |
294
295
  | DELETE | `/api/bongos/inbox/:id/spark` | `any-builder` | — | Withdraw the Big Idea Spark mark — the reversibility half of R144. |
295
296
  | GET | `/api/bongos/inbox/awaiting-nod` | `metic+archon` | — | GET /inbox/awaiting-nod — the NOD QUEUE (task 1003066, BV1.R05). |
297
+ | GET | `/api/bongos/inbox/by-builder/:id` | `any-builder` | — | THE IDEA TRAIL: every idea one builder filed, newest first, with what became of each (task 1003281, goal 1000072, criterion legibility-ac… |
296
298
  | POST | `/api/bongos/inbox/score` | `any-builder` | `field_values`, `template_key` | |
297
299
  | GET | `/api/bongos/inbox/sparks` | `any-builder` | — | GET /inbox/sparks — THE SPARK QUEUE (task 1002921 / BV1.R145, goal 1000062). |
298
300
  | GET | `/api/bongos/inbox/template` | `any-builder` | — | ----------------------------------------------------------------------- The two reads the hall's Full Idea composer is built from (task 1… |