@bongos/core 1.19.810 → 1.19.812
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 +97 -37
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +24 -0
- package/clients/bongos-client/index.cjs +24 -0
- package/clients/bongos-client/index.d.ts +39 -0
- package/clients/bongos-client/index.mjs +24 -0
- package/docs/adr/0296-a-role-speciality-is-data-over-three-existing-surfaces.md +71 -0
- package/docs/adr/README.md +1 -0
- package/docs/api/openapi.json +867 -73
- package/docs/api-reference.md +19 -3
- package/docs/copy-inventory.md +48 -20
- package/docs/copy-registry.json +275 -23
- package/docs/module-api-changelog.md +4 -0
- package/modules/dev-box/app/src/vendor/bongos-client.cjs +24 -0
- package/modules/hall-ui/public/settings-specialities.js +241 -0
- package/modules/hall-ui/public/settings.css +56 -0
- package/modules/hall-ui/public/settings.html +65 -0
- package/modules/lifecycle/db-claim-reads.js +5 -1
- package/modules/memory/learnings.js +21 -2
- package/modules/provisioning/starter-bundles.js +1 -0
- package/modules/specialities/CLAUDE.md +15 -0
- package/modules/specialities/db.js +234 -0
- package/modules/specialities/migrations/specialities_001_specialities.sql +143 -0
- package/modules/specialities/module.json +12 -0
- package/modules/specialities/routes/specialities.js +379 -0
- package/modules/specialities/specialities.js +198 -0
- package/modules/ui-design/kit/serve.js +1 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/scripts/gds/publish-manifest.js +1 -0
- package/scripts/gds/search-ingest-db.js +37 -0
- package/src/bongos/routes/me.js +17 -0
- package/src/module-api.js +1 -1
- package/tests/cli_exit_no_abort.mjs +45 -0
- package/tests/module_loader.mjs +1 -1
- package/tests/own_scope_guard.mjs +10 -0
- package/tests/session_caps.mjs +16 -1
- package/tests/specialities.mjs +214 -0
- package/tests/speciality_corpus_scope.mjs +97 -0
- package/tests/speciality_db_shape.mjs +124 -0
- package/tests/speciality_injection.mjs +107 -0
package/docs/api/openapi.json
CHANGED
|
@@ -229,6 +229,10 @@
|
|
|
229
229
|
"name": "sessions",
|
|
230
230
|
"description": "Endpoints under `/api/bongos/sessions`."
|
|
231
231
|
},
|
|
232
|
+
{
|
|
233
|
+
"name": "specialities",
|
|
234
|
+
"description": "Endpoints under `/api/bongos/specialities`."
|
|
235
|
+
},
|
|
232
236
|
{
|
|
233
237
|
"name": "sso",
|
|
234
238
|
"description": "Endpoints under `/api/bongos/sso`."
|
|
@@ -10246,6 +10250,44 @@
|
|
|
10246
10250
|
]
|
|
10247
10251
|
}
|
|
10248
10252
|
},
|
|
10253
|
+
"/me/specialities": {
|
|
10254
|
+
"get": {
|
|
10255
|
+
"operationId": "get_me_specialities",
|
|
10256
|
+
"tags": [
|
|
10257
|
+
"me"
|
|
10258
|
+
],
|
|
10259
|
+
"summary": "GET /me/specialities",
|
|
10260
|
+
"description": "**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
10261
|
+
"x-rank": "any-builder",
|
|
10262
|
+
"x-source": "modules/specialities/routes/specialities.js",
|
|
10263
|
+
"responses": {
|
|
10264
|
+
"200": {
|
|
10265
|
+
"description": "Success.",
|
|
10266
|
+
"content": {
|
|
10267
|
+
"application/json": {
|
|
10268
|
+
"schema": {
|
|
10269
|
+
"$ref": "#/components/schemas/GetMeSpecialitiesResponse"
|
|
10270
|
+
}
|
|
10271
|
+
}
|
|
10272
|
+
}
|
|
10273
|
+
},
|
|
10274
|
+
"400": {
|
|
10275
|
+
"$ref": "#/components/responses/BadRequest"
|
|
10276
|
+
},
|
|
10277
|
+
"401": {
|
|
10278
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
10279
|
+
},
|
|
10280
|
+
"403": {
|
|
10281
|
+
"$ref": "#/components/responses/Forbidden"
|
|
10282
|
+
}
|
|
10283
|
+
},
|
|
10284
|
+
"security": [
|
|
10285
|
+
{
|
|
10286
|
+
"builderSession": []
|
|
10287
|
+
}
|
|
10288
|
+
]
|
|
10289
|
+
}
|
|
10290
|
+
},
|
|
10249
10291
|
"/me/wandering": {
|
|
10250
10292
|
"get": {
|
|
10251
10293
|
"operationId": "get_me_wandering",
|
|
@@ -12032,6 +12074,69 @@
|
|
|
12032
12074
|
]
|
|
12033
12075
|
}
|
|
12034
12076
|
},
|
|
12077
|
+
"/projects/{projectId}/specialities": {
|
|
12078
|
+
"post": {
|
|
12079
|
+
"operationId": "post_projects_projectId_specialities",
|
|
12080
|
+
"tags": [
|
|
12081
|
+
"projects"
|
|
12082
|
+
],
|
|
12083
|
+
"summary": "POST /projects/:projectId/specialities",
|
|
12084
|
+
"description": "POST /projects/:projectId/specialities — author one OWNED BY A PROJECT. The target is in the PATH, not the body, which is what makes it auditable: the gate below is membership of that same project, checked server-side.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
12085
|
+
"x-rank": "any-builder",
|
|
12086
|
+
"x-source": "modules/specialities/routes/specialities.js",
|
|
12087
|
+
"parameters": [
|
|
12088
|
+
{
|
|
12089
|
+
"name": "projectId",
|
|
12090
|
+
"in": "path",
|
|
12091
|
+
"required": true,
|
|
12092
|
+
"schema": {
|
|
12093
|
+
"type": "string"
|
|
12094
|
+
},
|
|
12095
|
+
"description": "Path parameter `projectId`."
|
|
12096
|
+
}
|
|
12097
|
+
],
|
|
12098
|
+
"requestBody": {
|
|
12099
|
+
"required": true,
|
|
12100
|
+
"content": {
|
|
12101
|
+
"application/json": {
|
|
12102
|
+
"schema": {
|
|
12103
|
+
"$ref": "#/components/schemas/PostProjectsProjectIdSpecialitiesRequest"
|
|
12104
|
+
}
|
|
12105
|
+
}
|
|
12106
|
+
},
|
|
12107
|
+
"x-validated": true
|
|
12108
|
+
},
|
|
12109
|
+
"responses": {
|
|
12110
|
+
"200": {
|
|
12111
|
+
"description": "Success.",
|
|
12112
|
+
"content": {
|
|
12113
|
+
"application/json": {
|
|
12114
|
+
"schema": {
|
|
12115
|
+
"$ref": "#/components/schemas/PostProjectsProjectIdSpecialitiesResponse"
|
|
12116
|
+
}
|
|
12117
|
+
}
|
|
12118
|
+
}
|
|
12119
|
+
},
|
|
12120
|
+
"400": {
|
|
12121
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
12122
|
+
},
|
|
12123
|
+
"401": {
|
|
12124
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
12125
|
+
},
|
|
12126
|
+
"403": {
|
|
12127
|
+
"$ref": "#/components/responses/Forbidden"
|
|
12128
|
+
},
|
|
12129
|
+
"404": {
|
|
12130
|
+
"$ref": "#/components/responses/NotFound"
|
|
12131
|
+
}
|
|
12132
|
+
},
|
|
12133
|
+
"security": [
|
|
12134
|
+
{
|
|
12135
|
+
"builderSession": []
|
|
12136
|
+
}
|
|
12137
|
+
]
|
|
12138
|
+
}
|
|
12139
|
+
},
|
|
12035
12140
|
"/provisioning/control-plane": {
|
|
12036
12141
|
"get": {
|
|
12037
12142
|
"operationId": "get_provisioning_control_plane",
|
|
@@ -14711,61 +14816,58 @@
|
|
|
14711
14816
|
]
|
|
14712
14817
|
}
|
|
14713
14818
|
},
|
|
14714
|
-
"/
|
|
14715
|
-
"
|
|
14716
|
-
"operationId": "
|
|
14819
|
+
"/specialities": {
|
|
14820
|
+
"get": {
|
|
14821
|
+
"operationId": "get_specialities",
|
|
14717
14822
|
"tags": [
|
|
14718
|
-
"
|
|
14823
|
+
"specialities"
|
|
14719
14824
|
],
|
|
14720
|
-
"summary": "
|
|
14721
|
-
"description": "
|
|
14722
|
-
"x-rank": "
|
|
14723
|
-
"x-source": "modules/
|
|
14724
|
-
"requestBody": {
|
|
14725
|
-
"required": true,
|
|
14726
|
-
"content": {
|
|
14727
|
-
"application/json": {
|
|
14728
|
-
"schema": {
|
|
14729
|
-
"$ref": "#/components/schemas/PostSsoActivityRollupRequest"
|
|
14730
|
-
}
|
|
14731
|
-
}
|
|
14732
|
-
},
|
|
14733
|
-
"x-validated": true
|
|
14734
|
-
},
|
|
14825
|
+
"summary": "GET /specialities",
|
|
14826
|
+
"description": "GET /specialities — the catalogue this builder may see. `?discipline=` narrows it to one craft, which is what the settings surface asks for.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
14827
|
+
"x-rank": "any-builder",
|
|
14828
|
+
"x-source": "modules/specialities/routes/specialities.js",
|
|
14735
14829
|
"responses": {
|
|
14736
14830
|
"200": {
|
|
14737
14831
|
"description": "Success.",
|
|
14738
14832
|
"content": {
|
|
14739
14833
|
"application/json": {
|
|
14740
14834
|
"schema": {
|
|
14741
|
-
"$ref": "#/components/schemas/
|
|
14835
|
+
"$ref": "#/components/schemas/GetSpecialitiesResponse"
|
|
14742
14836
|
}
|
|
14743
14837
|
}
|
|
14744
14838
|
}
|
|
14745
14839
|
},
|
|
14746
14840
|
"400": {
|
|
14747
|
-
"$ref": "#/components/responses/
|
|
14841
|
+
"$ref": "#/components/responses/BadRequest"
|
|
14842
|
+
},
|
|
14843
|
+
"401": {
|
|
14844
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
14845
|
+
},
|
|
14846
|
+
"403": {
|
|
14847
|
+
"$ref": "#/components/responses/Forbidden"
|
|
14748
14848
|
}
|
|
14749
14849
|
},
|
|
14750
|
-
"security": [
|
|
14751
|
-
|
|
14752
|
-
|
|
14753
|
-
|
|
14850
|
+
"security": [
|
|
14851
|
+
{
|
|
14852
|
+
"builderSession": []
|
|
14853
|
+
}
|
|
14854
|
+
]
|
|
14855
|
+
},
|
|
14754
14856
|
"post": {
|
|
14755
|
-
"operationId": "
|
|
14857
|
+
"operationId": "post_specialities",
|
|
14756
14858
|
"tags": [
|
|
14757
|
-
"
|
|
14859
|
+
"specialities"
|
|
14758
14860
|
],
|
|
14759
|
-
"summary": "POST /
|
|
14760
|
-
"description": "POST /
|
|
14761
|
-
"x-rank": "
|
|
14762
|
-
"x-source": "modules/
|
|
14861
|
+
"summary": "POST /specialities",
|
|
14862
|
+
"description": "POST /specialities — author one for YOURSELF. The owner is req.builder and is never read from the body: a route whose path names no subject must act on the caller (tests/own_scope_guard.mjs). A PROJECT speciality names its project in the path instead — see POST /projects/:projectId/specialities below.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
14863
|
+
"x-rank": "any-builder",
|
|
14864
|
+
"x-source": "modules/specialities/routes/specialities.js",
|
|
14763
14865
|
"requestBody": {
|
|
14764
14866
|
"required": true,
|
|
14765
14867
|
"content": {
|
|
14766
14868
|
"application/json": {
|
|
14767
14869
|
"schema": {
|
|
14768
|
-
"$ref": "#/components/schemas/
|
|
14870
|
+
"$ref": "#/components/schemas/PostSpecialitiesRequest"
|
|
14769
14871
|
}
|
|
14770
14872
|
}
|
|
14771
14873
|
},
|
|
@@ -14777,55 +14879,105 @@
|
|
|
14777
14879
|
"content": {
|
|
14778
14880
|
"application/json": {
|
|
14779
14881
|
"schema": {
|
|
14780
|
-
"$ref": "#/components/schemas/
|
|
14882
|
+
"$ref": "#/components/schemas/PostSpecialitiesResponse"
|
|
14781
14883
|
}
|
|
14782
14884
|
}
|
|
14783
14885
|
}
|
|
14784
14886
|
},
|
|
14785
14887
|
"400": {
|
|
14786
14888
|
"$ref": "#/components/responses/ValidationFailed"
|
|
14889
|
+
},
|
|
14890
|
+
"401": {
|
|
14891
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
14892
|
+
},
|
|
14893
|
+
"403": {
|
|
14894
|
+
"$ref": "#/components/responses/Forbidden"
|
|
14787
14895
|
}
|
|
14788
14896
|
},
|
|
14789
|
-
"security": [
|
|
14897
|
+
"security": [
|
|
14898
|
+
{
|
|
14899
|
+
"builderSession": []
|
|
14900
|
+
}
|
|
14901
|
+
]
|
|
14790
14902
|
}
|
|
14791
14903
|
},
|
|
14792
|
-
"/
|
|
14904
|
+
"/specialities/{id}": {
|
|
14793
14905
|
"get": {
|
|
14794
|
-
"operationId": "
|
|
14906
|
+
"operationId": "get_specialities_id",
|
|
14795
14907
|
"tags": [
|
|
14796
|
-
"
|
|
14908
|
+
"specialities"
|
|
14909
|
+
],
|
|
14910
|
+
"summary": "GET /specialities/:id",
|
|
14911
|
+
"description": "**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
14912
|
+
"x-rank": "any-builder",
|
|
14913
|
+
"x-source": "modules/specialities/routes/specialities.js",
|
|
14914
|
+
"parameters": [
|
|
14915
|
+
{
|
|
14916
|
+
"name": "id",
|
|
14917
|
+
"in": "path",
|
|
14918
|
+
"required": true,
|
|
14919
|
+
"schema": {
|
|
14920
|
+
"type": "string"
|
|
14921
|
+
},
|
|
14922
|
+
"description": "Path parameter `id`."
|
|
14923
|
+
}
|
|
14797
14924
|
],
|
|
14798
|
-
"summary": "GET /sso/authorize",
|
|
14799
|
-
"description": "GET /sso/authorize?client_id=&redirect_uri=&state= — the browser authorize leg. rank: public — this is an authentication entry point, not an authorization surface. It is gated on a LIVE HUB SESSION (resolved inline via resolveSession; a missing session 302s to the hub's own web sign-in and returns here), NOT on a builder RANK. It mints identity-only codes.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
14800
|
-
"x-rank": "public",
|
|
14801
|
-
"x-source": "modules/platform-identity/routes/sso.js",
|
|
14802
14925
|
"responses": {
|
|
14803
14926
|
"200": {
|
|
14804
|
-
"description": "Success."
|
|
14927
|
+
"description": "Success.",
|
|
14928
|
+
"content": {
|
|
14929
|
+
"application/json": {
|
|
14930
|
+
"schema": {
|
|
14931
|
+
"$ref": "#/components/schemas/GetSpecialitiesIdResponse"
|
|
14932
|
+
}
|
|
14933
|
+
}
|
|
14934
|
+
}
|
|
14805
14935
|
},
|
|
14806
14936
|
"400": {
|
|
14807
14937
|
"$ref": "#/components/responses/BadRequest"
|
|
14938
|
+
},
|
|
14939
|
+
"401": {
|
|
14940
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
14941
|
+
},
|
|
14942
|
+
"403": {
|
|
14943
|
+
"$ref": "#/components/responses/Forbidden"
|
|
14944
|
+
},
|
|
14945
|
+
"404": {
|
|
14946
|
+
"$ref": "#/components/responses/NotFound"
|
|
14808
14947
|
}
|
|
14809
14948
|
},
|
|
14810
|
-
"security": [
|
|
14811
|
-
|
|
14812
|
-
|
|
14813
|
-
|
|
14814
|
-
|
|
14815
|
-
|
|
14949
|
+
"security": [
|
|
14950
|
+
{
|
|
14951
|
+
"builderSession": []
|
|
14952
|
+
}
|
|
14953
|
+
]
|
|
14954
|
+
},
|
|
14955
|
+
"patch": {
|
|
14956
|
+
"operationId": "patch_specialities_id",
|
|
14816
14957
|
"tags": [
|
|
14817
|
-
"
|
|
14958
|
+
"specialities"
|
|
14959
|
+
],
|
|
14960
|
+
"summary": "PATCH /specialities/:id",
|
|
14961
|
+
"description": "PATCH — owner only. `discipline` is absent from db.UPDATABLE on purpose: see the note there, and the adoption rows that carry a denormalised copy.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
14962
|
+
"x-rank": "any-builder",
|
|
14963
|
+
"x-source": "modules/specialities/routes/specialities.js",
|
|
14964
|
+
"parameters": [
|
|
14965
|
+
{
|
|
14966
|
+
"name": "id",
|
|
14967
|
+
"in": "path",
|
|
14968
|
+
"required": true,
|
|
14969
|
+
"schema": {
|
|
14970
|
+
"type": "string"
|
|
14971
|
+
},
|
|
14972
|
+
"description": "Path parameter `id`."
|
|
14973
|
+
}
|
|
14818
14974
|
],
|
|
14819
|
-
"summary": "POST /sso/device/poll",
|
|
14820
|
-
"description": "POST /sso/device/poll — poll the hub device flow. On GitHub approval, upsert the platform account and mint an audience-scoped EdDSA assertion for the client that was BOUND at start (from the origin) — the poll takes NO client_id, so the CLI cannot influence the audience. Returns the SAME poll states as the core device flow, plus { state:'ok', assertion } on success. rank: public — the device_code (GitHub's) is the bearer; the assertion carries identity ONLY and is useless to anyone but the origin-bound client (aud-scoped).\n\n**Rank:** `public` — No authentication — any caller.",
|
|
14821
|
-
"x-rank": "public",
|
|
14822
|
-
"x-source": "modules/platform-identity/routes/sso.js",
|
|
14823
14975
|
"requestBody": {
|
|
14824
|
-
"required":
|
|
14976
|
+
"required": false,
|
|
14825
14977
|
"content": {
|
|
14826
14978
|
"application/json": {
|
|
14827
14979
|
"schema": {
|
|
14828
|
-
"$ref": "#/components/schemas/
|
|
14980
|
+
"$ref": "#/components/schemas/PatchSpecialitiesIdRequest"
|
|
14829
14981
|
}
|
|
14830
14982
|
}
|
|
14831
14983
|
},
|
|
@@ -14833,31 +14985,460 @@
|
|
|
14833
14985
|
},
|
|
14834
14986
|
"responses": {
|
|
14835
14987
|
"200": {
|
|
14836
|
-
"description": "Success."
|
|
14988
|
+
"description": "Success.",
|
|
14989
|
+
"content": {
|
|
14990
|
+
"application/json": {
|
|
14991
|
+
"schema": {
|
|
14992
|
+
"$ref": "#/components/schemas/PatchSpecialitiesIdResponse"
|
|
14993
|
+
}
|
|
14994
|
+
}
|
|
14995
|
+
}
|
|
14837
14996
|
},
|
|
14838
14997
|
"400": {
|
|
14839
14998
|
"$ref": "#/components/responses/ValidationFailed"
|
|
14999
|
+
},
|
|
15000
|
+
"401": {
|
|
15001
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
15002
|
+
},
|
|
15003
|
+
"403": {
|
|
15004
|
+
"$ref": "#/components/responses/Forbidden"
|
|
15005
|
+
},
|
|
15006
|
+
"404": {
|
|
15007
|
+
"$ref": "#/components/responses/NotFound"
|
|
14840
15008
|
}
|
|
14841
15009
|
},
|
|
14842
|
-
"security": [
|
|
15010
|
+
"security": [
|
|
15011
|
+
{
|
|
15012
|
+
"builderSession": []
|
|
15013
|
+
}
|
|
15014
|
+
]
|
|
14843
15015
|
}
|
|
14844
15016
|
},
|
|
14845
|
-
"/
|
|
15017
|
+
"/specialities/{id}/abandon": {
|
|
14846
15018
|
"post": {
|
|
14847
|
-
"operationId": "
|
|
15019
|
+
"operationId": "post_specialities_id_abandon",
|
|
14848
15020
|
"tags": [
|
|
14849
|
-
"
|
|
15021
|
+
"specialities"
|
|
14850
15022
|
],
|
|
14851
|
-
"summary": "POST /
|
|
14852
|
-
"description": "
|
|
14853
|
-
"x-rank": "
|
|
14854
|
-
"x-source": "modules/
|
|
14855
|
-
"
|
|
14856
|
-
|
|
14857
|
-
|
|
14858
|
-
"
|
|
14859
|
-
|
|
14860
|
-
|
|
15023
|
+
"summary": "POST /specialities/:id/abandon",
|
|
15024
|
+
"description": "**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
15025
|
+
"x-rank": "any-builder",
|
|
15026
|
+
"x-source": "modules/specialities/routes/specialities.js",
|
|
15027
|
+
"parameters": [
|
|
15028
|
+
{
|
|
15029
|
+
"name": "id",
|
|
15030
|
+
"in": "path",
|
|
15031
|
+
"required": true,
|
|
15032
|
+
"schema": {
|
|
15033
|
+
"type": "string"
|
|
15034
|
+
},
|
|
15035
|
+
"description": "Path parameter `id`."
|
|
15036
|
+
}
|
|
15037
|
+
],
|
|
15038
|
+
"responses": {
|
|
15039
|
+
"200": {
|
|
15040
|
+
"description": "Success.",
|
|
15041
|
+
"content": {
|
|
15042
|
+
"application/json": {
|
|
15043
|
+
"schema": {
|
|
15044
|
+
"$ref": "#/components/schemas/PostSpecialitiesIdAbandonResponse"
|
|
15045
|
+
}
|
|
15046
|
+
}
|
|
15047
|
+
}
|
|
15048
|
+
},
|
|
15049
|
+
"400": {
|
|
15050
|
+
"$ref": "#/components/responses/BadRequest"
|
|
15051
|
+
},
|
|
15052
|
+
"401": {
|
|
15053
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
15054
|
+
},
|
|
15055
|
+
"403": {
|
|
15056
|
+
"$ref": "#/components/responses/Forbidden"
|
|
15057
|
+
},
|
|
15058
|
+
"404": {
|
|
15059
|
+
"$ref": "#/components/responses/NotFound"
|
|
15060
|
+
}
|
|
15061
|
+
},
|
|
15062
|
+
"security": [
|
|
15063
|
+
{
|
|
15064
|
+
"builderSession": []
|
|
15065
|
+
}
|
|
15066
|
+
]
|
|
15067
|
+
}
|
|
15068
|
+
},
|
|
15069
|
+
"/specialities/{id}/adopt": {
|
|
15070
|
+
"post": {
|
|
15071
|
+
"operationId": "post_specialities_id_adopt",
|
|
15072
|
+
"tags": [
|
|
15073
|
+
"specialities"
|
|
15074
|
+
],
|
|
15075
|
+
"summary": "POST /specialities/:id/adopt",
|
|
15076
|
+
"description": "── adoption ──────────────────────────────────────────────────────────────\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
15077
|
+
"x-rank": "any-builder",
|
|
15078
|
+
"x-source": "modules/specialities/routes/specialities.js",
|
|
15079
|
+
"parameters": [
|
|
15080
|
+
{
|
|
15081
|
+
"name": "id",
|
|
15082
|
+
"in": "path",
|
|
15083
|
+
"required": true,
|
|
15084
|
+
"schema": {
|
|
15085
|
+
"type": "string"
|
|
15086
|
+
},
|
|
15087
|
+
"description": "Path parameter `id`."
|
|
15088
|
+
}
|
|
15089
|
+
],
|
|
15090
|
+
"responses": {
|
|
15091
|
+
"200": {
|
|
15092
|
+
"description": "Success.",
|
|
15093
|
+
"content": {
|
|
15094
|
+
"application/json": {
|
|
15095
|
+
"schema": {
|
|
15096
|
+
"$ref": "#/components/schemas/PostSpecialitiesIdAdoptResponse"
|
|
15097
|
+
}
|
|
15098
|
+
}
|
|
15099
|
+
}
|
|
15100
|
+
},
|
|
15101
|
+
"400": {
|
|
15102
|
+
"$ref": "#/components/responses/BadRequest"
|
|
15103
|
+
},
|
|
15104
|
+
"401": {
|
|
15105
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
15106
|
+
},
|
|
15107
|
+
"403": {
|
|
15108
|
+
"$ref": "#/components/responses/Forbidden"
|
|
15109
|
+
},
|
|
15110
|
+
"404": {
|
|
15111
|
+
"$ref": "#/components/responses/NotFound"
|
|
15112
|
+
}
|
|
15113
|
+
},
|
|
15114
|
+
"security": [
|
|
15115
|
+
{
|
|
15116
|
+
"builderSession": []
|
|
15117
|
+
}
|
|
15118
|
+
]
|
|
15119
|
+
}
|
|
15120
|
+
},
|
|
15121
|
+
"/specialities/{id}/documents": {
|
|
15122
|
+
"get": {
|
|
15123
|
+
"operationId": "get_specialities_id_documents",
|
|
15124
|
+
"tags": [
|
|
15125
|
+
"specialities"
|
|
15126
|
+
],
|
|
15127
|
+
"summary": "GET /specialities/:id/documents",
|
|
15128
|
+
"description": "**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
15129
|
+
"x-rank": "any-builder",
|
|
15130
|
+
"x-source": "modules/specialities/routes/specialities.js",
|
|
15131
|
+
"parameters": [
|
|
15132
|
+
{
|
|
15133
|
+
"name": "id",
|
|
15134
|
+
"in": "path",
|
|
15135
|
+
"required": true,
|
|
15136
|
+
"schema": {
|
|
15137
|
+
"type": "string"
|
|
15138
|
+
},
|
|
15139
|
+
"description": "Path parameter `id`."
|
|
15140
|
+
}
|
|
15141
|
+
],
|
|
15142
|
+
"responses": {
|
|
15143
|
+
"200": {
|
|
15144
|
+
"description": "Success.",
|
|
15145
|
+
"content": {
|
|
15146
|
+
"application/json": {
|
|
15147
|
+
"schema": {
|
|
15148
|
+
"$ref": "#/components/schemas/GetSpecialitiesIdDocumentsResponse"
|
|
15149
|
+
}
|
|
15150
|
+
}
|
|
15151
|
+
}
|
|
15152
|
+
},
|
|
15153
|
+
"400": {
|
|
15154
|
+
"$ref": "#/components/responses/BadRequest"
|
|
15155
|
+
},
|
|
15156
|
+
"401": {
|
|
15157
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
15158
|
+
},
|
|
15159
|
+
"403": {
|
|
15160
|
+
"$ref": "#/components/responses/Forbidden"
|
|
15161
|
+
},
|
|
15162
|
+
"404": {
|
|
15163
|
+
"$ref": "#/components/responses/NotFound"
|
|
15164
|
+
}
|
|
15165
|
+
},
|
|
15166
|
+
"security": [
|
|
15167
|
+
{
|
|
15168
|
+
"builderSession": []
|
|
15169
|
+
}
|
|
15170
|
+
]
|
|
15171
|
+
},
|
|
15172
|
+
"post": {
|
|
15173
|
+
"operationId": "post_specialities_id_documents",
|
|
15174
|
+
"tags": [
|
|
15175
|
+
"specialities"
|
|
15176
|
+
],
|
|
15177
|
+
"summary": "POST /specialities/:id/documents",
|
|
15178
|
+
"description": "── training (a): the owner's own documents ───────────────────────────────\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
15179
|
+
"x-rank": "any-builder",
|
|
15180
|
+
"x-source": "modules/specialities/routes/specialities.js",
|
|
15181
|
+
"parameters": [
|
|
15182
|
+
{
|
|
15183
|
+
"name": "id",
|
|
15184
|
+
"in": "path",
|
|
15185
|
+
"required": true,
|
|
15186
|
+
"schema": {
|
|
15187
|
+
"type": "string"
|
|
15188
|
+
},
|
|
15189
|
+
"description": "Path parameter `id`."
|
|
15190
|
+
}
|
|
15191
|
+
],
|
|
15192
|
+
"requestBody": {
|
|
15193
|
+
"required": true,
|
|
15194
|
+
"content": {
|
|
15195
|
+
"application/json": {
|
|
15196
|
+
"schema": {
|
|
15197
|
+
"$ref": "#/components/schemas/PostSpecialitiesIdDocumentsRequest"
|
|
15198
|
+
}
|
|
15199
|
+
}
|
|
15200
|
+
},
|
|
15201
|
+
"x-validated": true
|
|
15202
|
+
},
|
|
15203
|
+
"responses": {
|
|
15204
|
+
"200": {
|
|
15205
|
+
"description": "Success.",
|
|
15206
|
+
"content": {
|
|
15207
|
+
"application/json": {
|
|
15208
|
+
"schema": {
|
|
15209
|
+
"$ref": "#/components/schemas/PostSpecialitiesIdDocumentsResponse"
|
|
15210
|
+
}
|
|
15211
|
+
}
|
|
15212
|
+
}
|
|
15213
|
+
},
|
|
15214
|
+
"400": {
|
|
15215
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
15216
|
+
},
|
|
15217
|
+
"401": {
|
|
15218
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
15219
|
+
},
|
|
15220
|
+
"403": {
|
|
15221
|
+
"$ref": "#/components/responses/Forbidden"
|
|
15222
|
+
},
|
|
15223
|
+
"404": {
|
|
15224
|
+
"$ref": "#/components/responses/NotFound"
|
|
15225
|
+
}
|
|
15226
|
+
},
|
|
15227
|
+
"security": [
|
|
15228
|
+
{
|
|
15229
|
+
"builderSession": []
|
|
15230
|
+
}
|
|
15231
|
+
]
|
|
15232
|
+
}
|
|
15233
|
+
},
|
|
15234
|
+
"/specialities/{id}/documents/{docId}": {
|
|
15235
|
+
"delete": {
|
|
15236
|
+
"operationId": "delete_specialities_id_documents_docId",
|
|
15237
|
+
"tags": [
|
|
15238
|
+
"specialities"
|
|
15239
|
+
],
|
|
15240
|
+
"summary": "DELETE /specialities/:id/documents/:docId",
|
|
15241
|
+
"description": "**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
15242
|
+
"x-rank": "any-builder",
|
|
15243
|
+
"x-source": "modules/specialities/routes/specialities.js",
|
|
15244
|
+
"parameters": [
|
|
15245
|
+
{
|
|
15246
|
+
"name": "id",
|
|
15247
|
+
"in": "path",
|
|
15248
|
+
"required": true,
|
|
15249
|
+
"schema": {
|
|
15250
|
+
"type": "string"
|
|
15251
|
+
},
|
|
15252
|
+
"description": "Path parameter `id`."
|
|
15253
|
+
},
|
|
15254
|
+
{
|
|
15255
|
+
"name": "docId",
|
|
15256
|
+
"in": "path",
|
|
15257
|
+
"required": true,
|
|
15258
|
+
"schema": {
|
|
15259
|
+
"type": "string"
|
|
15260
|
+
},
|
|
15261
|
+
"description": "Path parameter `docId`."
|
|
15262
|
+
}
|
|
15263
|
+
],
|
|
15264
|
+
"responses": {
|
|
15265
|
+
"200": {
|
|
15266
|
+
"description": "Success.",
|
|
15267
|
+
"content": {
|
|
15268
|
+
"application/json": {
|
|
15269
|
+
"schema": {
|
|
15270
|
+
"$ref": "#/components/schemas/DeleteSpecialitiesIdDocumentsDocIdResponse"
|
|
15271
|
+
}
|
|
15272
|
+
}
|
|
15273
|
+
}
|
|
15274
|
+
},
|
|
15275
|
+
"400": {
|
|
15276
|
+
"$ref": "#/components/responses/BadRequest"
|
|
15277
|
+
},
|
|
15278
|
+
"401": {
|
|
15279
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
15280
|
+
},
|
|
15281
|
+
"403": {
|
|
15282
|
+
"$ref": "#/components/responses/Forbidden"
|
|
15283
|
+
},
|
|
15284
|
+
"404": {
|
|
15285
|
+
"$ref": "#/components/responses/NotFound"
|
|
15286
|
+
}
|
|
15287
|
+
},
|
|
15288
|
+
"security": [
|
|
15289
|
+
{
|
|
15290
|
+
"builderSession": []
|
|
15291
|
+
}
|
|
15292
|
+
]
|
|
15293
|
+
}
|
|
15294
|
+
},
|
|
15295
|
+
"/sso/activity/rollup": {
|
|
15296
|
+
"post": {
|
|
15297
|
+
"operationId": "post_sso_activity_rollup",
|
|
15298
|
+
"tags": [
|
|
15299
|
+
"sso"
|
|
15300
|
+
],
|
|
15301
|
+
"summary": "POST /sso/activity/rollup",
|
|
15302
|
+
"description": "POST /sso/activity/rollup — a federated instance reports a builder's activity snapshot (ADR 0141 §4). Server-to-server, client_id+client_secret auth. Keyed to the AUTHENTICATED client_id. Descriptive analytics for the Archon-only scouting view — never authority. rank: public — authenticated by client_id + client_secret, not a builder rank.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
15303
|
+
"x-rank": "public",
|
|
15304
|
+
"x-source": "modules/platform-identity/routes/sso.js",
|
|
15305
|
+
"requestBody": {
|
|
15306
|
+
"required": true,
|
|
15307
|
+
"content": {
|
|
15308
|
+
"application/json": {
|
|
15309
|
+
"schema": {
|
|
15310
|
+
"$ref": "#/components/schemas/PostSsoActivityRollupRequest"
|
|
15311
|
+
}
|
|
15312
|
+
}
|
|
15313
|
+
},
|
|
15314
|
+
"x-validated": true
|
|
15315
|
+
},
|
|
15316
|
+
"responses": {
|
|
15317
|
+
"200": {
|
|
15318
|
+
"description": "Success.",
|
|
15319
|
+
"content": {
|
|
15320
|
+
"application/json": {
|
|
15321
|
+
"schema": {
|
|
15322
|
+
"$ref": "#/components/schemas/PostSsoActivityRollupResponse"
|
|
15323
|
+
}
|
|
15324
|
+
}
|
|
15325
|
+
}
|
|
15326
|
+
},
|
|
15327
|
+
"400": {
|
|
15328
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
15329
|
+
}
|
|
15330
|
+
},
|
|
15331
|
+
"security": []
|
|
15332
|
+
}
|
|
15333
|
+
},
|
|
15334
|
+
"/sso/applicant-profile": {
|
|
15335
|
+
"post": {
|
|
15336
|
+
"operationId": "post_sso_applicant_profile",
|
|
15337
|
+
"tags": [
|
|
15338
|
+
"sso"
|
|
15339
|
+
],
|
|
15340
|
+
"summary": "POST /sso/applicant-profile",
|
|
15341
|
+
"description": "POST /sso/applicant-profile — a federated instance resolves ONE applicant's profile view for its own reviewer queue, LIVE at render (privacy spec D7, task 1002972). Server-to-server, client_id+client_secret auth, like the two routes above. Answers { profile: null | { view:'public', … } | { view: 'sliver', … } } — the D7 rule, decided entirely inside ../applicant-profile.js. WHY A POST FOR A READ. The same reason /sso/activity/rollup is one: the credentials are in the body, and a client_secret in a query string lands in access logs and proxy history. Nothing is written. THE ECHO IS THE GATE, AND IT IS THE WHOLE SECURITY ARGUMENT (ADR 0205, security report 1000027). Client credentials prove WHICH PROJECT is calling and nothing about WHO the github_id is, so authenticating the caller is not enough: without a per-subject witness this route is a bulk disclosure oracle over every account on the platform, private ones included, readable by any registered project holding only its own secret. applicationBacksProfileRead demands a HUB-WRITTEN echo for exactly (this account, this client) inside the 30-day window — a row only the hub's own join relay creates, and only after the project accepted the relayed application. A project may therefore read the profile of someone who applied TO IT, and of nobody else. 404, never 403, when the echo is absent — the /scouting/:handle posture. A 403 would confirm that the github_id names a real account, which is the disclosure the whole rule exists to withhold. An account that exists but discloses nothing (provisional, terms never accepted) answers the SAME { profile: null } as one that consented but is simply not readable, so the caller cannot tell those apart either (ADR 0171 D4). NOT AUTHORITY (ADR 0016). The answer is descriptive; the project's own admission gate reads status='invited' and never this. rank: public — authenticated by client_id + client_secret, not a builder rank. The limiter runs BEFORE the client lookup, so a refused probe costs no DB work — the accountExistenceReadRateLimit posture.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
15342
|
+
"x-rank": "public",
|
|
15343
|
+
"x-source": "modules/platform-identity/routes/sso.js",
|
|
15344
|
+
"requestBody": {
|
|
15345
|
+
"required": true,
|
|
15346
|
+
"content": {
|
|
15347
|
+
"application/json": {
|
|
15348
|
+
"schema": {
|
|
15349
|
+
"$ref": "#/components/schemas/PostSsoApplicantProfileRequest"
|
|
15350
|
+
}
|
|
15351
|
+
}
|
|
15352
|
+
},
|
|
15353
|
+
"x-validated": true
|
|
15354
|
+
},
|
|
15355
|
+
"responses": {
|
|
15356
|
+
"200": {
|
|
15357
|
+
"description": "Success.",
|
|
15358
|
+
"content": {
|
|
15359
|
+
"application/json": {
|
|
15360
|
+
"schema": {
|
|
15361
|
+
"$ref": "#/components/schemas/PostSsoApplicantProfileResponse"
|
|
15362
|
+
}
|
|
15363
|
+
}
|
|
15364
|
+
}
|
|
15365
|
+
},
|
|
15366
|
+
"400": {
|
|
15367
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
15368
|
+
}
|
|
15369
|
+
},
|
|
15370
|
+
"security": []
|
|
15371
|
+
}
|
|
15372
|
+
},
|
|
15373
|
+
"/sso/authorize": {
|
|
15374
|
+
"get": {
|
|
15375
|
+
"operationId": "get_sso_authorize",
|
|
15376
|
+
"tags": [
|
|
15377
|
+
"sso"
|
|
15378
|
+
],
|
|
15379
|
+
"summary": "GET /sso/authorize",
|
|
15380
|
+
"description": "GET /sso/authorize?client_id=&redirect_uri=&state= — the browser authorize leg. rank: public — this is an authentication entry point, not an authorization surface. It is gated on a LIVE HUB SESSION (resolved inline via resolveSession; a missing session 302s to the hub's own web sign-in and returns here), NOT on a builder RANK. It mints identity-only codes.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
15381
|
+
"x-rank": "public",
|
|
15382
|
+
"x-source": "modules/platform-identity/routes/sso.js",
|
|
15383
|
+
"responses": {
|
|
15384
|
+
"200": {
|
|
15385
|
+
"description": "Success."
|
|
15386
|
+
},
|
|
15387
|
+
"400": {
|
|
15388
|
+
"$ref": "#/components/responses/BadRequest"
|
|
15389
|
+
}
|
|
15390
|
+
},
|
|
15391
|
+
"security": []
|
|
15392
|
+
}
|
|
15393
|
+
},
|
|
15394
|
+
"/sso/device/poll": {
|
|
15395
|
+
"post": {
|
|
15396
|
+
"operationId": "post_sso_device_poll",
|
|
15397
|
+
"tags": [
|
|
15398
|
+
"sso"
|
|
15399
|
+
],
|
|
15400
|
+
"summary": "POST /sso/device/poll",
|
|
15401
|
+
"description": "POST /sso/device/poll — poll the hub device flow. On GitHub approval, upsert the platform account and mint an audience-scoped EdDSA assertion for the client that was BOUND at start (from the origin) — the poll takes NO client_id, so the CLI cannot influence the audience. Returns the SAME poll states as the core device flow, plus { state:'ok', assertion } on success. rank: public — the device_code (GitHub's) is the bearer; the assertion carries identity ONLY and is useless to anyone but the origin-bound client (aud-scoped).\n\n**Rank:** `public` — No authentication — any caller.",
|
|
15402
|
+
"x-rank": "public",
|
|
15403
|
+
"x-source": "modules/platform-identity/routes/sso.js",
|
|
15404
|
+
"requestBody": {
|
|
15405
|
+
"required": true,
|
|
15406
|
+
"content": {
|
|
15407
|
+
"application/json": {
|
|
15408
|
+
"schema": {
|
|
15409
|
+
"$ref": "#/components/schemas/PostSsoDevicePollRequest"
|
|
15410
|
+
}
|
|
15411
|
+
}
|
|
15412
|
+
},
|
|
15413
|
+
"x-validated": true
|
|
15414
|
+
},
|
|
15415
|
+
"responses": {
|
|
15416
|
+
"200": {
|
|
15417
|
+
"description": "Success."
|
|
15418
|
+
},
|
|
15419
|
+
"400": {
|
|
15420
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
15421
|
+
}
|
|
15422
|
+
},
|
|
15423
|
+
"security": []
|
|
15424
|
+
}
|
|
15425
|
+
},
|
|
15426
|
+
"/sso/device/start": {
|
|
15427
|
+
"post": {
|
|
15428
|
+
"operationId": "post_sso_device_start",
|
|
15429
|
+
"tags": [
|
|
15430
|
+
"sso"
|
|
15431
|
+
],
|
|
15432
|
+
"summary": "POST /sso/device/start",
|
|
15433
|
+
"description": "POST /sso/device/start — begin CLI federation. The client is resolved from the USER-TYPED instance ORIGIN via the registry (getClientByOrigin) and BOUND to the device flow — the CLI never names the audience. This closes the confused-deputy where a malicious instance manifest could steer the mint at a victim client_id (ADR 0141 §1 security fix). Runs the GitHub device flow against the HUB's app and returns the codes. Identity is established as a platform ACCOUNT at poll time — never a hub-builder session (ADR 0141: identity federated, authority local). rank: public — an authentication entry point; the origin is public, and the poll's GitHub approval is the real gate.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
15434
|
+
"x-rank": "public",
|
|
15435
|
+
"x-source": "modules/platform-identity/routes/sso.js",
|
|
15436
|
+
"requestBody": {
|
|
15437
|
+
"required": true,
|
|
15438
|
+
"content": {
|
|
15439
|
+
"application/json": {
|
|
15440
|
+
"schema": {
|
|
15441
|
+
"$ref": "#/components/schemas/PostSsoDeviceStartRequest"
|
|
14861
15442
|
}
|
|
14862
15443
|
}
|
|
14863
15444
|
},
|
|
@@ -17502,6 +18083,17 @@
|
|
|
17502
18083
|
"path"
|
|
17503
18084
|
]
|
|
17504
18085
|
},
|
|
18086
|
+
"DeleteSpecialitiesIdDocumentsDocIdResponse": {
|
|
18087
|
+
"type": "object",
|
|
18088
|
+
"properties": {
|
|
18089
|
+
"ok": {
|
|
18090
|
+
"type": "boolean"
|
|
18091
|
+
}
|
|
18092
|
+
},
|
|
18093
|
+
"required": [
|
|
18094
|
+
"ok"
|
|
18095
|
+
]
|
|
18096
|
+
},
|
|
17505
18097
|
"DeleteTasksIdCriteriaCriterionIdResponse": {
|
|
17506
18098
|
"type": "object",
|
|
17507
18099
|
"properties": {
|
|
@@ -18440,6 +19032,15 @@
|
|
|
18440
19032
|
"known_sounds"
|
|
18441
19033
|
]
|
|
18442
19034
|
},
|
|
19035
|
+
"GetMeSpecialitiesResponse": {
|
|
19036
|
+
"type": "object",
|
|
19037
|
+
"properties": {
|
|
19038
|
+
"adoptions": {}
|
|
19039
|
+
},
|
|
19040
|
+
"required": [
|
|
19041
|
+
"adoptions"
|
|
19042
|
+
]
|
|
19043
|
+
},
|
|
18443
19044
|
"GetMemoryBfgBuildersBuilderIdFileResponse": {
|
|
18444
19045
|
"type": "object",
|
|
18445
19046
|
"properties": {
|
|
@@ -19080,6 +19681,33 @@
|
|
|
19080
19681
|
"offset"
|
|
19081
19682
|
]
|
|
19082
19683
|
},
|
|
19684
|
+
"GetSpecialitiesIdDocumentsResponse": {
|
|
19685
|
+
"type": "object",
|
|
19686
|
+
"properties": {
|
|
19687
|
+
"documents": {}
|
|
19688
|
+
},
|
|
19689
|
+
"required": [
|
|
19690
|
+
"documents"
|
|
19691
|
+
]
|
|
19692
|
+
},
|
|
19693
|
+
"GetSpecialitiesIdResponse": {
|
|
19694
|
+
"type": "object",
|
|
19695
|
+
"properties": {
|
|
19696
|
+
"speciality": {}
|
|
19697
|
+
},
|
|
19698
|
+
"required": [
|
|
19699
|
+
"speciality"
|
|
19700
|
+
]
|
|
19701
|
+
},
|
|
19702
|
+
"GetSpecialitiesResponse": {
|
|
19703
|
+
"type": "object",
|
|
19704
|
+
"properties": {
|
|
19705
|
+
"specialities": {}
|
|
19706
|
+
},
|
|
19707
|
+
"required": [
|
|
19708
|
+
"specialities"
|
|
19709
|
+
]
|
|
19710
|
+
},
|
|
19083
19711
|
"GetSsoPubkeyResponse": {
|
|
19084
19712
|
"type": "object",
|
|
19085
19713
|
"properties": {
|
|
@@ -19858,6 +20486,38 @@
|
|
|
19858
20486
|
"push"
|
|
19859
20487
|
]
|
|
19860
20488
|
},
|
|
20489
|
+
"PatchSpecialitiesIdRequest": {
|
|
20490
|
+
"type": "object",
|
|
20491
|
+
"properties": {
|
|
20492
|
+
"name": {
|
|
20493
|
+
"type": "string",
|
|
20494
|
+
"minLength": 1
|
|
20495
|
+
},
|
|
20496
|
+
"summary": {
|
|
20497
|
+
"type": "string"
|
|
20498
|
+
},
|
|
20499
|
+
"contract_md": {
|
|
20500
|
+
"type": "string"
|
|
20501
|
+
},
|
|
20502
|
+
"visibility": {
|
|
20503
|
+
"type": "string",
|
|
20504
|
+
"maxLength": 16
|
|
20505
|
+
},
|
|
20506
|
+
"sellable": {
|
|
20507
|
+
"type": "boolean"
|
|
20508
|
+
}
|
|
20509
|
+
},
|
|
20510
|
+
"additionalProperties": false
|
|
20511
|
+
},
|
|
20512
|
+
"PatchSpecialitiesIdResponse": {
|
|
20513
|
+
"type": "object",
|
|
20514
|
+
"properties": {
|
|
20515
|
+
"speciality": {}
|
|
20516
|
+
},
|
|
20517
|
+
"required": [
|
|
20518
|
+
"speciality"
|
|
20519
|
+
]
|
|
20520
|
+
},
|
|
19861
20521
|
"PatchTaskRecommendationsIdRequest": {
|
|
19862
20522
|
"type": "object",
|
|
19863
20523
|
"properties": {
|
|
@@ -22396,6 +23056,46 @@
|
|
|
22396
23056
|
],
|
|
22397
23057
|
"additionalProperties": false
|
|
22398
23058
|
},
|
|
23059
|
+
"PostProjectsProjectIdSpecialitiesRequest": {
|
|
23060
|
+
"type": "object",
|
|
23061
|
+
"properties": {
|
|
23062
|
+
"name": {
|
|
23063
|
+
"type": "string",
|
|
23064
|
+
"minLength": 1
|
|
23065
|
+
},
|
|
23066
|
+
"discipline": {
|
|
23067
|
+
"type": "string",
|
|
23068
|
+
"maxLength": 64
|
|
23069
|
+
},
|
|
23070
|
+
"summary": {
|
|
23071
|
+
"type": "string"
|
|
23072
|
+
},
|
|
23073
|
+
"contract_md": {
|
|
23074
|
+
"type": "string"
|
|
23075
|
+
},
|
|
23076
|
+
"visibility": {
|
|
23077
|
+
"type": "string",
|
|
23078
|
+
"maxLength": 16
|
|
23079
|
+
},
|
|
23080
|
+
"sellable": {
|
|
23081
|
+
"type": "boolean"
|
|
23082
|
+
}
|
|
23083
|
+
},
|
|
23084
|
+
"required": [
|
|
23085
|
+
"name",
|
|
23086
|
+
"discipline"
|
|
23087
|
+
],
|
|
23088
|
+
"additionalProperties": false
|
|
23089
|
+
},
|
|
23090
|
+
"PostProjectsProjectIdSpecialitiesResponse": {
|
|
23091
|
+
"type": "object",
|
|
23092
|
+
"properties": {
|
|
23093
|
+
"speciality": {}
|
|
23094
|
+
},
|
|
23095
|
+
"required": [
|
|
23096
|
+
"speciality"
|
|
23097
|
+
]
|
|
23098
|
+
},
|
|
22399
23099
|
"PostProjectsRequest": {
|
|
22400
23100
|
"type": "object",
|
|
22401
23101
|
"properties": {
|
|
@@ -22993,6 +23693,100 @@
|
|
|
22993
23693
|
"token_reward": {}
|
|
22994
23694
|
}
|
|
22995
23695
|
},
|
|
23696
|
+
"PostSpecialitiesIdAbandonResponse": {
|
|
23697
|
+
"type": "object",
|
|
23698
|
+
"properties": {
|
|
23699
|
+
"ok": {
|
|
23700
|
+
"type": "boolean"
|
|
23701
|
+
},
|
|
23702
|
+
"was_active": {}
|
|
23703
|
+
},
|
|
23704
|
+
"required": [
|
|
23705
|
+
"ok",
|
|
23706
|
+
"was_active"
|
|
23707
|
+
]
|
|
23708
|
+
},
|
|
23709
|
+
"PostSpecialitiesIdAdoptResponse": {
|
|
23710
|
+
"type": "object",
|
|
23711
|
+
"properties": {
|
|
23712
|
+
"adoption": {}
|
|
23713
|
+
},
|
|
23714
|
+
"required": [
|
|
23715
|
+
"adoption"
|
|
23716
|
+
]
|
|
23717
|
+
},
|
|
23718
|
+
"PostSpecialitiesIdDocumentsRequest": {
|
|
23719
|
+
"type": "object",
|
|
23720
|
+
"properties": {
|
|
23721
|
+
"title": {
|
|
23722
|
+
"type": "string",
|
|
23723
|
+
"minLength": 1
|
|
23724
|
+
},
|
|
23725
|
+
"body_md": {
|
|
23726
|
+
"type": "string",
|
|
23727
|
+
"minLength": 1
|
|
23728
|
+
},
|
|
23729
|
+
"source": {
|
|
23730
|
+
"type": "string",
|
|
23731
|
+
"maxLength": 64
|
|
23732
|
+
}
|
|
23733
|
+
},
|
|
23734
|
+
"required": [
|
|
23735
|
+
"title",
|
|
23736
|
+
"body_md"
|
|
23737
|
+
],
|
|
23738
|
+
"additionalProperties": false
|
|
23739
|
+
},
|
|
23740
|
+
"PostSpecialitiesIdDocumentsResponse": {
|
|
23741
|
+
"type": "object",
|
|
23742
|
+
"properties": {
|
|
23743
|
+
"skipped": {
|
|
23744
|
+
"type": "boolean"
|
|
23745
|
+
},
|
|
23746
|
+
"reason": {},
|
|
23747
|
+
"document": {}
|
|
23748
|
+
}
|
|
23749
|
+
},
|
|
23750
|
+
"PostSpecialitiesRequest": {
|
|
23751
|
+
"type": "object",
|
|
23752
|
+
"properties": {
|
|
23753
|
+
"name": {
|
|
23754
|
+
"type": "string",
|
|
23755
|
+
"minLength": 1
|
|
23756
|
+
},
|
|
23757
|
+
"discipline": {
|
|
23758
|
+
"type": "string",
|
|
23759
|
+
"maxLength": 64
|
|
23760
|
+
},
|
|
23761
|
+
"summary": {
|
|
23762
|
+
"type": "string"
|
|
23763
|
+
},
|
|
23764
|
+
"contract_md": {
|
|
23765
|
+
"type": "string"
|
|
23766
|
+
},
|
|
23767
|
+
"visibility": {
|
|
23768
|
+
"type": "string",
|
|
23769
|
+
"maxLength": 16
|
|
23770
|
+
},
|
|
23771
|
+
"sellable": {
|
|
23772
|
+
"type": "boolean"
|
|
23773
|
+
}
|
|
23774
|
+
},
|
|
23775
|
+
"required": [
|
|
23776
|
+
"name",
|
|
23777
|
+
"discipline"
|
|
23778
|
+
],
|
|
23779
|
+
"additionalProperties": false
|
|
23780
|
+
},
|
|
23781
|
+
"PostSpecialitiesResponse": {
|
|
23782
|
+
"type": "object",
|
|
23783
|
+
"properties": {
|
|
23784
|
+
"speciality": {}
|
|
23785
|
+
},
|
|
23786
|
+
"required": [
|
|
23787
|
+
"speciality"
|
|
23788
|
+
]
|
|
23789
|
+
},
|
|
22996
23790
|
"PostSsoActivityRollupRequest": {
|
|
22997
23791
|
"type": "object",
|
|
22998
23792
|
"properties": {
|
|
@@ -23988,9 +24782,9 @@
|
|
|
23988
24782
|
"description": "A required dependency/feature is not configured or is temporarily down."
|
|
23989
24783
|
}
|
|
23990
24784
|
},
|
|
23991
|
-
"x-endpoint-count":
|
|
23992
|
-
"x-schema-count":
|
|
24785
|
+
"x-endpoint-count": 390,
|
|
24786
|
+
"x-schema-count": 430,
|
|
23993
24787
|
"x-undocumented-bodies": 9,
|
|
23994
|
-
"x-response-schemas":
|
|
24788
|
+
"x-response-schemas": 293,
|
|
23995
24789
|
"x-generated-by": "scripts/gds/gen-api-docs.js"
|
|
23996
24790
|
}
|