@nitra/cursor 1.9.18 → 1.9.20
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/CHANGELOG.md +50 -0
- package/bin/auto-skills.md +2 -0
- package/mdc/abie.mdc +21 -249
- package/mdc/hasura.mdc +1 -1
- package/mdc/k8s.mdc +2 -2
- package/package.json +1 -1
- package/policy/abie/base_deployment_preem/base_deployment_preem.rego +2 -2
- package/policy/abie/clean_merged_ignore_branches/clean_merged_ignore_branches.rego +2 -2
- package/policy/abie/clean_merged_ignore_branches/clean_merged_ignore_branches_test.rego +5 -5
- package/policy/rego/package_json/package_json.rego +35 -0
- package/policy/rego/package_json/package_json_test.rego +42 -0
- package/policy/rego/vscode_extensions/vscode_extensions.rego +19 -0
- package/policy/rego/vscode_extensions/vscode_extensions_test.rego +34 -0
- package/policy/rego/vscode_settings/vscode_settings.rego +38 -0
- package/policy/rego/vscode_settings/vscode_settings_test.rego +55 -0
- package/policy/tauri/vscode_extensions/vscode_extensions.rego +28 -0
- package/policy/tauri/vscode_extensions/vscode_extensions_test.rego +44 -0
- package/scripts/check-abie.mjs +73 -934
- package/scripts/check-hasura.mjs +8 -14
- package/scripts/check-k8s.mjs +1 -18
- package/scripts/check-rego.mjs +106 -0
- package/scripts/check-tauri.mjs +88 -0
- package/scripts/lint-conftest.mjs +1 -1
- package/skills/abie-clean/SKILL.md +138 -0
- package/skills/abie-kustomize/SKILL.md +1 -1
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Тести для `rego.vscode_extensions`. Запуск:
|
|
2
|
+
# conftest verify -p npm/policy/rego/vscode_extensions
|
|
3
|
+
package rego.vscode_extensions_test
|
|
4
|
+
|
|
5
|
+
import rego.v1
|
|
6
|
+
|
|
7
|
+
import data.rego.vscode_extensions
|
|
8
|
+
|
|
9
|
+
test_allow_with_required_extension if {
|
|
10
|
+
cfg := {"recommendations": ["tsandall.opa"]}
|
|
11
|
+
count(vscode_extensions.deny) == 0 with input as cfg
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
test_allow_with_additional_extensions if {
|
|
15
|
+
cfg := {"recommendations": [
|
|
16
|
+
"dbaeumer.vscode-eslint",
|
|
17
|
+
"tsandall.opa",
|
|
18
|
+
"oxc.oxc-vscode",
|
|
19
|
+
]}
|
|
20
|
+
count(vscode_extensions.deny) == 0 with input as cfg
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
test_deny_missing_extension if {
|
|
24
|
+
cfg := {"recommendations": ["dbaeumer.vscode-eslint"]}
|
|
25
|
+
count(vscode_extensions.deny) > 0 with input as cfg
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
test_deny_empty_recommendations if {
|
|
29
|
+
count(vscode_extensions.deny) > 0 with input as {"recommendations": []}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
test_deny_no_recommendations_field if {
|
|
33
|
+
count(vscode_extensions.deny) > 0 with input as {}
|
|
34
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Перевірка `.vscode/settings.json` для rego (rego.mdc).
|
|
2
|
+
#
|
|
3
|
+
# Викликається з `check-rego.mjs` через `runConftestBatch` лише ПІСЛЯ виявлення
|
|
4
|
+
# `.rego` файлів у дереві. Глобально у `lint-conftest` НЕ реєструється.
|
|
5
|
+
#
|
|
6
|
+
# Canonical (rego.mdc):
|
|
7
|
+
# { "[rego]": { "editor.defaultFormatter": "tsandall.opa",
|
|
8
|
+
# "editor.formatOnSave": true } }
|
|
9
|
+
#
|
|
10
|
+
# Структура каталогу збігається зі шляхом пакету (regal: directory-package-mismatch).
|
|
11
|
+
package rego.vscode_settings
|
|
12
|
+
|
|
13
|
+
import rego.v1
|
|
14
|
+
|
|
15
|
+
# ── deny: [rego] block ──────────────────────────────────────────────────
|
|
16
|
+
|
|
17
|
+
deny contains msg if {
|
|
18
|
+
not is_object(object.get(input, "[rego]", null))
|
|
19
|
+
msg := concat(" ", [
|
|
20
|
+
".vscode/settings.json: \"[rego]\" має бути обʼєктом з",
|
|
21
|
+
"\"editor.defaultFormatter\": \"tsandall.opa\" і",
|
|
22
|
+
"\"editor.formatOnSave\": true (rego.mdc)",
|
|
23
|
+
])
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
deny contains msg if {
|
|
27
|
+
rego_block := object.get(input, "[rego]", {})
|
|
28
|
+
is_object(rego_block)
|
|
29
|
+
object.get(rego_block, "editor.defaultFormatter", null) != "tsandall.opa"
|
|
30
|
+
msg := ".vscode/settings.json: \"[rego].editor.defaultFormatter\" має бути \"tsandall.opa\" (rego.mdc)"
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
deny contains msg if {
|
|
34
|
+
rego_block := object.get(input, "[rego]", {})
|
|
35
|
+
is_object(rego_block)
|
|
36
|
+
object.get(rego_block, "editor.formatOnSave", null) != true
|
|
37
|
+
msg := ".vscode/settings.json: \"[rego].editor.formatOnSave\" має бути true (rego.mdc)"
|
|
38
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Тести для `rego.vscode_settings`. Запуск:
|
|
2
|
+
# conftest verify -p npm/policy/rego/vscode_settings
|
|
3
|
+
package rego.vscode_settings_test
|
|
4
|
+
|
|
5
|
+
import rego.v1
|
|
6
|
+
|
|
7
|
+
import data.rego.vscode_settings
|
|
8
|
+
|
|
9
|
+
valid_cfg := {"[rego]": {
|
|
10
|
+
"editor.defaultFormatter": "tsandall.opa",
|
|
11
|
+
"editor.formatOnSave": true,
|
|
12
|
+
}}
|
|
13
|
+
|
|
14
|
+
test_allow_canonical if {
|
|
15
|
+
count(vscode_settings.deny) == 0 with input as valid_cfg
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
test_allow_with_additional_lang_blocks if {
|
|
19
|
+
cfg := json.patch(
|
|
20
|
+
valid_cfg,
|
|
21
|
+
[{"op": "add", "path": "/[javascript]", "value": {"editor.defaultFormatter": "oxc.oxc-vscode"}}],
|
|
22
|
+
)
|
|
23
|
+
count(vscode_settings.deny) == 0 with input as cfg
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
test_deny_rego_block_missing if {
|
|
27
|
+
count(vscode_settings.deny) > 0 with input as {}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
test_deny_rego_block_not_object if {
|
|
31
|
+
count(vscode_settings.deny) > 0 with input as {"[rego]": "tsandall.opa"}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
test_deny_wrong_default_formatter if {
|
|
35
|
+
cfg := json.patch(
|
|
36
|
+
valid_cfg,
|
|
37
|
+
[{"op": "replace", "path": "/[rego]/editor.defaultFormatter", "value": "prettier"}],
|
|
38
|
+
)
|
|
39
|
+
count(vscode_settings.deny) > 0 with input as cfg
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
test_deny_default_formatter_missing if {
|
|
43
|
+
cfg := json.patch(valid_cfg, [{"op": "remove", "path": "/[rego]/editor.defaultFormatter"}])
|
|
44
|
+
count(vscode_settings.deny) > 0 with input as cfg
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
test_deny_format_on_save_false if {
|
|
48
|
+
cfg := json.patch(valid_cfg, [{"op": "replace", "path": "/[rego]/editor.formatOnSave", "value": false}])
|
|
49
|
+
count(vscode_settings.deny) > 0 with input as cfg
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
test_deny_format_on_save_missing if {
|
|
53
|
+
cfg := json.patch(valid_cfg, [{"op": "remove", "path": "/[rego]/editor.formatOnSave"}])
|
|
54
|
+
count(vscode_settings.deny) > 0 with input as cfg
|
|
55
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Перевірка `.vscode/extensions.json` для tauri (tauri.mdc).
|
|
2
|
+
#
|
|
3
|
+
# Викликається з `check-tauri.mjs` через `runConftestBatch` лише ПІСЛЯ того,
|
|
4
|
+
# як JS виявив маркер Tauri-проєкту (`src-tauri/` каталог, `tauri.conf.json`
|
|
5
|
+
# у будь-якому пакеті, або залежність `@tauri-apps/*`). Глобально у
|
|
6
|
+
# `lint-conftest` НЕ реєструється — інакше false-positive порушення на не-Tauri проєктах.
|
|
7
|
+
#
|
|
8
|
+
# Canonical (tauri.mdc): `recommendations` має містити обидва записи —
|
|
9
|
+
# - tauri-apps.tauri-vscode
|
|
10
|
+
# - rust-lang.rust-analyzer
|
|
11
|
+
#
|
|
12
|
+
# Структура каталогу збігається зі шляхом пакету (regal: directory-package-mismatch).
|
|
13
|
+
package tauri.vscode_extensions
|
|
14
|
+
|
|
15
|
+
import rego.v1
|
|
16
|
+
|
|
17
|
+
required_extensions := {"tauri-apps.tauri-vscode", "rust-lang.rust-analyzer"}
|
|
18
|
+
|
|
19
|
+
missing_extension_template := ".vscode/extensions.json: recommendations має містити %q (tauri.mdc)"
|
|
20
|
+
|
|
21
|
+
# Множина усіх записів `recommendations` (поза deny — performance/non-loop-expression).
|
|
22
|
+
recommendations_set := {r | some r in object.get(input, "recommendations", [])}
|
|
23
|
+
|
|
24
|
+
deny contains msg if {
|
|
25
|
+
some required in required_extensions
|
|
26
|
+
not required in recommendations_set
|
|
27
|
+
msg := sprintf(missing_extension_template, [required])
|
|
28
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Тести для `tauri.vscode_extensions`. Запуск:
|
|
2
|
+
# conftest verify -p npm/policy/tauri/vscode_extensions
|
|
3
|
+
package tauri.vscode_extensions_test
|
|
4
|
+
|
|
5
|
+
import rego.v1
|
|
6
|
+
|
|
7
|
+
import data.tauri.vscode_extensions
|
|
8
|
+
|
|
9
|
+
canonical := {"recommendations": [
|
|
10
|
+
"tauri-apps.tauri-vscode",
|
|
11
|
+
"rust-lang.rust-analyzer",
|
|
12
|
+
]}
|
|
13
|
+
|
|
14
|
+
test_allow_canonical if {
|
|
15
|
+
count(vscode_extensions.deny) == 0 with input as canonical
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
test_allow_with_additional_extensions if {
|
|
19
|
+
cfg := {"recommendations": [
|
|
20
|
+
"dbaeumer.vscode-eslint",
|
|
21
|
+
"tauri-apps.tauri-vscode",
|
|
22
|
+
"rust-lang.rust-analyzer",
|
|
23
|
+
"oxc.oxc-vscode",
|
|
24
|
+
]}
|
|
25
|
+
count(vscode_extensions.deny) == 0 with input as cfg
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
test_deny_missing_tauri if {
|
|
29
|
+
cfg := {"recommendations": ["rust-lang.rust-analyzer"]}
|
|
30
|
+
count(vscode_extensions.deny) > 0 with input as cfg
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
test_deny_missing_rust_analyzer if {
|
|
34
|
+
cfg := {"recommendations": ["tauri-apps.tauri-vscode"]}
|
|
35
|
+
count(vscode_extensions.deny) > 0 with input as cfg
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
test_deny_empty_recommendations if {
|
|
39
|
+
count(vscode_extensions.deny) > 0 with input as {"recommendations": []}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
test_deny_no_recommendations_field if {
|
|
43
|
+
count(vscode_extensions.deny) > 0 with input as {}
|
|
44
|
+
}
|