@bongos/core 1.19.699 → 1.19.701

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.699",
6
- "core_contract": "1.19.699",
7
- "source_commit": "c2fc577575ff838fa4b7c6ef9b487a61834508da",
5
+ "core_version": "1.19.701",
6
+ "core_contract": "1.19.701",
7
+ "source_commit": "6c01baa69654043099e16c9bf0353eff61d2012d",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-09-13T03:11:31.535Z",
9
+ "built_at": "2026-09-13T03:22:47.893Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 477,
13
13
  "agent_docs_stubbed": 24,
14
- "functional_verbatim": 2126,
14
+ "functional_verbatim": 2130,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 2627,
20
- "tree_sha256": "6784a09f48fd3badc907d3157a51dfd66a765084f015b78924eb7229bcb7c757",
19
+ "file_count": 2631,
20
+ "tree_sha256": "640bb539971ad78a750aa80116d26c7f1f81fc1b2afb21ef0fd33855189fe10a",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -367,12 +367,12 @@
367
367
  {
368
368
  "path": "clients/bongos-client/README.md",
369
369
  "mode": "0000644",
370
- "sha256": "b15290057c38e4b80db4136d7fdd32549718e31f5975484e77098c66050c4366"
370
+ "sha256": "cfa105831443d1543f03b217a1673b12ba54e40198d768b57bac1c10459ee35c"
371
371
  },
372
372
  {
373
373
  "path": "clients/bongos-client/bongos-client.global.js",
374
374
  "mode": "0000644",
375
- "sha256": "bdf715d3196df99d675570748f7ac054522046cbe89d78b84c27eef89a52d18f"
375
+ "sha256": "a418c0eace4c6335d4bd131ce33032b716bdd33f1b7b080c03b76db4259aa069"
376
376
  },
377
377
  {
378
378
  "path": "clients/bongos-client/examples/hello-world.mjs",
@@ -382,17 +382,17 @@
382
382
  {
383
383
  "path": "clients/bongos-client/index.cjs",
384
384
  "mode": "0000644",
385
- "sha256": "2fbbab84a89021945a707fd21d72acbad7f03b77c5fb6eb39abce44a64d4cc1b"
385
+ "sha256": "c36be893037b5c271ca116d9a26d66defcde55f1b06a1ea5b6a736b1997be0d4"
386
386
  },
387
387
  {
388
388
  "path": "clients/bongos-client/index.d.ts",
389
389
  "mode": "0000644",
390
- "sha256": "101095af6616b30d3338ec12394343f360d8a583ef3da84f0dce49edc80630cb"
390
+ "sha256": "4fc17fc7a5a9ecdaa4539d99f6f30dde4a600043b24affd4677018c95fb94b17"
391
391
  },
392
392
  {
393
393
  "path": "clients/bongos-client/index.mjs",
394
394
  "mode": "0000644",
395
- "sha256": "eeb72bda7a89900279647d6d999d2a920a986bf2f4ed3a63782cd4e36b1b3dfc"
395
+ "sha256": "83c4a4fc8f4adccb95f15c1943cc40eb6c29d8027c58269271313bb37dbad46c"
396
396
  },
397
397
  {
398
398
  "path": "clients/bongos-client/package.json",
@@ -1922,12 +1922,12 @@
1922
1922
  {
1923
1923
  "path": "docs/api-reference.md",
1924
1924
  "mode": "0000644",
1925
- "sha256": "f4f639df647605d86971b62b81921c77c465ded0782eb29d7fc5254ba2f16d0d"
1925
+ "sha256": "2e05ec4efeab7341561a2230e880f6f34d55ada2d542e53b3dcf87f1efa2062c"
1926
1926
  },
1927
1927
  {
1928
1928
  "path": "docs/api/openapi.json",
1929
1929
  "mode": "0000644",
1930
- "sha256": "b09110e4eec5225c0594e4f7a3bd3e18878f751ee4697af87209568d69483c3a"
1930
+ "sha256": "7263a9c74173ef0ca46a444310156f5d901ad4bb191fbd181f690387171d755c"
1931
1931
  },
1932
1932
  {
1933
1933
  "path": "docs/architecture.md",
@@ -2802,7 +2802,7 @@
2802
2802
  {
2803
2803
  "path": "docs/module-api-changelog.md",
2804
2804
  "mode": "0000644",
2805
- "sha256": "83f3755afa52e27b8dc1c9cacc65fd57eb20ca11463f1408bb7298279bbf3994"
2805
+ "sha256": "4fc39aaaae76afb8153485474fc9f3459a2ee380b96f59d1d693a4a7680db464"
2806
2806
  },
2807
2807
  {
2808
2808
  "path": "docs/modules-contract.md",
@@ -3862,7 +3862,7 @@
3862
3862
  {
3863
3863
  "path": "modules/agents/lib/validate.js",
3864
3864
  "mode": "0000644",
3865
- "sha256": "505b62e453d62b820720c00abf661f1ca1ffbfd93d3eba1bdcdf20c7cca95ba7"
3865
+ "sha256": "5cff70fc4e280c49d33dfb8f60ddb01181decd1645625b0bb5e7c2eb97335b81"
3866
3866
  },
3867
3867
  {
3868
3868
  "path": "modules/agents/migrations/agents_001_definitions.sql",
@@ -3872,7 +3872,12 @@
3872
3872
  {
3873
3873
  "path": "modules/agents/module.json",
3874
3874
  "mode": "0000644",
3875
- "sha256": "055d1a806c40d8153b45bac2518b183874d9a8df7924f00355c86ed50682dd24"
3875
+ "sha256": "af487dc7d134b45f2c1616b1a06cb017106529510e5ebc9d15d7dbb9f72d5fe5"
3876
+ },
3877
+ {
3878
+ "path": "modules/agents/routes/agents.js",
3879
+ "mode": "0000644",
3880
+ "sha256": "31fbc1118ac1f315babb9ba3d0ab4ae634bdce3a6e83cb79defdad73288b2e00"
3876
3881
  },
3877
3882
  {
3878
3883
  "path": "modules/agents/spawn.js",
@@ -4257,7 +4262,7 @@
4257
4262
  {
4258
4263
  "path": "modules/dev-box/app/src/vendor/bongos-client.cjs",
4259
4264
  "mode": "0000644",
4260
- "sha256": "2fbbab84a89021945a707fd21d72acbad7f03b77c5fb6eb39abce44a64d4cc1b"
4265
+ "sha256": "c36be893037b5c271ca116d9a26d66defcde55f1b06a1ea5b6a736b1997be0d4"
4261
4266
  },
4262
4267
  {
4263
4268
  "path": "modules/dev-box/app/test/unit.mjs",
@@ -5637,7 +5642,7 @@
5637
5642
  {
5638
5643
  "path": "modules/lifecycle/conflict-resolve.js",
5639
5644
  "mode": "0000644",
5640
- "sha256": "3e20f4965d1d83d17f8e777201bd7e4fd7857843295180542914de16ae51e936"
5645
+ "sha256": "4114eb2632a95a9b830956d0e476ad92ed6eaaa526d9bd46e7ddba8a6fb566e3"
5641
5646
  },
5642
5647
  {
5643
5648
  "path": "modules/lifecycle/criterion-suggest.js",
@@ -5724,6 +5729,11 @@
5724
5729
  "mode": "0000644",
5725
5730
  "sha256": "23ee20e57c67adb5d2ec29c654d2bc469434cafa010b375a8a4452ced1df49e3"
5726
5731
  },
5732
+ {
5733
+ "path": "modules/lifecycle/executed-closure.js",
5734
+ "mode": "0000644",
5735
+ "sha256": "70be81206f577910d250e70ed0841466bbe329691324156b5b15bb75abcd93d3"
5736
+ },
5727
5737
  {
5728
5738
  "path": "modules/lifecycle/github-push.js",
5729
5739
  "mode": "0000644",
@@ -5847,7 +5857,7 @@
5847
5857
  {
5848
5858
  "path": "modules/lifecycle/publish-reconciler.js",
5849
5859
  "mode": "0000644",
5850
- "sha256": "28c61d55fe2b492f0fce4c99b60e88f0cbeb542c47c04482558818d65628e0d7"
5860
+ "sha256": "9f3e3ae52f9fa49a1f5638d92a4b985d0c23fe0433d917d017aa78876c41ca43"
5851
5861
  },
5852
5862
  {
5853
5863
  "path": "modules/lifecycle/rot.js",
@@ -7772,12 +7782,12 @@
7772
7782
  {
7773
7783
  "path": "package-lock.json",
7774
7784
  "mode": "0000644",
7775
- "sha256": "7235324939dc1acfb616300365334ebf96e054f83b8083b15cd2f99eeb5a6d71"
7785
+ "sha256": "f7fb304e4955f8024186863281f2540c2e92299e49b16f7f6ea0f78c6d46d22a"
7776
7786
  },
7777
7787
  {
7778
7788
  "path": "package.json",
7779
7789
  "mode": "0000644",
7780
- "sha256": "c650680172226a9259dbb3da9cfc459a3c94f3fa5578be520c27d2b71d0a71d9"
7790
+ "sha256": "be0e756de883b5e3291f721efe8515540771994df5d83f0eb96bd07f87ecf1e8"
7781
7791
  },
7782
7792
  {
7783
7793
  "path": "public-docs/index.html",
@@ -9542,7 +9552,7 @@
9542
9552
  {
9543
9553
  "path": "src/module-api.js",
9544
9554
  "mode": "0000644",
9545
- "sha256": "f6283921aa6c4af4de772e638a58ad28111bb8e6664a4bb67e15bc86ad1083f3"
9555
+ "sha256": "2fdd8c72769bba600991d5c886878c7390ef2086f67ad8c1036555e45631a971"
9546
9556
  },
9547
9557
  {
9548
9558
  "path": "src/module-loader/catalog.js",
@@ -9644,6 +9654,11 @@
9644
9654
  "mode": "0000644",
9645
9655
  "sha256": "bdc9d3678e12dee3f3252785ca82e06071421762c7146cbc1591d3fc2ec72180"
9646
9656
  },
9657
+ {
9658
+ "path": "tests/agents_routes.mjs",
9659
+ "mode": "0000644",
9660
+ "sha256": "4e07055707e77bffe2b60750273d16e92a6b213dbbc999e8ed7e0cc742915f7c"
9661
+ },
9647
9662
  {
9648
9663
  "path": "tests/agents_spawn.mjs",
9649
9664
  "mode": "0000644",
@@ -10549,6 +10564,11 @@
10549
10564
  "mode": "0000644",
10550
10565
  "sha256": "d6a78357533fdeea3bc33fe97cfcd27b1d04747c600d0a7800ddfca5199dbb1f"
10551
10566
  },
10567
+ {
10568
+ "path": "tests/executed_closure.mjs",
10569
+ "mode": "0000644",
10570
+ "sha256": "9f4b768e74b542e080f2f2d92db3e5d7a05a66e0fe8822528a40e1b9399f178c"
10571
+ },
10552
10572
  {
10553
10573
  "path": "tests/explore_visible_states.mjs",
10554
10574
  "mode": "0000644",
@@ -12212,7 +12232,7 @@
12212
12232
  {
12213
12233
  "path": "tests/publish_reconciler.mjs",
12214
12234
  "mode": "0000644",
12215
- "sha256": "4c7c58a1fd28427fbcace0d20a9446f88c2a90cc19eb5fd4826236207732be26"
12235
+ "sha256": "92806699b18a064233330d844d4a5bd85ae5ebc628231be81bcdc4548063f074"
12216
12236
  },
12217
12237
  {
12218
12238
  "path": "tests/push_path_brief.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
- - 363 operations across 55 resource groups
8
+ - 365 operations across 56 resource groups
9
9
 
10
10
  ## Use it from your project
11
11
 
@@ -100,6 +100,12 @@ function createClient(opts = {}) {
100
100
  // GET /achievements — rank: any-builder — GET /achievements
101
101
  getAchievements: (args) => request("GET", "/achievements", { hasBody: false }, args),
102
102
  },
103
+ "agents": {
104
+ // GET /agents — rank: any-builder — GET /agents
105
+ getAgents: (args) => request("GET", "/agents", { hasBody: false }, args),
106
+ // GET /agents/{name} — rank: any-builder — GET /agents/:name
107
+ getAgentsName: (args) => request("GET", "/agents/{name}", { hasBody: false }, args),
108
+ },
103
109
  "analytics": {
104
110
  // GET /analytics/builder/{id} — rank: any-builder — GET /analytics/builder/:id
105
111
  getAnalyticsBuilderId: (args) => request("GET", "/analytics/builder/{id}", { hasBody: false }, args),
@@ -99,6 +99,12 @@ function createClient(opts = {}) {
99
99
  // GET /achievements — rank: any-builder — GET /achievements
100
100
  getAchievements: (args) => request("GET", "/achievements", { hasBody: false }, args),
101
101
  },
102
+ "agents": {
103
+ // GET /agents — rank: any-builder — GET /agents
104
+ getAgents: (args) => request("GET", "/agents", { hasBody: false }, args),
105
+ // GET /agents/{name} — rank: any-builder — GET /agents/:name
106
+ getAgentsName: (args) => request("GET", "/agents/{name}", { hasBody: false }, args),
107
+ },
102
108
  "analytics": {
103
109
  // GET /analytics/builder/{id} — rank: any-builder — GET /analytics/builder/:id
104
110
  getAnalyticsBuilderId: (args) => request("GET", "/analytics/builder/{id}", { hasBody: false }, args),
@@ -19,6 +19,8 @@ export interface ErrorEnvelope { error: ApiErrorObject }
19
19
  export interface GetAccessRequestsResponse { requests: unknown }
20
20
  export interface GetAccessRequestsStatusResponse { github_login: unknown; status: unknown; admitted: unknown }
21
21
  export interface GetAchievementsResponse { achievements: unknown }
22
+ export interface GetAgentsNameResponse { ok: boolean; agent: unknown }
23
+ export interface GetAgentsResponse { ok: boolean; agents: unknown; counts: unknown; vocabulary: unknown }
22
24
  export interface GetAuditLogResponse { rows: unknown; page: unknown }
23
25
  export interface GetAuthAppPairInfoResponse { pair_code: unknown; device_name: unknown; platform: unknown; status: unknown }
24
26
  export interface GetAuthWebAdmissionStatusResponse { admitted: boolean }
@@ -434,6 +436,12 @@ export interface BongosClient {
434
436
  /** GET /achievements — rank: any-builder */
435
437
  getAchievements(args?: RequestArgs): Promise<GetAchievementsResponse>;
436
438
  };
439
+ "agents": {
440
+ /** GET /agents — rank: any-builder */
441
+ getAgents(args?: RequestArgs): Promise<GetAgentsResponse>;
442
+ /** GET /agents/{name} — rank: any-builder */
443
+ getAgentsName(args?: RequestArgs): Promise<GetAgentsNameResponse>;
444
+ };
437
445
  "analytics": {
438
446
  /** GET /analytics/builder/{id} — rank: any-builder */
439
447
  getAnalyticsBuilderId(args?: RequestArgs): Promise<ApiResponse>;
@@ -96,6 +96,12 @@ export function createClient(opts = {}) {
96
96
  // GET /achievements — rank: any-builder — GET /achievements
97
97
  getAchievements: (args) => request("GET", "/achievements", { hasBody: false }, args),
98
98
  },
99
+ "agents": {
100
+ // GET /agents — rank: any-builder — GET /agents
101
+ getAgents: (args) => request("GET", "/agents", { hasBody: false }, args),
102
+ // GET /agents/{name} — rank: any-builder — GET /agents/:name
103
+ getAgentsName: (args) => request("GET", "/agents/{name}", { hasBody: false }, args),
104
+ },
99
105
  "analytics": {
100
106
  // GET /analytics/builder/{id} — rank: any-builder — GET /analytics/builder/:id
101
107
  getAnalyticsBuilderId: (args) => request("GET", "/analytics/builder/{id}", { hasBody: false }, args),
@@ -29,6 +29,10 @@
29
29
  "name": "achievements",
30
30
  "description": "Endpoints under `/api/bongos/achievements`."
31
31
  },
32
+ {
33
+ "name": "agents",
34
+ "description": "Endpoints under `/api/bongos/agents`."
35
+ },
32
36
  {
33
37
  "name": "analytics",
34
38
  "description": "Endpoints under `/api/bongos/analytics`."
@@ -505,6 +509,96 @@
505
509
  ]
506
510
  }
507
511
  },
512
+ "/agents": {
513
+ "get": {
514
+ "operationId": "get_agents",
515
+ "tags": [
516
+ "agents"
517
+ ],
518
+ "summary": "GET /agents",
519
+ "description": "GET /agents — the whole registry. Unpaginated on purpose: agents are instance CONFIGURATION reconciled from committed files, so the row count is bounded by what a human wrote, not by traffic. If that ever stops being true, this is the line that needs a cursor — not a silent LIMIT, which would make the registry quietly incomplete.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
520
+ "x-rank": "any-builder",
521
+ "x-source": "modules/agents/routes/agents.js",
522
+ "responses": {
523
+ "200": {
524
+ "description": "Success.",
525
+ "content": {
526
+ "application/json": {
527
+ "schema": {
528
+ "$ref": "#/components/schemas/GetAgentsResponse"
529
+ }
530
+ }
531
+ }
532
+ },
533
+ "400": {
534
+ "$ref": "#/components/responses/BadRequest"
535
+ },
536
+ "401": {
537
+ "$ref": "#/components/responses/Unauthorized"
538
+ },
539
+ "403": {
540
+ "$ref": "#/components/responses/Forbidden"
541
+ }
542
+ },
543
+ "security": [
544
+ {
545
+ "builderSession": []
546
+ }
547
+ ]
548
+ }
549
+ },
550
+ "/agents/{name}": {
551
+ "get": {
552
+ "operationId": "get_agents_name",
553
+ "tags": [
554
+ "agents"
555
+ ],
556
+ "summary": "GET /agents/:name",
557
+ "description": "GET /agents/:name — one definition, persona included. The name is validated against the SAME regex the schema CHECKs, before it reaches the query. The query is parameterised regardless, so this is not the injection wall — it is the difference between a 404 and a 400 for a caller who sent something that could never have been a name.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
558
+ "x-rank": "any-builder",
559
+ "x-source": "modules/agents/routes/agents.js",
560
+ "parameters": [
561
+ {
562
+ "name": "name",
563
+ "in": "path",
564
+ "required": true,
565
+ "schema": {
566
+ "type": "string"
567
+ },
568
+ "description": "Path parameter `name`."
569
+ }
570
+ ],
571
+ "responses": {
572
+ "200": {
573
+ "description": "Success.",
574
+ "content": {
575
+ "application/json": {
576
+ "schema": {
577
+ "$ref": "#/components/schemas/GetAgentsNameResponse"
578
+ }
579
+ }
580
+ }
581
+ },
582
+ "400": {
583
+ "$ref": "#/components/responses/BadRequest"
584
+ },
585
+ "401": {
586
+ "$ref": "#/components/responses/Unauthorized"
587
+ },
588
+ "403": {
589
+ "$ref": "#/components/responses/Forbidden"
590
+ },
591
+ "404": {
592
+ "$ref": "#/components/responses/NotFound"
593
+ }
594
+ },
595
+ "security": [
596
+ {
597
+ "builderSession": []
598
+ }
599
+ ]
600
+ }
601
+ },
508
602
  "/analytics/builder/{id}": {
509
603
  "get": {
510
604
  "operationId": "get_analytics_builder_id",
@@ -16776,6 +16870,36 @@
16776
16870
  "achievements"
16777
16871
  ]
16778
16872
  },
16873
+ "GetAgentsNameResponse": {
16874
+ "type": "object",
16875
+ "properties": {
16876
+ "ok": {
16877
+ "type": "boolean"
16878
+ },
16879
+ "agent": {}
16880
+ },
16881
+ "required": [
16882
+ "ok",
16883
+ "agent"
16884
+ ]
16885
+ },
16886
+ "GetAgentsResponse": {
16887
+ "type": "object",
16888
+ "properties": {
16889
+ "ok": {
16890
+ "type": "boolean"
16891
+ },
16892
+ "agents": {},
16893
+ "counts": {},
16894
+ "vocabulary": {}
16895
+ },
16896
+ "required": [
16897
+ "ok",
16898
+ "agents",
16899
+ "counts",
16900
+ "vocabulary"
16901
+ ]
16902
+ },
16779
16903
  "GetAuditLogResponse": {
16780
16904
  "type": "object",
16781
16905
  "properties": {
@@ -22992,9 +23116,9 @@
22992
23116
  "description": "A required dependency/feature is not configured or is temporarily down."
22993
23117
  }
22994
23118
  },
22995
- "x-endpoint-count": 363,
22996
- "x-schema-count": 401,
23119
+ "x-endpoint-count": 365,
23120
+ "x-schema-count": 403,
22997
23121
  "x-undocumented-bodies": 9,
22998
- "x-response-schemas": 270,
23122
+ "x-response-schemas": 272,
22999
23123
  "x-generated-by": "scripts/gds/gen-api-docs.js"
23000
23124
  }
@@ -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. 363 endpoints across 58 route files.
5
+ > **Generated from the live route files** — the route file is authoritative. 365 endpoints across 59 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`.
@@ -23,6 +23,13 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
23
23
  |---|---|---|---|---|
24
24
  | GET | `/api/bongos/achievements` | `any-builder` | — | All seeded achievements — lets /builders render locked + unlocked side by side. |
25
25
 
26
+ ## `agents` (2)
27
+
28
+ | Method | Path | Rank | Body | Description |
29
+ |---|---|---|---|---|
30
+ | GET | `/api/bongos/agents` | `any-builder` | — | GET /agents — the whole registry. |
31
+ | GET | `/api/bongos/agents/:name` | `any-builder` | — | GET /agents/:name — one definition, persona included. |
32
+
26
33
  ## `analytics` (1)
27
34
 
28
35
  | Method | Path | Rank | Body | Description |
@@ -1857,5 +1857,9 @@ is load-bearing: the script throws rather than guess if it is missing, and
1857
1857
  landed since 1.19.697 with no explicit bump. run 34733917938. (task 1002620)
1858
1858
  1.19.699 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1859
1859
  landed since 1.19.698 with no explicit bump. run 34734848584. (task 1002620)
1860
+ 1.19.700 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1861
+ landed since 1.19.699 with no explicit bump. run 34735048203. (task 1002620)
1862
+ 1.19.701 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1863
+ landed since 1.19.700 with no explicit bump. run 34735311256. (task 1002620)
1860
1864
  ---------------------------------------------------------------------------
1861
1865
  ```
@@ -303,4 +303,10 @@ module.exports = {
303
303
  MODEL_TIERS,
304
304
  RANK_ORDER,
305
305
  SCOPE_RANK_FLOOR,
306
+ // Exported for the read routes (task 1002488), which reject an impossible
307
+ // :name with a 400 before it reaches the query. Shared rather than re-spelled:
308
+ // this pair already mirrors the agents_definitions_name_fmt_chk CHECK, and a
309
+ // second copy in the route layer is one more place for the three to drift.
310
+ NAME_RE,
311
+ NAME_MAX,
306
312
  };
@@ -5,7 +5,7 @@
5
5
  "coreVersion": "^1.19.0",
6
6
  "default": false,
7
7
  "maintenance": { "status": "core-maintained" },
8
- "contributes": { "migrations": true },
8
+ "contributes": { "routes": ["agents"], "migrations": true },
9
9
  "provides": [],
10
10
  "consumes": ["grade"]
11
11
  }