@kungfu-tech/buildchain 4.0.2-alpha.43 → 4.0.2-alpha.45
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/architecture/maintainability-debt.json +18 -19
- package/architecture/maintainability-policy.json +4 -4
- package/architecture/v4-release-topology.json +9 -6
- package/architecture/v4-universal-workflow-train-admission.json +1 -1
- package/dist/site/buildchain-contract.json +7 -7
- package/dist/site/buildchain-site.json +50 -14
- package/dist/site/capability-registry.json +2 -2
- package/dist/site/kfd-claims.json +29 -5
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/manual-registry.json +3 -3
- package/dist/site/node-api-registry.json +154 -13
- package/dist/site/page-registry.json +43 -7
- package/dist/site/public-surface-audit.json +7 -3
- package/dist/site/publication-authority-registry.json +5 -17
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/release-provenance.json +2 -1
- package/dist/site/site-manifest.json +7 -7
- package/dist/site/workflow-registry.json +5 -5
- package/docs/MAP.md +1 -0
- package/docs/cli.md +3 -0
- package/docs/node-api-reference.md +21 -10
- package/docs/oci-publication.md +82 -0
- package/package.json +3 -2
- package/packages/core/buildchain-v4-domain.wasm +0 -0
- package/packages/core/oci-publication-bundle.js +241 -0
- package/packages/core/paper-agent-entry.js +26 -2
- package/packages/core/paper.js +4 -4
- package/packages/core/release-tail-product-capabilities.js +9 -0
- package/packages/core/v4-canonical-contracts.js +1 -0
- package/packages/core/v4-domain-wasm-artifact.js +2 -2
- package/scripts/check-v4-release-topology.mjs +14 -4
- package/scripts/generate-channel-promotion-workflow.mjs +2 -19
- package/scripts/generate-v4-universal-workflow-facades.mjs +8 -2
- package/scripts/publication-candidate-kind.mjs +92 -0
- package/scripts/publication-candidate-sealer.mjs +9 -0
- package/scripts/release-candidate-resolver.mjs +6 -17
- package/scripts/resume-from-candidate-run.mjs +10 -17
- package/scripts/site-capability-metadata.mjs +1 -0
- package/scripts/v4-product-publication-intent.mjs +1 -1
- package/scripts/v4-universal-workflow-engine.mjs +2 -0
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"maturity": "stable",
|
|
16
16
|
"counts": {
|
|
17
17
|
"manualCount": 4,
|
|
18
|
-
"pageCount":
|
|
18
|
+
"pageCount": 22,
|
|
19
19
|
"cliCommandCount": 9,
|
|
20
20
|
"nodeApiCount": 0,
|
|
21
21
|
"workflowCount": 0,
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"manualCount": 6,
|
|
89
89
|
"pageCount": 19,
|
|
90
90
|
"cliCommandCount": 10,
|
|
91
|
-
"nodeApiCount":
|
|
91
|
+
"nodeApiCount": 17,
|
|
92
92
|
"workflowCount": 4,
|
|
93
93
|
"actionCount": 2
|
|
94
94
|
},
|
|
@@ -21,12 +21,12 @@
|
|
|
21
21
|
"contract": "kungfu-buildchain-public-surface-reverse-audit",
|
|
22
22
|
"path": "dist/site/public-surface-audit.json",
|
|
23
23
|
"status": "passed",
|
|
24
|
-
"sha256": "
|
|
24
|
+
"sha256": "b912e513430da3ecb1368a4e0451750d5d7d4cea9e9342eebf484904b1bed4e0",
|
|
25
25
|
"summary": {
|
|
26
26
|
"cliCommandCount": 117,
|
|
27
27
|
"workflowCount": 114,
|
|
28
28
|
"actionCount": 8,
|
|
29
|
-
"sitePageCount":
|
|
29
|
+
"sitePageCount": 88,
|
|
30
30
|
"docCommandRefCount": 1050,
|
|
31
31
|
"failureCount": 0
|
|
32
32
|
},
|
|
@@ -246,12 +246,12 @@
|
|
|
246
246
|
"contract": "kungfu-buildchain-public-surface-reverse-audit",
|
|
247
247
|
"path": "dist/site/public-surface-audit.json",
|
|
248
248
|
"status": "passed",
|
|
249
|
-
"sha256": "
|
|
249
|
+
"sha256": "b912e513430da3ecb1368a4e0451750d5d7d4cea9e9342eebf484904b1bed4e0",
|
|
250
250
|
"summary": {
|
|
251
251
|
"cliCommandCount": 117,
|
|
252
252
|
"workflowCount": 114,
|
|
253
253
|
"actionCount": 8,
|
|
254
|
-
"sitePageCount":
|
|
254
|
+
"sitePageCount": 88,
|
|
255
255
|
"docCommandRefCount": 1050,
|
|
256
256
|
"failureCount": 0
|
|
257
257
|
},
|
|
@@ -2215,6 +2215,18 @@
|
|
|
2215
2215
|
"participantFacing": true,
|
|
2216
2216
|
"public": true,
|
|
2217
2217
|
"packageExport": "./buildchain-kfd-claims"
|
|
2218
|
+
},
|
|
2219
|
+
{
|
|
2220
|
+
"id": "export:./oci-publication",
|
|
2221
|
+
"name": "@kungfu-tech/buildchain/oci-publication",
|
|
2222
|
+
"kind": "package-export",
|
|
2223
|
+
"sourcePath": "packages/core/oci-publication-bundle.js",
|
|
2224
|
+
"evidencePath": "packages/core/oci-publication-bundle.js",
|
|
2225
|
+
"availability": "shipped",
|
|
2226
|
+
"visibility": "public",
|
|
2227
|
+
"participantFacing": true,
|
|
2228
|
+
"public": true,
|
|
2229
|
+
"packageExport": "./oci-publication"
|
|
2218
2230
|
}
|
|
2219
2231
|
],
|
|
2220
2232
|
"siteConsumptionContracts": [
|
|
@@ -8465,6 +8477,18 @@
|
|
|
8465
8477
|
"public": true,
|
|
8466
8478
|
"reverseAuditSource": "dist/site/page-registry.json"
|
|
8467
8479
|
},
|
|
8480
|
+
{
|
|
8481
|
+
"id": "site-page:manual:oci-publication",
|
|
8482
|
+
"name": "site-page:manual:oci-publication",
|
|
8483
|
+
"kind": "site-page",
|
|
8484
|
+
"sourcePath": "dist/site/page-registry.json",
|
|
8485
|
+
"evidencePath": "dist/site/page-registry.json",
|
|
8486
|
+
"availability": "shipped",
|
|
8487
|
+
"visibility": "public",
|
|
8488
|
+
"participantFacing": true,
|
|
8489
|
+
"public": true,
|
|
8490
|
+
"reverseAuditSource": "dist/site/page-registry.json"
|
|
8491
|
+
},
|
|
8468
8492
|
{
|
|
8469
8493
|
"id": "site-page:manual:ownership",
|
|
8470
8494
|
"name": "site-page:manual:ownership",
|
|
@@ -9092,6 +9116,6 @@
|
|
|
9092
9116
|
}
|
|
9093
9117
|
}
|
|
9094
9118
|
],
|
|
9095
|
-
"publicSurfaceCount":
|
|
9119
|
+
"publicSurfaceCount": 523
|
|
9096
9120
|
}
|
|
9097
9121
|
}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"title": "Buildchain documentation map",
|
|
10
10
|
"path": "docs/MAP.md",
|
|
11
11
|
"plane": "use",
|
|
12
|
-
"digest": "sha256:
|
|
12
|
+
"digest": "sha256:af7bee38e21a9ada99e1731f3576733f2897f9d19bdbf39eb2781650095ae419",
|
|
13
13
|
"capabilityGroup": "getting-started",
|
|
14
14
|
"audience": [
|
|
15
15
|
"agent",
|
|
@@ -333,7 +333,7 @@
|
|
|
333
333
|
"title": "CLI and npm package",
|
|
334
334
|
"path": "docs/cli.md",
|
|
335
335
|
"plane": "use",
|
|
336
|
-
"digest": "sha256:
|
|
336
|
+
"digest": "sha256:fc2e0cd3f5718e05101d85f6363cefcd2336609c05dd6626b6a062b44c3a1a0d",
|
|
337
337
|
"capabilityGroup": "api-cli-reference",
|
|
338
338
|
"audience": [
|
|
339
339
|
"agent",
|
|
@@ -362,7 +362,7 @@
|
|
|
362
362
|
"title": "Generated Node API reference",
|
|
363
363
|
"path": "docs/node-api-reference.md",
|
|
364
364
|
"plane": "use",
|
|
365
|
-
"digest": "sha256:
|
|
365
|
+
"digest": "sha256:48232d47023b85063e7f779f053850e38149359ea3b2a5acd5126ff81f423ff4",
|
|
366
366
|
"capabilityGroup": "api-cli-reference",
|
|
367
367
|
"audience": [
|
|
368
368
|
"agent",
|
|
@@ -15666,6 +15666,121 @@
|
|
|
15666
15666
|
"agent"
|
|
15667
15667
|
]
|
|
15668
15668
|
},
|
|
15669
|
+
{
|
|
15670
|
+
"id": "packages/core/oci-publication-bundle.js#OCI_FAMILY_SCHEMA",
|
|
15671
|
+
"name": "OCI_FAMILY_SCHEMA",
|
|
15672
|
+
"kind": "constant",
|
|
15673
|
+
"signature": "const OCI_FAMILY_SCHEMA",
|
|
15674
|
+
"parameters": [],
|
|
15675
|
+
"returns": "value",
|
|
15676
|
+
"errors": [
|
|
15677
|
+
"Import does not declare a throw contract."
|
|
15678
|
+
],
|
|
15679
|
+
"sideEffects": [
|
|
15680
|
+
"none-on-import"
|
|
15681
|
+
],
|
|
15682
|
+
"source": {
|
|
15683
|
+
"path": "packages/core/oci-publication-bundle.js",
|
|
15684
|
+
"line": 6
|
|
15685
|
+
},
|
|
15686
|
+
"example": "import { OCI_FAMILY_SCHEMA } from \"@kungfu-tech/buildchain/oci-publication\";",
|
|
15687
|
+
"maturity": "stable",
|
|
15688
|
+
"audience": [
|
|
15689
|
+
"developer",
|
|
15690
|
+
"agent"
|
|
15691
|
+
]
|
|
15692
|
+
},
|
|
15693
|
+
{
|
|
15694
|
+
"id": "packages/core/oci-publication-bundle.js#ociBundleFile",
|
|
15695
|
+
"name": "ociBundleFile",
|
|
15696
|
+
"kind": "function",
|
|
15697
|
+
"signature": "function ociBundleFile(root, relative)",
|
|
15698
|
+
"parameters": [
|
|
15699
|
+
{
|
|
15700
|
+
"name": "root",
|
|
15701
|
+
"signature": "root"
|
|
15702
|
+
},
|
|
15703
|
+
{
|
|
15704
|
+
"name": "relative",
|
|
15705
|
+
"signature": "relative"
|
|
15706
|
+
}
|
|
15707
|
+
],
|
|
15708
|
+
"returns": "unknown",
|
|
15709
|
+
"errors": [
|
|
15710
|
+
"Errors from called operations may propagate; no narrower throw contract is declared in source."
|
|
15711
|
+
],
|
|
15712
|
+
"sideEffects": [
|
|
15713
|
+
"none-detected-by-static-source-scan"
|
|
15714
|
+
],
|
|
15715
|
+
"source": {
|
|
15716
|
+
"path": "packages/core/oci-publication-bundle.js",
|
|
15717
|
+
"line": 29
|
|
15718
|
+
},
|
|
15719
|
+
"example": "import { ociBundleFile } from \"@kungfu-tech/buildchain/oci-publication\";",
|
|
15720
|
+
"maturity": "stable",
|
|
15721
|
+
"audience": [
|
|
15722
|
+
"developer",
|
|
15723
|
+
"agent"
|
|
15724
|
+
]
|
|
15725
|
+
},
|
|
15726
|
+
{
|
|
15727
|
+
"id": "packages/core/oci-publication-bundle.js#sealOciPublicationBundle",
|
|
15728
|
+
"name": "sealOciPublicationBundle",
|
|
15729
|
+
"kind": "function",
|
|
15730
|
+
"signature": "function sealOciPublicationBundle({ bundleRoot, body })",
|
|
15731
|
+
"parameters": [
|
|
15732
|
+
{
|
|
15733
|
+
"name": "parameter1",
|
|
15734
|
+
"signature": "{ bundleRoot, body }"
|
|
15735
|
+
}
|
|
15736
|
+
],
|
|
15737
|
+
"returns": "unknown",
|
|
15738
|
+
"errors": [
|
|
15739
|
+
"May throw an Error on rejected input or failed operations; follow the linked source contract."
|
|
15740
|
+
],
|
|
15741
|
+
"sideEffects": [
|
|
15742
|
+
"none-detected-by-static-source-scan"
|
|
15743
|
+
],
|
|
15744
|
+
"source": {
|
|
15745
|
+
"path": "packages/core/oci-publication-bundle.js",
|
|
15746
|
+
"line": 10
|
|
15747
|
+
},
|
|
15748
|
+
"example": "import { sealOciPublicationBundle } from \"@kungfu-tech/buildchain/oci-publication\";",
|
|
15749
|
+
"maturity": "stable",
|
|
15750
|
+
"audience": [
|
|
15751
|
+
"developer",
|
|
15752
|
+
"agent"
|
|
15753
|
+
]
|
|
15754
|
+
},
|
|
15755
|
+
{
|
|
15756
|
+
"id": "packages/core/oci-publication-bundle.js#verifyOciPublicationBundle",
|
|
15757
|
+
"name": "verifyOciPublicationBundle",
|
|
15758
|
+
"kind": "function",
|
|
15759
|
+
"signature": "function verifyOciPublicationBundle({ bundleRoot, manifest, repository, sourceSha, version, })",
|
|
15760
|
+
"parameters": [
|
|
15761
|
+
{
|
|
15762
|
+
"name": "parameter1",
|
|
15763
|
+
"signature": "{ bundleRoot, manifest, repository, sourceSha, version, }"
|
|
15764
|
+
}
|
|
15765
|
+
],
|
|
15766
|
+
"returns": "unknown",
|
|
15767
|
+
"errors": [
|
|
15768
|
+
"Errors from called operations may propagate; no narrower throw contract is declared in source."
|
|
15769
|
+
],
|
|
15770
|
+
"sideEffects": [
|
|
15771
|
+
"none-detected-by-static-source-scan"
|
|
15772
|
+
],
|
|
15773
|
+
"source": {
|
|
15774
|
+
"path": "packages/core/oci-publication-bundle.js",
|
|
15775
|
+
"line": 114
|
|
15776
|
+
},
|
|
15777
|
+
"example": "import { verifyOciPublicationBundle } from \"@kungfu-tech/buildchain/oci-publication\";",
|
|
15778
|
+
"maturity": "stable",
|
|
15779
|
+
"audience": [
|
|
15780
|
+
"developer",
|
|
15781
|
+
"agent"
|
|
15782
|
+
]
|
|
15783
|
+
},
|
|
15669
15784
|
{
|
|
15670
15785
|
"id": "packages/core/package-manager.js#assertPackageManager",
|
|
15671
15786
|
"name": "assertPackageManager",
|
|
@@ -15963,7 +16078,7 @@
|
|
|
15963
16078
|
],
|
|
15964
16079
|
"source": {
|
|
15965
16080
|
"path": "packages/core/paper-agent-entry.js",
|
|
15966
|
-
"line":
|
|
16081
|
+
"line": 279
|
|
15967
16082
|
},
|
|
15968
16083
|
"example": "import { collectPaperAgentEntry } from \"@kungfu-tech/buildchain/paper\";",
|
|
15969
16084
|
"maturity": "stable",
|
|
@@ -15992,7 +16107,7 @@
|
|
|
15992
16107
|
],
|
|
15993
16108
|
"source": {
|
|
15994
16109
|
"path": "packages/core/paper-agent-entry.js",
|
|
15995
|
-
"line":
|
|
16110
|
+
"line": 101
|
|
15996
16111
|
},
|
|
15997
16112
|
"example": "import { createPaperAgentEntry } from \"@kungfu-tech/buildchain/paper\";",
|
|
15998
16113
|
"maturity": "stable",
|
|
@@ -16025,7 +16140,7 @@
|
|
|
16025
16140
|
],
|
|
16026
16141
|
"source": {
|
|
16027
16142
|
"path": "packages/core/paper-agent-entry.js",
|
|
16028
|
-
"line":
|
|
16143
|
+
"line": 69
|
|
16029
16144
|
},
|
|
16030
16145
|
"example": "import { mergePaperAgentEntryInstructions } from \"@kungfu-tech/buildchain/paper\";",
|
|
16031
16146
|
"maturity": "stable",
|
|
@@ -16049,7 +16164,7 @@
|
|
|
16049
16164
|
],
|
|
16050
16165
|
"source": {
|
|
16051
16166
|
"path": "packages/core/paper-agent-entry.js",
|
|
16052
|
-
"line":
|
|
16167
|
+
"line": 24
|
|
16053
16168
|
},
|
|
16054
16169
|
"example": "import { PAPER_AGENT_ENTRY_CONTRACT } from \"@kungfu-tech/buildchain/paper\";",
|
|
16055
16170
|
"maturity": "stable",
|
|
@@ -16073,7 +16188,7 @@
|
|
|
16073
16188
|
],
|
|
16074
16189
|
"source": {
|
|
16075
16190
|
"path": "packages/core/paper-agent-entry.js",
|
|
16076
|
-
"line":
|
|
16191
|
+
"line": 25
|
|
16077
16192
|
},
|
|
16078
16193
|
"example": "import { PAPER_AGENT_ENTRY_SCHEMA_VERSION } from \"@kungfu-tech/buildchain/paper\";",
|
|
16079
16194
|
"maturity": "stable",
|
|
@@ -16097,7 +16212,7 @@
|
|
|
16097
16212
|
],
|
|
16098
16213
|
"source": {
|
|
16099
16214
|
"path": "packages/core/paper-agent-entry.js",
|
|
16100
|
-
"line":
|
|
16215
|
+
"line": 28
|
|
16101
16216
|
},
|
|
16102
16217
|
"example": "import { PAPER_AGENT_ENTRY_SECTION_END } from \"@kungfu-tech/buildchain/paper\";",
|
|
16103
16218
|
"maturity": "stable",
|
|
@@ -16121,7 +16236,7 @@
|
|
|
16121
16236
|
],
|
|
16122
16237
|
"source": {
|
|
16123
16238
|
"path": "packages/core/paper-agent-entry.js",
|
|
16124
|
-
"line":
|
|
16239
|
+
"line": 26
|
|
16125
16240
|
},
|
|
16126
16241
|
"example": "import { PAPER_AGENT_ENTRY_SECTION_START } from \"@kungfu-tech/buildchain/paper\";",
|
|
16127
16242
|
"maturity": "stable",
|
|
@@ -16150,7 +16265,7 @@
|
|
|
16150
16265
|
],
|
|
16151
16266
|
"source": {
|
|
16152
16267
|
"path": "packages/core/paper-agent-entry.js",
|
|
16153
|
-
"line":
|
|
16268
|
+
"line": 176
|
|
16154
16269
|
},
|
|
16155
16270
|
"example": "import { paperAgentEntryFiles } from \"@kungfu-tech/buildchain/paper\";",
|
|
16156
16271
|
"maturity": "stable",
|
|
@@ -16179,7 +16294,7 @@
|
|
|
16179
16294
|
],
|
|
16180
16295
|
"source": {
|
|
16181
16296
|
"path": "packages/core/paper-agent-entry.js",
|
|
16182
|
-
"line":
|
|
16297
|
+
"line": 44
|
|
16183
16298
|
},
|
|
16184
16299
|
"example": "import { paperAgentEntryInstructions } from \"@kungfu-tech/buildchain/paper\";",
|
|
16185
16300
|
"maturity": "stable",
|
|
@@ -16212,7 +16327,7 @@
|
|
|
16212
16327
|
],
|
|
16213
16328
|
"source": {
|
|
16214
16329
|
"path": "packages/core/paper-agent-entry.js",
|
|
16215
|
-
"line":
|
|
16330
|
+
"line": 205
|
|
16216
16331
|
},
|
|
16217
16332
|
"example": "import { resolvePaperBuildchainSha } from \"@kungfu-tech/buildchain/paper\";",
|
|
16218
16333
|
"maturity": "stable",
|
|
@@ -30319,7 +30434,7 @@
|
|
|
30319
30434
|
"specifier": "@kungfu-tech/buildchain/paper",
|
|
30320
30435
|
"export": "./paper",
|
|
30321
30436
|
"target": "./packages/core/paper.js",
|
|
30322
|
-
"digest": "sha256:
|
|
30437
|
+
"digest": "sha256:0af7b6a2b66d7b471bf6d22064558269375f6c01c4147be4d77bc00c9865d988",
|
|
30323
30438
|
"summary": "Unified Paper work, fleet, scaffold, preflight, npm bootstrap, build, Alpha, status, and resume planning APIs.",
|
|
30324
30439
|
"capabilityGroup": "reusable-build",
|
|
30325
30440
|
"audience": [
|
|
@@ -31188,18 +31303,44 @@
|
|
|
31188
31303
|
"deprecationReplacement": "",
|
|
31189
31304
|
"sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
|
|
31190
31305
|
"nonDuplicationRationale": "Existing package subpath retained as the canonical API boundary for this capability."
|
|
31306
|
+
},
|
|
31307
|
+
{
|
|
31308
|
+
"specifier": "@kungfu-tech/buildchain/oci-publication",
|
|
31309
|
+
"export": "./oci-publication",
|
|
31310
|
+
"target": "./packages/core/oci-publication-bundle.js",
|
|
31311
|
+
"digest": "sha256:6783cbeb8ee699b8c4b04ac9f692cdccb4b226872f06f025e1a5e4b49d05e3f5",
|
|
31312
|
+
"summary": "Sealed OCI image family verification, provenance, and smoke evidence APIs.",
|
|
31313
|
+
"capabilityGroup": "reusable-build",
|
|
31314
|
+
"audience": [
|
|
31315
|
+
"developer",
|
|
31316
|
+
"agent"
|
|
31317
|
+
],
|
|
31318
|
+
"symbolCount": 4,
|
|
31319
|
+
"symbolIds": [
|
|
31320
|
+
"packages/core/oci-publication-bundle.js#OCI_FAMILY_SCHEMA",
|
|
31321
|
+
"packages/core/oci-publication-bundle.js#ociBundleFile",
|
|
31322
|
+
"packages/core/oci-publication-bundle.js#sealOciPublicationBundle",
|
|
31323
|
+
"packages/core/oci-publication-bundle.js#verifyOciPublicationBundle"
|
|
31324
|
+
],
|
|
31325
|
+
"owner": "buildchain-core",
|
|
31326
|
+
"maturity": "stable",
|
|
31327
|
+
"introducedVersion": "pre-3.0.2-alpha.4",
|
|
31328
|
+
"compatibilityPromise": "preserved-through-the-v3-major-line",
|
|
31329
|
+
"deprecationReplacement": "",
|
|
31330
|
+
"sunsetCondition": "explicit-breaking-change-review-in-a-future-major-line",
|
|
31331
|
+
"nonDuplicationRationale": "Existing package subpath retained as the canonical API boundary for this capability."
|
|
31191
31332
|
}
|
|
31192
31333
|
],
|
|
31193
31334
|
"docs": [
|
|
31194
31335
|
{
|
|
31195
31336
|
"id": "cli-and-node-package",
|
|
31196
31337
|
"path": "docs/cli.md",
|
|
31197
|
-
"digest": "sha256:
|
|
31338
|
+
"digest": "sha256:fc2e0cd3f5718e05101d85f6363cefcd2336609c05dd6626b6a062b44c3a1a0d"
|
|
31198
31339
|
},
|
|
31199
31340
|
{
|
|
31200
31341
|
"id": "node-api-reference",
|
|
31201
31342
|
"path": "docs/node-api-reference.md",
|
|
31202
|
-
"digest": "sha256:
|
|
31343
|
+
"digest": "sha256:48232d47023b85063e7f779f053850e38149359ea3b2a5acd5126ff81f423ff4"
|
|
31203
31344
|
},
|
|
31204
31345
|
{
|
|
31205
31346
|
"id": "build-facts",
|