@intentius/behold 0.19.0 → 0.21.0
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/AGENTS.md +90 -5
- package/README.md +54 -1
- package/demos.json +3 -2
- package/dist/cli.js +1327 -303
- package/example-argo-estate/README.md +8 -8
- package/example-argo-estate/app-a/package.json +2 -2
- package/example-argo-estate/app-b/package.json +2 -2
- package/example-argo-estate/chant.workspace.json +27 -0
- package/example-argo-estate/control-plane/package.json +2 -2
- package/example-argo-estate/package-lock.json +133 -56
- package/example-carve/README.md +14 -14
- package/example-carve/app/package-lock.json +72 -9
- package/example-carve/app/package.json +2 -2
- package/example-carve/legacy-tf/versions.tf +1 -1
- package/example-choudoufu-estate/README.md +4 -4
- package/example-choudoufu-estate/chant.workspace.json +32 -0
- package/example-choudoufu-estate/scripts/choudoufu-up.sh +21 -0
- package/example-flux-estate/README.md +5 -5
- package/example-flux-estate/app-a/package.json +2 -2
- package/example-flux-estate/app-b/package.json +2 -2
- package/example-flux-estate/chant.workspace.json +27 -0
- package/example-flux-estate/control-plane/package.json +2 -2
- package/example-flux-estate/package-lock.json +133 -56
- package/example-k8s/README.md +20 -20
- package/example-k8s/chant.config.ts +1 -1
- package/example-k8s/ops/k3d-apply.op.ts +1 -1
- package/example-k8s/package-lock.json +129 -211
- package/example-k8s/package.json +2 -3
- package/example-terraform-estate/README.md +5 -5
- package/example-terraform-estate/chant.workspace.json +22 -0
- package/example-writes/README.md +5 -5
- package/example-writes/chant.config.ts +1 -1
- package/example-writes/ops/apply.op.ts +1 -1
- package/example-writes/ops/floci.op.ts +2 -2
- package/example-writes/ops/reconcile.op.ts +1 -1
- package/example-writes/package-lock.json +62 -175
- package/example-writes/package.json +2 -3
- package/package.json +6 -6
- package/web/app.js +431 -17
- package/web/behaviour-scale.js +32 -0
- package/web/behaviour-scale.test.js +39 -0
- package/web/embed.js +76 -0
- package/web/embed.test.js +45 -0
- package/web/index.html +20 -0
- package/web/operator.js +14 -1
- package/web/panel.js +11 -3
- package/web/run-playhead.js +13 -1
- package/web/view-url.js +138 -0
- package/web/view-url.test.js +84 -0
- package/web/workspace-gates.js +44 -0
- package/web/workspace-gates.test.js +34 -0
- package/example-choudoufu-estate/.behold.json +0 -8
|
@@ -14,22 +14,22 @@
|
|
|
14
14
|
"app-a": {
|
|
15
15
|
"name": "behold-example-flux-app-a",
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@intentius/chant": "^0.
|
|
18
|
-
"@intentius/chant-lexicon-k8s": "^0.
|
|
17
|
+
"@intentius/chant": "^0.95.0",
|
|
18
|
+
"@intentius/chant-lexicon-k8s": "^0.95.0"
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
21
|
"app-b": {
|
|
22
22
|
"name": "behold-example-flux-app-b",
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@intentius/chant": "^0.
|
|
25
|
-
"@intentius/chant-lexicon-k8s": "^0.
|
|
24
|
+
"@intentius/chant": "^0.95.0",
|
|
25
|
+
"@intentius/chant-lexicon-k8s": "^0.95.0"
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
28
|
"control-plane": {
|
|
29
29
|
"name": "behold-example-flux-control-plane",
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@intentius/chant": "^0.
|
|
32
|
-
"@intentius/chant-lexicon-k8s": "^0.
|
|
31
|
+
"@intentius/chant": "^0.95.0",
|
|
32
|
+
"@intentius/chant-lexicon-k8s": "^0.95.0"
|
|
33
33
|
}
|
|
34
34
|
},
|
|
35
35
|
"node_modules/@dagrejs/dagre": {
|
|
@@ -464,14 +464,16 @@
|
|
|
464
464
|
}
|
|
465
465
|
},
|
|
466
466
|
"node_modules/@intentius/chant": {
|
|
467
|
-
"version": "0.
|
|
468
|
-
"resolved": "https://registry.npmjs.org/@intentius/chant/-/chant-0.
|
|
469
|
-
"integrity": "sha512-
|
|
467
|
+
"version": "0.95.0",
|
|
468
|
+
"resolved": "https://registry.npmjs.org/@intentius/chant/-/chant-0.95.0.tgz",
|
|
469
|
+
"integrity": "sha512-zhReqEbP7apFyI9bwHATxSKPbc9HK8W2lJvZpib0YNEgSafydm+dd31Hn+7o3AcHhYbAkLpHFQwlFYbM2uVYCg==",
|
|
470
470
|
"license": "Apache-2.0",
|
|
471
471
|
"dependencies": {
|
|
472
472
|
"@dagrejs/dagre": "^3.0.0",
|
|
473
|
+
"ajv": "^8.20.0",
|
|
473
474
|
"esbuild": "^0.28.1",
|
|
474
475
|
"fflate": "^0.8.2",
|
|
476
|
+
"js-yaml": "^4.3.1",
|
|
475
477
|
"picomatch": "^4.0.3",
|
|
476
478
|
"tsx": "^4.0.0",
|
|
477
479
|
"typescript": "^5.5.0",
|
|
@@ -479,12 +481,20 @@
|
|
|
479
481
|
},
|
|
480
482
|
"bin": {
|
|
481
483
|
"chant": "bin/chant"
|
|
484
|
+
},
|
|
485
|
+
"peerDependencies": {
|
|
486
|
+
"vitest": ">=2"
|
|
487
|
+
},
|
|
488
|
+
"peerDependenciesMeta": {
|
|
489
|
+
"vitest": {
|
|
490
|
+
"optional": true
|
|
491
|
+
}
|
|
482
492
|
}
|
|
483
493
|
},
|
|
484
494
|
"node_modules/@intentius/chant-k8s-client": {
|
|
485
|
-
"version": "0.
|
|
486
|
-
"resolved": "https://registry.npmjs.org/@intentius/chant-k8s-client/-/chant-k8s-client-0.
|
|
487
|
-
"integrity": "sha512-
|
|
495
|
+
"version": "0.95.0",
|
|
496
|
+
"resolved": "https://registry.npmjs.org/@intentius/chant-k8s-client/-/chant-k8s-client-0.95.0.tgz",
|
|
497
|
+
"integrity": "sha512-AjLnvTNzAIHbwsOv8gszuLqzH0UeA16Dy8dWIdEICUDLRdmi0gGcX7qZ/VNzQMIHu9Bu1hSIJz+gbmR44a7tYA==",
|
|
488
498
|
"license": "Apache-2.0",
|
|
489
499
|
"optional": true,
|
|
490
500
|
"dependencies": {
|
|
@@ -492,23 +502,37 @@
|
|
|
492
502
|
}
|
|
493
503
|
},
|
|
494
504
|
"node_modules/@intentius/chant-lexicon-k8s": {
|
|
495
|
-
"version": "0.
|
|
496
|
-
"resolved": "https://registry.npmjs.org/@intentius/chant-lexicon-k8s/-/chant-lexicon-k8s-0.
|
|
497
|
-
"integrity": "sha512-
|
|
505
|
+
"version": "0.95.0",
|
|
506
|
+
"resolved": "https://registry.npmjs.org/@intentius/chant-lexicon-k8s/-/chant-lexicon-k8s-0.95.0.tgz",
|
|
507
|
+
"integrity": "sha512-sanDVeXQYHXkwwQ5OZiVCbpHn25B6wt9XvW3uoBpzLv/lBhxrPfKGv5xhDyAfKaSktfCknWXlI2S0SV+6AOy8A==",
|
|
498
508
|
"license": "Apache-2.0",
|
|
499
509
|
"dependencies": {
|
|
510
|
+
"@intentius/chant-lexicon-otel": "*",
|
|
500
511
|
"@types/js-yaml": "^4.0.9",
|
|
501
512
|
"js-yaml": "^4.3.1"
|
|
502
513
|
},
|
|
503
514
|
"optionalDependencies": {
|
|
504
|
-
"@intentius/chant-k8s-client": "^0.
|
|
515
|
+
"@intentius/chant-k8s-client": "^0.95.0"
|
|
505
516
|
},
|
|
506
517
|
"peerDependencies": {
|
|
507
|
-
"@intentius/chant": "^0.
|
|
518
|
+
"@intentius/chant": "^0.95.0",
|
|
508
519
|
"typescript": "^5.9.3",
|
|
509
520
|
"zod": "^4.3.6"
|
|
510
521
|
}
|
|
511
522
|
},
|
|
523
|
+
"node_modules/@intentius/chant-lexicon-otel": {
|
|
524
|
+
"version": "0.95.0",
|
|
525
|
+
"resolved": "https://registry.npmjs.org/@intentius/chant-lexicon-otel/-/chant-lexicon-otel-0.95.0.tgz",
|
|
526
|
+
"integrity": "sha512-TTydUPN3fStnkdsmAIWKZiA2gBahxOAz9ihcsHx5rupnkOTSHO8soxayqbUBaUxVbdbrwYT9zpAcc3W3KcXBaQ==",
|
|
527
|
+
"license": "Apache-2.0",
|
|
528
|
+
"dependencies": {
|
|
529
|
+
"js-yaml": "^4.3.1"
|
|
530
|
+
},
|
|
531
|
+
"peerDependencies": {
|
|
532
|
+
"@intentius/chant": "^0.95.0",
|
|
533
|
+
"typescript": "^5.9.3"
|
|
534
|
+
}
|
|
535
|
+
},
|
|
512
536
|
"node_modules/@jsep-plugin/assignment": {
|
|
513
537
|
"version": "1.3.0",
|
|
514
538
|
"resolved": "https://registry.npmjs.org/@jsep-plugin/assignment/-/assignment-1.3.0.tgz",
|
|
@@ -590,13 +614,13 @@
|
|
|
590
614
|
"license": "MIT"
|
|
591
615
|
},
|
|
592
616
|
"node_modules/@types/node": {
|
|
593
|
-
"version": "26.
|
|
594
|
-
"resolved": "https://registry.npmjs.org/@types/node/-/node-26.
|
|
595
|
-
"integrity": "sha512-
|
|
617
|
+
"version": "26.6.3",
|
|
618
|
+
"resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.3.tgz",
|
|
619
|
+
"integrity": "sha512-dsqMQQoeTLqu9wynDD00q573mNzso3IdQOAfHRJqLCcmCFPoGo9A1bDpUcv/9tnKpErQWv9uKeGfl37EIS02Yg==",
|
|
596
620
|
"license": "MIT",
|
|
597
621
|
"optional": true,
|
|
598
622
|
"dependencies": {
|
|
599
|
-
"undici-types": "~8.
|
|
623
|
+
"undici-types": "~8.9.0"
|
|
600
624
|
}
|
|
601
625
|
},
|
|
602
626
|
"node_modules/@types/stream-buffers": {
|
|
@@ -619,6 +643,22 @@
|
|
|
619
643
|
"node": ">= 20"
|
|
620
644
|
}
|
|
621
645
|
},
|
|
646
|
+
"node_modules/ajv": {
|
|
647
|
+
"version": "8.20.0",
|
|
648
|
+
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
|
|
649
|
+
"integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
|
|
650
|
+
"license": "MIT",
|
|
651
|
+
"dependencies": {
|
|
652
|
+
"fast-deep-equal": "^3.1.3",
|
|
653
|
+
"fast-uri": "^3.0.1",
|
|
654
|
+
"json-schema-traverse": "^1.0.0",
|
|
655
|
+
"require-from-string": "^2.0.2"
|
|
656
|
+
},
|
|
657
|
+
"funding": {
|
|
658
|
+
"type": "github",
|
|
659
|
+
"url": "https://github.com/sponsors/epoberezkin"
|
|
660
|
+
}
|
|
661
|
+
},
|
|
622
662
|
"node_modules/argparse": {
|
|
623
663
|
"version": "2.0.1",
|
|
624
664
|
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
|
|
@@ -633,9 +673,9 @@
|
|
|
633
673
|
"optional": true
|
|
634
674
|
},
|
|
635
675
|
"node_modules/b4a": {
|
|
636
|
-
"version": "1.
|
|
637
|
-
"resolved": "https://registry.npmjs.org/b4a/-/b4a-1.
|
|
638
|
-
"integrity": "sha512-
|
|
676
|
+
"version": "1.9.0",
|
|
677
|
+
"resolved": "https://registry.npmjs.org/b4a/-/b4a-1.9.0.tgz",
|
|
678
|
+
"integrity": "sha512-dpfcF9fDNR6++cthXR67iyhgqWy9CBouAvIWhIntzBG6cvK/cnIPiZQjBwi/ZqjjBEDGfoNDtmB0kTjroOJ3pQ==",
|
|
639
679
|
"license": "Apache-2.0",
|
|
640
680
|
"optional": true,
|
|
641
681
|
"peerDependencies": {
|
|
@@ -663,9 +703,9 @@
|
|
|
663
703
|
}
|
|
664
704
|
},
|
|
665
705
|
"node_modules/bare-fs": {
|
|
666
|
-
"version": "4.8.
|
|
667
|
-
"resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.8.
|
|
668
|
-
"integrity": "sha512
|
|
706
|
+
"version": "4.8.2",
|
|
707
|
+
"resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.8.2.tgz",
|
|
708
|
+
"integrity": "sha512-+ZI68KHMUvosXfKbg/UOHK0tbCdRnegbvPEdEcZ3Nd6TetieQsJPRXBRXPdLyy8+3VSEbPXtsumTpEtt78xv9w==",
|
|
669
709
|
"license": "Apache-2.0",
|
|
670
710
|
"optional": true,
|
|
671
711
|
"dependencies": {
|
|
@@ -723,9 +763,9 @@
|
|
|
723
763
|
}
|
|
724
764
|
},
|
|
725
765
|
"node_modules/bare-url": {
|
|
726
|
-
"version": "2.5.
|
|
727
|
-
"resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.5.
|
|
728
|
-
"integrity": "sha512-
|
|
766
|
+
"version": "2.5.4",
|
|
767
|
+
"resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.5.4.tgz",
|
|
768
|
+
"integrity": "sha512-Gxa7UVWBr0/edU1b+TJhn/AZvMQUj9OGspvYsaTYQrAbZA4BOTZGL3LiZxvD+CeMlDH4juwD84+eTAp/bLYW5g==",
|
|
729
769
|
"license": "Apache-2.0",
|
|
730
770
|
"optional": true,
|
|
731
771
|
"dependencies": {
|
|
@@ -924,6 +964,12 @@
|
|
|
924
964
|
"bare-events": "^2.7.0"
|
|
925
965
|
}
|
|
926
966
|
},
|
|
967
|
+
"node_modules/fast-deep-equal": {
|
|
968
|
+
"version": "3.1.3",
|
|
969
|
+
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
|
970
|
+
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
|
|
971
|
+
"license": "MIT"
|
|
972
|
+
},
|
|
927
973
|
"node_modules/fast-fifo": {
|
|
928
974
|
"version": "1.3.2",
|
|
929
975
|
"resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
|
|
@@ -931,6 +977,22 @@
|
|
|
931
977
|
"license": "MIT",
|
|
932
978
|
"optional": true
|
|
933
979
|
},
|
|
980
|
+
"node_modules/fast-uri": {
|
|
981
|
+
"version": "3.1.8",
|
|
982
|
+
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz",
|
|
983
|
+
"integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==",
|
|
984
|
+
"funding": [
|
|
985
|
+
{
|
|
986
|
+
"type": "github",
|
|
987
|
+
"url": "https://github.com/sponsors/fastify"
|
|
988
|
+
},
|
|
989
|
+
{
|
|
990
|
+
"type": "opencollective",
|
|
991
|
+
"url": "https://opencollective.com/fastify"
|
|
992
|
+
}
|
|
993
|
+
],
|
|
994
|
+
"license": "BSD-3-Clause"
|
|
995
|
+
},
|
|
934
996
|
"node_modules/fflate": {
|
|
935
997
|
"version": "0.8.3",
|
|
936
998
|
"resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz",
|
|
@@ -1083,9 +1145,9 @@
|
|
|
1083
1145
|
}
|
|
1084
1146
|
},
|
|
1085
1147
|
"node_modules/ip-address": {
|
|
1086
|
-
"version": "10.7.
|
|
1087
|
-
"resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.
|
|
1088
|
-
"integrity": "sha512-
|
|
1148
|
+
"version": "10.7.2",
|
|
1149
|
+
"resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.2.tgz",
|
|
1150
|
+
"integrity": "sha512-7H/2gFSIitxc0hG3nOI1glS8QLo/EHBFFLk8vEUjXY/xu0AdL8jZ9U1IzO2PUm0d2D/ofQcAifb0g6OBkt8U7w==",
|
|
1089
1151
|
"license": "MIT",
|
|
1090
1152
|
"optional": true,
|
|
1091
1153
|
"engines": {
|
|
@@ -1103,9 +1165,9 @@
|
|
|
1103
1165
|
}
|
|
1104
1166
|
},
|
|
1105
1167
|
"node_modules/jose": {
|
|
1106
|
-
"version": "6.2.
|
|
1107
|
-
"resolved": "https://registry.npmjs.org/jose/-/jose-6.2.
|
|
1108
|
-
"integrity": "sha512-
|
|
1168
|
+
"version": "6.2.12",
|
|
1169
|
+
"resolved": "https://registry.npmjs.org/jose/-/jose-6.2.12.tgz",
|
|
1170
|
+
"integrity": "sha512-9NiFmJEex0sy2Dk58j2UGBSHgUs2ypF9eZSu4L6vjOX3Dp96Sw1F3uL+H+D1sx02jZZdzUT0HgvCy59CuvXcWw==",
|
|
1109
1171
|
"license": "MIT",
|
|
1110
1172
|
"optional": true,
|
|
1111
1173
|
"funding": {
|
|
@@ -1144,6 +1206,12 @@
|
|
|
1144
1206
|
"node": ">= 10.16.0"
|
|
1145
1207
|
}
|
|
1146
1208
|
},
|
|
1209
|
+
"node_modules/json-schema-traverse": {
|
|
1210
|
+
"version": "1.0.0",
|
|
1211
|
+
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
|
|
1212
|
+
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
|
|
1213
|
+
"license": "MIT"
|
|
1214
|
+
},
|
|
1147
1215
|
"node_modules/jsonpath-plus": {
|
|
1148
1216
|
"version": "10.4.0",
|
|
1149
1217
|
"resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-10.4.0.tgz",
|
|
@@ -1204,9 +1272,9 @@
|
|
|
1204
1272
|
"optional": true
|
|
1205
1273
|
},
|
|
1206
1274
|
"node_modules/oauth4webapi": {
|
|
1207
|
-
"version": "3.8.
|
|
1208
|
-
"resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.8.
|
|
1209
|
-
"integrity": "sha512-
|
|
1275
|
+
"version": "3.8.8",
|
|
1276
|
+
"resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.8.8.tgz",
|
|
1277
|
+
"integrity": "sha512-8N28E+a/oxfXWBgOMt+ZP/JUf/XR+IFbvkAEPP3gznXOMv9BpAAwiIj0TFNz3tGTPc0ZQ8zmWBNgN1nAys0gng==",
|
|
1210
1278
|
"license": "MIT",
|
|
1211
1279
|
"optional": true,
|
|
1212
1280
|
"funding": {
|
|
@@ -1224,14 +1292,14 @@
|
|
|
1224
1292
|
}
|
|
1225
1293
|
},
|
|
1226
1294
|
"node_modules/openid-client": {
|
|
1227
|
-
"version": "6.8.
|
|
1228
|
-
"resolved": "https://registry.npmjs.org/openid-client/-/openid-client-6.8.
|
|
1229
|
-
"integrity": "sha512-
|
|
1295
|
+
"version": "6.8.8",
|
|
1296
|
+
"resolved": "https://registry.npmjs.org/openid-client/-/openid-client-6.8.8.tgz",
|
|
1297
|
+
"integrity": "sha512-ZsucJA5Ad04Uv7YN4ql+s4GXNmb9uAYQwyJTsJx7CH/MX3JZioLE2pVKi1SC+YrbSLA4Px3Gi30dMjgOZtb6pA==",
|
|
1230
1298
|
"license": "MIT",
|
|
1231
1299
|
"optional": true,
|
|
1232
1300
|
"dependencies": {
|
|
1233
|
-
"jose": "^6.2.
|
|
1234
|
-
"oauth4webapi": "^3.8.
|
|
1301
|
+
"jose": "^6.2.12",
|
|
1302
|
+
"oauth4webapi": "^3.8.8"
|
|
1235
1303
|
},
|
|
1236
1304
|
"funding": {
|
|
1237
1305
|
"url": "https://github.com/sponsors/panva"
|
|
@@ -1260,6 +1328,15 @@
|
|
|
1260
1328
|
"once": "^1.3.1"
|
|
1261
1329
|
}
|
|
1262
1330
|
},
|
|
1331
|
+
"node_modules/require-from-string": {
|
|
1332
|
+
"version": "2.0.2",
|
|
1333
|
+
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
|
|
1334
|
+
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
|
|
1335
|
+
"license": "MIT",
|
|
1336
|
+
"engines": {
|
|
1337
|
+
"node": ">=0.10.0"
|
|
1338
|
+
}
|
|
1339
|
+
},
|
|
1263
1340
|
"node_modules/rfc4648": {
|
|
1264
1341
|
"version": "1.5.4",
|
|
1265
1342
|
"resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.4.tgz",
|
|
@@ -1279,9 +1356,9 @@
|
|
|
1279
1356
|
}
|
|
1280
1357
|
},
|
|
1281
1358
|
"node_modules/socks": {
|
|
1282
|
-
"version": "2.8.
|
|
1283
|
-
"resolved": "https://registry.npmjs.org/socks/-/socks-2.8.
|
|
1284
|
-
"integrity": "sha512-
|
|
1359
|
+
"version": "2.8.10",
|
|
1360
|
+
"resolved": "https://registry.npmjs.org/socks/-/socks-2.8.10.tgz",
|
|
1361
|
+
"integrity": "sha512-e0VyvkVTwVYViNovRkZ9aodhxVlyoMn7eJhVUPxZ+eK9P/7CBkxvvsBOHqFPEH416726W8tLXXXjKwqgTErrCQ==",
|
|
1285
1362
|
"license": "MIT",
|
|
1286
1363
|
"optional": true,
|
|
1287
1364
|
"dependencies": {
|
|
@@ -1410,9 +1487,9 @@
|
|
|
1410
1487
|
}
|
|
1411
1488
|
},
|
|
1412
1489
|
"node_modules/undici": {
|
|
1413
|
-
"version": "8.
|
|
1414
|
-
"resolved": "https://registry.npmjs.org/undici/-/undici-8.
|
|
1415
|
-
"integrity": "sha512-
|
|
1490
|
+
"version": "8.11.2",
|
|
1491
|
+
"resolved": "https://registry.npmjs.org/undici/-/undici-8.11.2.tgz",
|
|
1492
|
+
"integrity": "sha512-u4UB2/IrKdU6lFxumHmmo1a3fCQO5tzQllRorfoRS63txhrB7xTpSn1PftwC4qEHkOaqP95fCWW4lJzwErwzhQ==",
|
|
1416
1493
|
"license": "MIT",
|
|
1417
1494
|
"optional": true,
|
|
1418
1495
|
"engines": {
|
|
@@ -1420,9 +1497,9 @@
|
|
|
1420
1497
|
}
|
|
1421
1498
|
},
|
|
1422
1499
|
"node_modules/undici-types": {
|
|
1423
|
-
"version": "8.
|
|
1424
|
-
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.
|
|
1425
|
-
"integrity": "sha512-
|
|
1500
|
+
"version": "8.9.0",
|
|
1501
|
+
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz",
|
|
1502
|
+
"integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==",
|
|
1426
1503
|
"license": "MIT",
|
|
1427
1504
|
"optional": true
|
|
1428
1505
|
},
|
|
@@ -1434,9 +1511,9 @@
|
|
|
1434
1511
|
"optional": true
|
|
1435
1512
|
},
|
|
1436
1513
|
"node_modules/ws": {
|
|
1437
|
-
"version": "8.
|
|
1438
|
-
"resolved": "https://registry.npmjs.org/ws/-/ws-8.
|
|
1439
|
-
"integrity": "sha512-
|
|
1514
|
+
"version": "8.22.0",
|
|
1515
|
+
"resolved": "https://registry.npmjs.org/ws/-/ws-8.22.0.tgz",
|
|
1516
|
+
"integrity": "sha512-Ydggc987+RO0AnWtZ/7Wq9FtNvcrL1b/RO0ud9mWjUPgDrsAAwQSF51sm2hm1XofbU/4jkpGEsLFsZZxU+1DOg==",
|
|
1440
1517
|
"license": "MIT",
|
|
1441
1518
|
"optional": true,
|
|
1442
1519
|
"engines": {
|
package/example-k8s/README.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
# The k3d turnkey demo
|
|
1
|
+
# The k3d turnkey demo: `behold demo k8s`
|
|
2
2
|
|
|
3
3
|
The smallest real thing on Kubernetes: one `nginx` Deployment + Service (+ a
|
|
4
4
|
PodDisruptionBudget), deployed from the browser with the **▶ Deploy
|
|
5
5
|
(k3d-apply)** header button, against a local, single-node
|
|
6
|
-
[k3d](https://k3d.io) cluster
|
|
6
|
+
[k3d](https://k3d.io) cluster, no cloud account, no credentials.
|
|
7
7
|
|
|
8
8
|
```
|
|
9
9
|
src/config.ts static config — app name, pinned image tag
|
|
@@ -11,7 +11,7 @@ src/web.ts WebApp composite → Deployment + Service + PodDisruptionB
|
|
|
11
11
|
ops/k3d-apply.op.ts ApplyOp "k3d-apply" — code → local k3d, server-side apply
|
|
12
12
|
base/ a plain Deployment + Service, core kinds only
|
|
13
13
|
overlays/dev/ kustomize overlay over base/ — namePrefix "dev-" + a replica patch
|
|
14
|
-
chant.config.ts lexicons [k8s
|
|
14
|
+
chant.config.ts lexicons [k8s], k8s.profiles.local bound to k3d-behold-k3d-demo,
|
|
15
15
|
k8s.kustomize.roots: ["overlays/dev"]
|
|
16
16
|
scripts/local/ local-up.sh / local-down.sh — the k3d cluster's own lifecycle
|
|
17
17
|
```
|
|
@@ -21,7 +21,7 @@ renders it (`kustomize build`, `kubectl kustomize` fallback) at build time and
|
|
|
21
21
|
joins the two rendered objects (`dev-echo` Deployment + Service) to the graph,
|
|
22
22
|
each stamped with a `chant.intentius.io/kustomize-root: overlays/dev`
|
|
23
23
|
annotation. behold's kustomize lens (behold#171/#217) reads that stamp and
|
|
24
|
-
boxes them as `overlay dev` in the graph
|
|
24
|
+
boxes them as `overlay dev` in the graph, the same lens a hand-rolled
|
|
25
25
|
`kustomization.yaml` next to typed source triggers via its directory walk, but
|
|
26
26
|
here from chant's own provenance rather than file location. Kept to core/apps
|
|
27
27
|
kinds on purpose: chant#1628 still mistypes a Flux/Argo/cert-manager CR
|
|
@@ -38,10 +38,10 @@ npm run demo:k8s
|
|
|
38
38
|
```
|
|
39
39
|
|
|
40
40
|
That one command does two things: `scripts/local/local-up.sh` creates the
|
|
41
|
-
cluster (idempotent
|
|
41
|
+
cluster (idempotent, reusing one already up), then `behold serve --local`
|
|
42
42
|
points its live overlay at it. `--local`'s usual boot step (`chant emulator
|
|
43
|
-
up`) is a no-op here
|
|
44
|
-
the way Floci does for aws
|
|
43
|
+
up`) is a no-op here, since chant's k8s lexicon has no local-emulator capability
|
|
44
|
+
the way Floci does for aws, so the cluster comes up via the same generic
|
|
45
45
|
substrate **Bring up** mechanism the Floci demo's `scripts/local/local-up.sh`
|
|
46
46
|
convention already uses (see `src/substrates.ts`), just run up front instead
|
|
47
47
|
of from a click. Ctrl-C stops `behold serve` and tears the cluster back down;
|
|
@@ -49,14 +49,14 @@ Docker or k3d missing degrades to the source graph with a clear message
|
|
|
49
49
|
instead of crashing.
|
|
50
50
|
|
|
51
51
|
1. Open **http://localhost:4600**. The graph shows the Deployment, Service and
|
|
52
|
-
PodDisruptionBudget
|
|
52
|
+
PodDisruptionBudget in **blue** (declared, not yet deployed).
|
|
53
53
|
2. Click **▶ Deploy (k3d-apply)** in the header (or ⌘K → "Deploy: Sync"). The
|
|
54
54
|
now-line streams Build → Plan (a live
|
|
55
55
|
diff) → Apply: a Kubernetes **server-side apply**, field manager
|
|
56
|
-
`chant:behold-k3d-demo` (chant#1074/#1075)
|
|
56
|
+
`chant:behold-k3d-demo` (chant#1074/#1075). Deletes are **owned-only**, a
|
|
57
57
|
marker-scoped prune that only ever touches what chant itself applied.
|
|
58
58
|
3. The three nodes flip **blue → green (managed)**. Zoom in on the Deployment
|
|
59
|
-
and its two Pods appear **nested underneath it
|
|
59
|
+
and its two Pods appear **nested underneath it**, the runtime tier
|
|
60
60
|
(chant#1077/behold#86): live children a Deployment's controller created,
|
|
61
61
|
never declared here, never classified as drift or an orphan.
|
|
62
62
|
|
|
@@ -66,16 +66,16 @@ behold's k8s parity (#85–#87) shipped against fixtures; this is it against a
|
|
|
66
66
|
real cluster.
|
|
67
67
|
|
|
68
68
|
**Declared, not yet deployed.** Before step 2, `/api/overlay` reports all
|
|
69
|
-
three nodes `_status: accent` (pending)
|
|
69
|
+
three nodes `_status: accent` (pending): chant knows about them, the cluster
|
|
70
70
|
doesn't yet.
|
|
71
71
|
|
|
72
72
|
**Runtime children.** After apply, `/api/overlay`'s `ir.groups.byContainer`
|
|
73
|
-
nests the Deployment's Pods under it, each `_status: runtime
|
|
73
|
+
nests the Deployment's Pods under it, each `_status: runtime`, a tier below
|
|
74
74
|
what's declared, sourced from the cluster's own `ownerReferences`, that
|
|
75
75
|
behold's zoom dial can descend into.
|
|
76
76
|
|
|
77
|
-
**Managed-fields drift.** Scale or label the Deployment out of band
|
|
78
|
-
`kubectl scale deployment/web --replicas=3`, bypassing chant entirely
|
|
77
|
+
**Managed-fields drift.** Scale or label the Deployment out of band, and
|
|
78
|
+
`kubectl scale deployment/web --replicas=3`, bypassing chant entirely, and
|
|
79
79
|
`/api/diff`'s `fieldDrift` reports `spec.replicas: { kind: "changed", declared:
|
|
80
80
|
2, live: 3 }`: chant's own SSA-tracked field, now diverged from a competing
|
|
81
81
|
field manager (`kubectl`, visible in `kubectl get deploy/web -o json`'s
|
|
@@ -94,16 +94,16 @@ stop owning them, and will contest them again on their next apply.
|
|
|
94
94
|
|
|
95
95
|
— naming the contested path and the competing manager, and leaving the field
|
|
96
96
|
alone rather than force-resolving it. (One honest gap found running this
|
|
97
|
-
live: a **new** out-of-band key with no chant-declared counterpart at all
|
|
97
|
+
live: a **new** out-of-band key with no chant-declared counterpart at all,
|
|
98
98
|
`kubectl label deployment/web team=platform`, which has no corresponding
|
|
99
|
-
`web.spec` field in `src/web.ts
|
|
99
|
+
`web.spec` field in `src/web.ts`, doesn't currently surface in `fieldDrift`,
|
|
100
100
|
only a value change to a field chant *does* declare does. Worth a follow-up
|
|
101
101
|
issue on the chant side; noted here rather than papered over.)
|
|
102
102
|
|
|
103
103
|
**Unobserved.** `chant.config.ts` binds environment `local` to kubectl context
|
|
104
|
-
`k3d-behold-k3d-demo` (chant#1100)
|
|
104
|
+
`k3d-behold-k3d-demo` (chant#1100), every read/apply checks that binding
|
|
105
105
|
against whatever context is actually ambient, and refuses rather than reading
|
|
106
|
-
the wrong cluster. Switch away from it for a moment
|
|
106
|
+
the wrong cluster. Switch away from it for a moment:
|
|
107
107
|
|
|
108
108
|
```sh
|
|
109
109
|
kubectl config use-context <anything-else>
|
|
@@ -128,7 +128,7 @@ bash scripts/local/local-down.sh
|
|
|
128
128
|
## Note for chant#1179
|
|
129
129
|
|
|
130
130
|
This Op's `delete: "owned-only"` exercises the same typed, marker-scoped
|
|
131
|
-
prune path chant#1179 wants a live k3d E2E for. This demo isn't that test
|
|
131
|
+
prune path chant#1179 wants a live k3d E2E for. This demo isn't that test;
|
|
132
132
|
it's a manual walkthrough, not an automated assertion of "exactly the orphan
|
|
133
|
-
and nothing else was deleted"
|
|
133
|
+
and nothing else was deleted", but it does confirm the path runs against a
|
|
134
134
|
real cluster, not just `fakeCluster`.
|
|
@@ -9,7 +9,7 @@ import type { K8sChantConfig } from "@intentius/chant-lexicon-k8s";
|
|
|
9
9
|
// "unobserved" step (README.md) is exactly that refusal, produced on purpose
|
|
10
10
|
// by switching away from this context for a moment.
|
|
11
11
|
export default {
|
|
12
|
-
lexicons: ["k8s"
|
|
12
|
+
lexicons: ["k8s"],
|
|
13
13
|
sourceDir: "src",
|
|
14
14
|
environments: ["local"],
|
|
15
15
|
ownership: { stack: "behold-k3d-demo", env: "local" },
|