mova-claude-import 0.1.1

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.
Files changed (204) hide show
  1. package/.github/workflows/ci.yml +42 -0
  2. package/.github/workflows/release-dry-run.yml +40 -0
  3. package/.github/workflows/release-publish.yml +43 -0
  4. package/.tmp_test_control_apply/proj/.claude/agents/example_agent.md +3 -0
  5. package/.tmp_test_control_apply/proj/.claude/commands/example_command.md +3 -0
  6. package/.tmp_test_control_apply/proj/.claude/hooks/example_hook.sh +2 -0
  7. package/.tmp_test_control_apply/proj/.claude/output-styles/example_style.md +3 -0
  8. package/.tmp_test_control_apply/proj/.claude/settings.json +30 -0
  9. package/.tmp_test_control_apply/proj/.claude/settings.local.example.json +3 -0
  10. package/.tmp_test_control_apply/proj/.mcp.json +3 -0
  11. package/.tmp_test_control_apply/proj/CLAUDE.md +13 -0
  12. package/.tmp_test_control_apply/proj/MOVA.md +3 -0
  13. package/.tmp_test_control_check/proj/.mcp.json +1 -0
  14. package/.tmp_test_control_check/proj/CLAUDE.md +1 -0
  15. package/.tmp_test_control_prefill/out1/claude_control_profile_v0.json +114 -0
  16. package/.tmp_test_control_prefill/out1/prefill_report_v0.json +13 -0
  17. package/.tmp_test_control_prefill/out2/claude_control_profile_v0.json +114 -0
  18. package/.tmp_test_control_prefill/out2/prefill_report_v0.json +13 -0
  19. package/.tmp_test_overlay/proj/.claude/skills/a.md +1 -0
  20. package/.tmp_test_overlay/proj/.mcp.json +1 -0
  21. package/.tmp_test_overlay/proj/CLAUDE.md +1 -0
  22. package/.tmp_test_profile/proj/.claude/skills/a.md +1 -0
  23. package/.tmp_test_profile/proj/.mcp.json +1 -0
  24. package/.tmp_test_profile/proj/CLAUDE.md +1 -0
  25. package/.tmp_test_scaffold_apply/proj/.claude/agents/example_agent.md +3 -0
  26. package/.tmp_test_scaffold_apply/proj/.claude/commands/example_command.md +3 -0
  27. package/.tmp_test_scaffold_apply/proj/.claude/hooks/example_hook.sh +2 -0
  28. package/.tmp_test_scaffold_apply/proj/.claude/output-styles/example_style.md +3 -0
  29. package/.tmp_test_scaffold_apply/proj/.claude/settings.json +30 -0
  30. package/.tmp_test_scaffold_apply/proj/.claude/settings.local.example.json +3 -0
  31. package/.tmp_test_scaffold_apply/proj/.mcp.json +3 -0
  32. package/.tmp_test_scaffold_apply/proj/CLAUDE.md +13 -0
  33. package/.tmp_test_scaffold_apply/proj/MOVA.md +3 -0
  34. package/.tmp_test_strict/mova/claude_import/v0/VERSION.json +10 -0
  35. package/.tmp_test_strict/mova/claude_import/v0/episode_import_run.json +20 -0
  36. package/.tmp_test_strict/mova/claude_import/v0/import_manifest.json +20 -0
  37. package/.tmp_test_strict/mova/claude_import/v0/input_policy_report_v0.json +32 -0
  38. package/.tmp_test_zip/out1/.claude/agents/example_agent.md +3 -0
  39. package/.tmp_test_zip/out1/.claude/commands/example_command.md +3 -0
  40. package/.tmp_test_zip/out1/.claude/commands/mova_context.md +4 -0
  41. package/.tmp_test_zip/out1/.claude/commands/mova_lint.md +4 -0
  42. package/.tmp_test_zip/out1/.claude/commands/mova_proof.md +6 -0
  43. package/.tmp_test_zip/out1/.claude/hooks/example_hook.sh +2 -0
  44. package/.tmp_test_zip/out1/.claude/output-styles/example_style.md +3 -0
  45. package/.tmp_test_zip/out1/.claude/settings.json +30 -0
  46. package/.tmp_test_zip/out1/.claude/settings.local.example.json +3 -0
  47. package/.tmp_test_zip/out1/.claude/skills/a/SKILL.md +1 -0
  48. package/.tmp_test_zip/out1/.claude/skills/mova-control-v0/SKILL.md +11 -0
  49. package/.tmp_test_zip/out1/.claude/skills/mova-layer-v0/SKILL.md +8 -0
  50. package/.tmp_test_zip/out1/.mcp.json +3 -0
  51. package/.tmp_test_zip/out1/CLAUDE.md +4 -0
  52. package/.tmp_test_zip/out1/MOVA.md +10 -0
  53. package/.tmp_test_zip/out1/export.zip +0 -0
  54. package/.tmp_test_zip/out1/mova/claude_import/v0/VERSION.json +10 -0
  55. package/.tmp_test_zip/out1/mova/claude_import/v0/contracts/instruction_profile_v0.json +8 -0
  56. package/.tmp_test_zip/out1/mova/claude_import/v0/contracts/mcp_servers_v0.json +4 -0
  57. package/.tmp_test_zip/out1/mova/claude_import/v0/contracts/skills_catalog_v0.json +11 -0
  58. package/.tmp_test_zip/out1/mova/claude_import/v0/episode_import_run.json +80 -0
  59. package/.tmp_test_zip/out1/mova/claude_import/v0/export_manifest_v0.json +32 -0
  60. package/.tmp_test_zip/out1/mova/claude_import/v0/import_manifest.json +33 -0
  61. package/.tmp_test_zip/out1/mova/claude_import/v0/input_policy_report_v0.json +38 -0
  62. package/.tmp_test_zip/out1/mova/claude_import/v0/lint_report_v0.json +6 -0
  63. package/.tmp_test_zip/out1/mova/claude_import/v0/redaction_report.json +4 -0
  64. package/.tmp_test_zip/out2/.claude/agents/example_agent.md +3 -0
  65. package/.tmp_test_zip/out2/.claude/commands/example_command.md +3 -0
  66. package/.tmp_test_zip/out2/.claude/commands/mova_context.md +4 -0
  67. package/.tmp_test_zip/out2/.claude/commands/mova_lint.md +4 -0
  68. package/.tmp_test_zip/out2/.claude/commands/mova_proof.md +6 -0
  69. package/.tmp_test_zip/out2/.claude/hooks/example_hook.sh +2 -0
  70. package/.tmp_test_zip/out2/.claude/output-styles/example_style.md +3 -0
  71. package/.tmp_test_zip/out2/.claude/settings.json +30 -0
  72. package/.tmp_test_zip/out2/.claude/settings.local.example.json +3 -0
  73. package/.tmp_test_zip/out2/.claude/skills/a/SKILL.md +1 -0
  74. package/.tmp_test_zip/out2/.claude/skills/mova-control-v0/SKILL.md +11 -0
  75. package/.tmp_test_zip/out2/.claude/skills/mova-layer-v0/SKILL.md +8 -0
  76. package/.tmp_test_zip/out2/.mcp.json +3 -0
  77. package/.tmp_test_zip/out2/CLAUDE.md +4 -0
  78. package/.tmp_test_zip/out2/MOVA.md +10 -0
  79. package/.tmp_test_zip/out2/export.zip +0 -0
  80. package/.tmp_test_zip/out2/mova/claude_import/v0/VERSION.json +10 -0
  81. package/.tmp_test_zip/out2/mova/claude_import/v0/contracts/instruction_profile_v0.json +8 -0
  82. package/.tmp_test_zip/out2/mova/claude_import/v0/contracts/mcp_servers_v0.json +4 -0
  83. package/.tmp_test_zip/out2/mova/claude_import/v0/contracts/skills_catalog_v0.json +11 -0
  84. package/.tmp_test_zip/out2/mova/claude_import/v0/episode_import_run.json +80 -0
  85. package/.tmp_test_zip/out2/mova/claude_import/v0/export_manifest_v0.json +32 -0
  86. package/.tmp_test_zip/out2/mova/claude_import/v0/import_manifest.json +33 -0
  87. package/.tmp_test_zip/out2/mova/claude_import/v0/input_policy_report_v0.json +38 -0
  88. package/.tmp_test_zip/out2/mova/claude_import/v0/lint_report_v0.json +6 -0
  89. package/.tmp_test_zip/out2/mova/claude_import/v0/redaction_report.json +4 -0
  90. package/.tmp_test_zip/proj/.claude/skills/a.md +1 -0
  91. package/.tmp_test_zip/proj/.mcp.json +1 -0
  92. package/.tmp_test_zip/proj/CLAUDE.md +1 -0
  93. package/README.md +86 -0
  94. package/create_files.js +52 -0
  95. package/dist/anthropic_profile_v0.d.ts +2 -0
  96. package/dist/anthropic_profile_v0.js +66 -0
  97. package/dist/claude_profile_scaffold_v0.d.ts +2 -0
  98. package/dist/claude_profile_scaffold_v0.js +110 -0
  99. package/dist/cli.d.ts +1 -0
  100. package/dist/cli.js +163 -0
  101. package/dist/cli_entry.d.ts +1 -0
  102. package/dist/cli_entry.js +1 -0
  103. package/dist/control_apply_v0.d.ts +6 -0
  104. package/dist/control_apply_v0.js +86 -0
  105. package/dist/control_check_v0.d.ts +7 -0
  106. package/dist/control_check_v0.js +80 -0
  107. package/dist/control_contracts_v0.d.ts +8 -0
  108. package/dist/control_contracts_v0.js +17 -0
  109. package/dist/control_prefill_v0.d.ts +6 -0
  110. package/dist/control_prefill_v0.js +61 -0
  111. package/dist/export_zip_v0.d.ts +8 -0
  112. package/dist/export_zip_v0.js +79 -0
  113. package/dist/index.d.ts +30 -0
  114. package/dist/index.js +2 -0
  115. package/dist/init_v0.d.ts +7 -0
  116. package/dist/init_v0.js +47 -0
  117. package/dist/input_policy_v0.d.ts +26 -0
  118. package/dist/input_policy_v0.js +76 -0
  119. package/dist/lint_v0.d.ts +18 -0
  120. package/dist/lint_v0.js +131 -0
  121. package/dist/mova_overlay_v0.d.ts +14 -0
  122. package/dist/mova_overlay_v0.js +65 -0
  123. package/dist/mova_spec_bindings_v0.d.ts +5 -0
  124. package/dist/mova_spec_bindings_v0.js +5 -0
  125. package/dist/quality_v0.d.ts +1 -0
  126. package/dist/quality_v0.js +223 -0
  127. package/dist/redaction.d.ts +14 -0
  128. package/dist/redaction.js +52 -0
  129. package/dist/run_import.d.ts +2 -0
  130. package/dist/run_import.js +479 -0
  131. package/dist/stable_json.d.ts +1 -0
  132. package/dist/stable_json.js +15 -0
  133. package/docs/ANTHROPIC_PROFILE_v0.md +38 -0
  134. package/docs/COMPATIBILITY_MATRIX.md +25 -0
  135. package/docs/CONTROL_PROFILE_GUIDE_v0.md +40 -0
  136. package/docs/IMPORT_SPEC_v0.md +30 -0
  137. package/docs/MOVA_SPEC_BINDINGS.json +21 -0
  138. package/docs/MOVA_SPEC_BINDINGS.md +11 -0
  139. package/docs/OPERATOR_GUIDE_v0.md +43 -0
  140. package/docs/SECURITY_MODEL_v0.md +20 -0
  141. package/examples/control_profile_min.json +37 -0
  142. package/examples/control_profile_standard.json +81 -0
  143. package/examples/control_profile_strict.json +68 -0
  144. package/fixtures/neg/bad_skill_structure/.claude/skills/bad/README.md +3 -0
  145. package/fixtures/neg/bad_skill_structure/CLAUDE.md +3 -0
  146. package/fixtures/neg/local_settings_present/.claude/settings.local.json +3 -0
  147. package/fixtures/neg/local_settings_present/.claude/skills/alpha/SKILL.md +6 -0
  148. package/fixtures/neg/local_settings_present/CLAUDE.md +3 -0
  149. package/fixtures/neg/secret_leak/.claude/skills/alpha/SKILL.md +6 -0
  150. package/fixtures/neg/secret_leak/.mcp.json +3 -0
  151. package/fixtures/neg/secret_leak/CLAUDE.md +3 -0
  152. package/fixtures/neg/strict_denied_local/.claude/settings.local.json +3 -0
  153. package/fixtures/neg/strict_denied_local/CLAUDE.md +3 -0
  154. package/fixtures/pos/basic/.claude/skills/alpha/SKILL.md +8 -0
  155. package/fixtures/pos/basic/.mcp.json +3 -0
  156. package/fixtures/pos/basic/CLAUDE.md +3 -0
  157. package/fixtures/pos/control_basic_project/.mcp.json +3 -0
  158. package/fixtures/pos/control_basic_project/CLAUDE.md +3 -0
  159. package/fixtures/pos/control_profile_filled/claude_control_profile_v0.json +18 -0
  160. package/fixtures/pos/full_scaffold_roundtrip/README.md +1 -0
  161. package/package.json +39 -0
  162. package/schemas/claude_control/v0/ds/ds.claude_control_mapping_v0.json +227 -0
  163. package/schemas/claude_control/v0/ds/ds.claude_control_profile_v0.json +114 -0
  164. package/schemas/claude_control/v0/env/env.claude_control_apply_v0.json +170 -0
  165. package/schemas/claude_control/v0/env/env.claude_control_import_prefill_v0.json +171 -0
  166. package/schemas/claude_control/v0/global/global.claude_control_precedence_v0.json +58 -0
  167. package/schemas/claude_control/v0/global/global.claude_control_vocab_v0.json +98 -0
  168. package/schemas/ds.claude_import.instruction_profile_v0.schema.json +31 -0
  169. package/schemas/ds.claude_import.mcp_servers_v0.schema.json +47 -0
  170. package/schemas/ds.claude_import.skills_catalog_v0.schema.json +48 -0
  171. package/src/anthropic_profile_v0.ts +68 -0
  172. package/src/claude_profile_scaffold_v0.ts +117 -0
  173. package/src/cli.ts +160 -0
  174. package/src/cli_entry.ts +1 -0
  175. package/src/control_apply_v0.ts +108 -0
  176. package/src/control_check_v0.ts +98 -0
  177. package/src/control_contracts_v0.ts +26 -0
  178. package/src/control_prefill_v0.ts +74 -0
  179. package/src/export_zip_v0.ts +90 -0
  180. package/src/index.ts +29 -0
  181. package/src/init_v0.ts +59 -0
  182. package/src/input_policy_v0.ts +103 -0
  183. package/src/lint_v0.ts +151 -0
  184. package/src/mova_overlay_v0.ts +79 -0
  185. package/src/mova_spec_bindings_v0.ts +5 -0
  186. package/src/quality_v0.ts +264 -0
  187. package/src/redaction.ts +63 -0
  188. package/src/run_import.ts +526 -0
  189. package/src/stable_json.ts +15 -0
  190. package/test/control_apply_apply.test.js +40 -0
  191. package/test/control_check_preview.test.js +38 -0
  192. package/test/control_prefill.test.js +30 -0
  193. package/test/demo_v0_smoke.test.js +37 -0
  194. package/test/export_zip_determinism.test.js +41 -0
  195. package/test/import_determinism.test.js +53 -0
  196. package/test/init_v0.test.js +37 -0
  197. package/test/overlay_v0_output.test.js +38 -0
  198. package/test/profile_v0_output.test.js +44 -0
  199. package/test/scaffold_v0_output.test.js +64 -0
  200. package/test/strict_input_policy.test.js +45 -0
  201. package/tools/demo_v0.mjs +98 -0
  202. package/tools/deps_audit_v0.mjs +123 -0
  203. package/tools/write_mova_spec_bindings_v0.mjs +122 -0
  204. package/tsconfig.json +13 -0
@@ -0,0 +1,114 @@
1
+ {
2
+ "kind": "ds",
3
+ "id": "ds.claude_control_profile_v0",
4
+ "version": "0.1.0",
5
+ "title": "Claude Control Profile v0",
6
+ "mode": "report_only",
7
+ "notes": [
8
+ "Единая точка управления контролем Claude Code + MOVA слой наблюдаемости.",
9
+ "По умолчанию НЕ ломает работу: формирует отчёты и подсказки. Жёсткое применение/запреты включаются явно пользователем.",
10
+ "Этот профиль можно заполнить вручную или получить prefill через импорт существующей папки Claude."
11
+ ],
12
+ "anthropic": {
13
+ "scopes_enabled": {
14
+ "managed": false,
15
+ "user": true,
16
+ "project": true,
17
+ "local": true
18
+ },
19
+ "permissions": {
20
+ "description": "Правила allow/deny (в стиле Claude Code) для действий и инструментов.",
21
+ "allow": [],
22
+ "deny": [],
23
+ "behavior": {
24
+ "on_conflict": "deny_wins",
25
+ "on_unknown": "report_only"
26
+ }
27
+ },
28
+ "mcp": {
29
+ "description": "Подключения MCP серверов и правила по переменным окружения.",
30
+ "servers": {},
31
+ "env_expansion_policy": {
32
+ "require_all_vars": false,
33
+ "allow_defaults_syntax": true,
34
+ "on_missing_var": "report_only"
35
+ }
36
+ },
37
+ "plugins": {
38
+ "description": "Политика использования плагинов/команд. На v0 — только реестр намерений и отчёты.",
39
+ "enable": true,
40
+ "allowed_plugin_ids": [],
41
+ "denied_plugin_ids": [],
42
+ "behavior": {
43
+ "on_unknown": "report_only"
44
+ }
45
+ },
46
+ "hooks": {
47
+ "description": "Крючки (hooks) Claude Code, если используются в проекте/плагинах.",
48
+ "enable": true,
49
+ "definitions": [],
50
+ "behavior": {
51
+ "on_invalid_hook": "report_only"
52
+ }
53
+ },
54
+ "claude_md": {
55
+ "description": "Политика вставки управляющего блока MOVA и позиционирование его в CLAUDE.md.",
56
+ "inject_control_entry": true,
57
+ "marker": "<!-- MOVA_CONTROL_ENTRY_V0 -->",
58
+ "paths": {
59
+ "project_primary": "CLAUDE.md",
60
+ "project_alt": ".claude/CLAUDE.md",
61
+ "local": "CLAUDE.local.md"
62
+ }
63
+ }
64
+ },
65
+ "mova": {
66
+ "overlay": {
67
+ "description": "MOVA Control Overlay — добавляет понятный блок управления и ссылки на отчёты.",
68
+ "emit": true
69
+ },
70
+ "observability": {
71
+ "description": "Артефакты наблюдаемости и доказательности. Включены по умолчанию.",
72
+ "emit_version_anchor": true,
73
+ "emit_manifest": true,
74
+ "emit_policy_report": true,
75
+ "emit_apply_report": true,
76
+ "emit_quality_report": true,
77
+ "artifact_root": "mova/claude_import/v0"
78
+ },
79
+ "export": {
80
+ "description": "Экспорт zip для передачи/архивации результата.",
81
+ "emit_zip": false,
82
+ "zip_name": "export.zip",
83
+ "emit_export_manifest": true
84
+ },
85
+ "premium": {
86
+ "description": "Премиум-блоки по умолчанию выключены. Включаются пользователем, если он подключает соответствующие пакеты/дверь.",
87
+ "tool_door": {
88
+ "enabled": false,
89
+ "policy_profile_id": "",
90
+ "endpoint": "",
91
+ "auth_ref": ""
92
+ },
93
+ "proofkits": {
94
+ "enabled": false,
95
+ "selected": []
96
+ }
97
+ }
98
+ },
99
+ "apply": {
100
+ "description": "Настройки операции apply (разнос из профиля в файлы Claude Code).",
101
+ "default_apply_mode": "preview",
102
+ "default_target": "project_only",
103
+ "backup_before_write": true,
104
+ "write_scopes": {
105
+ "user": false,
106
+ "project": true,
107
+ "local": false
108
+ },
109
+ "behavior": {
110
+ "on_unwritable_target": "report_only",
111
+ "on_parse_error": "report_only"
112
+ }
113
+ }
114
+ }
@@ -0,0 +1,170 @@
1
+ {
2
+ "kind": "env",
3
+ "id": "env.claude_control_apply_v0",
4
+ "version": "0.1.0",
5
+ "title": "Claude Control Apply v0",
6
+ "intent": {
7
+ "goal": "Разнести значения из ds.claude_control_profile_v0 по файлам Claude Code согласно ds.claude_control_mapping_v0, не ломая рабочий профиль пользователя.",
8
+ "principles": [
9
+ "По умолчанию безопасно: preview (без записи).",
10
+ "Никаких 'строгих отказов' для обычного пользователя: ошибки превращаются в отчёты, а не в блокировку.",
11
+ "Всегда пишем наблюдаемость: apply_report + policy_report + manifest."
12
+ ]
13
+ },
14
+ "inputs": {
15
+ "profile_ref": {
16
+ "description": "Путь к файлу control profile (DS).",
17
+ "path": "mova/ds/control_profile.json"
18
+ },
19
+ "mapping_ref": {
20
+ "description": "Путь к файлу mapping (DS).",
21
+ "path": "mova/ds/control_mapping.json"
22
+ },
23
+ "workspace": {
24
+ "description": "Корень проекта Claude Code (где лежат CLAUDE.md/.claude/.mcp.json).",
25
+ "path": "."
26
+ },
27
+ "apply_mode": {
28
+ "description": "preview | write | write_with_backup. preview = только отчёт/дифф.",
29
+ "value": "preview"
30
+ },
31
+ "apply_target": {
32
+ "description": "Куда разрешено писать: project_only | user_only | local_only | project_and_user | project_and_local | all.",
33
+ "value": "project_only"
34
+ },
35
+ "write_scopes": {
36
+ "description": "Явный список областей, куда разрешена запись. По умолчанию только project.",
37
+ "value": ["project"]
38
+ },
39
+ "backup": {
40
+ "description": "Настройки резервных копий (только для write_with_backup).",
41
+ "enabled": true,
42
+ "dir": "mova/claude_import/v0/backups",
43
+ "strategy": "copy"
44
+ },
45
+ "policy": {
46
+ "description": "Политика применения: что считаем опасным и как реагируем. В v0: только report_only по умолчанию.",
47
+ "default_behavior": "report_only",
48
+ "deny_patterns": [
49
+ "*/.env",
50
+ "*/**/*.pem",
51
+ "*/**/*secret*",
52
+ "*/**/*token*"
53
+ ],
54
+ "allow_paths": [
55
+ "CLAUDE.md",
56
+ ".claude/settings.json",
57
+ ".claude/settings.local.json",
58
+ ".mcp.json",
59
+ "mova/**"
60
+ ],
61
+ "on_denied_write": "report_only",
62
+ "on_parse_error": "report_only",
63
+ "on_missing_target": "report_only"
64
+ },
65
+ "determinism": {
66
+ "description": "Правила детерминированности артефактов.",
67
+ "stable_json": true,
68
+ "stable_sort_keys": true,
69
+ "stable_newlines": "lf"
70
+ }
71
+ },
72
+ "outputs": {
73
+ "result": {
74
+ "ok": true,
75
+ "outcome_code": "OK",
76
+ "summary": "",
77
+ "exit_code_hint": 0,
78
+ "writes_performed": false,
79
+ "changed_files": [],
80
+ "warnings": [],
81
+ "denies": [],
82
+ "errors": []
83
+ },
84
+ "artifacts": {
85
+ "artifact_root": "mova/claude_import/v0",
86
+ "apply_report": "mova/claude_import/v0/reports/apply_report_v0.json",
87
+ "policy_report": "mova/claude_import/v0/reports/input_policy_report_v0.json",
88
+ "diff_summary": "mova/claude_import/v0/reports/diff_summary_v0.json",
89
+ "manifest": "mova/claude_import/v0/reports/control_manifest_v0.json",
90
+ "backup_dir": "mova/claude_import/v0/backups"
91
+ }
92
+ },
93
+ "semantics": {
94
+ "outcome_codes": [
95
+ {
96
+ "code": "OK",
97
+ "meaning": "Применение успешно (или preview успешно). Нет ошибок, возможны предупреждения."
98
+ },
99
+ {
100
+ "code": "WARN",
101
+ "meaning": "Частично применено/проверено: есть предупреждения (например, неизвестные ключи), но профиль остаётся рабочим."
102
+ },
103
+ {
104
+ "code": "PARTIAL",
105
+ "meaning": "Некоторые цели применены, некоторые пропущены из-за отсутствия файлов/парсинга/конфликтов; всё отражено в отчёте."
106
+ },
107
+ {
108
+ "code": "DENY",
109
+ "meaning": "Были попытки записать в запрещённые места; запись не выполнена. Профиль не сломан."
110
+ },
111
+ {
112
+ "code": "ERROR",
113
+ "meaning": "Внутренняя ошибка инструмента. Даже в этом случае должны быть отчёты с деталями."
114
+ }
115
+ ],
116
+ "exit_code_hints": [
117
+ {
118
+ "exit_code": 0,
119
+ "when": "OK/WARN/PARTIAL/DENY в обычном пользовательском режиме",
120
+ "note": "Обычный режим не должен ломать пайплайн пользователя; проблемы = отчёты."
121
+ },
122
+ {
123
+ "exit_code": 1,
124
+ "when": "ERROR",
125
+ "note": "Системная ошибка выполнения инструмента."
126
+ },
127
+ {
128
+ "exit_code": 2,
129
+ "when": "CI strict-mode (не пользователь)",
130
+ "note": "Резервируем для CI-гейтов, если позже понадобится жёсткое падение."
131
+ }
132
+ ]
133
+ },
134
+ "evidence": {
135
+ "must_write": [
136
+ "apply_report_v0.json",
137
+ "input_policy_report_v0.json",
138
+ "control_manifest_v0.json"
139
+ ],
140
+ "should_write": ["diff_summary_v0.json"],
141
+ "apply_report_fields": [
142
+ "run_id",
143
+ "timestamp_utc",
144
+ "apply_mode",
145
+ "apply_target",
146
+ "write_scopes",
147
+ "mapping_version",
148
+ "profile_version",
149
+ "planned_changes",
150
+ "writes_performed",
151
+ "changed_files",
152
+ "skipped",
153
+ "warnings",
154
+ "denies",
155
+ "errors"
156
+ ]
157
+ },
158
+ "compat": {
159
+ "requires": {
160
+ "global_vocab": "global.claude_control_vocab_v0",
161
+ "global_precedence": "global.claude_control_precedence_v0",
162
+ "ds_profile": "ds.claude_control_profile_v0",
163
+ "ds_mapping": "ds.claude_control_mapping_v0"
164
+ },
165
+ "notes": [
166
+ "Этот env не требует mova-spec на уровне данных, но позже может быть привязан к каноническим схемам.",
167
+ "Дефолтная политика: report_only, чтобы инструмент не блокировал работу пользователя."
168
+ ]
169
+ }
170
+ }
@@ -0,0 +1,171 @@
1
+ {
2
+ "kind": "env",
3
+ "id": "env.claude_control_import_prefill_v0",
4
+ "version": "0.1.0",
5
+ "title": "Claude Control Import Prefill v0",
6
+ "intent": {
7
+ "goal": "Считать существующие настройки Claude Code (проект/локально/пользователь) и заполнить ds.claude_control_profile_v0 (prefill), не меняя исходные файлы.",
8
+ "principles": [
9
+ "Никаких side-effects: только чтение + детерминированные отчёты.",
10
+ "Без 'ломающих' режимов по умолчанию: максимум предупреждения и пропуски.",
11
+ "Всегда выдаём понятные артефакты: prefill_profile + prefill_report + policy_report."
12
+ ]
13
+ },
14
+ "inputs": {
15
+ "workspace": {
16
+ "description": "Корень проекта (где лежит CLAUDE.md/.claude/.mcp.json).",
17
+ "path": "."
18
+ },
19
+ "read_scopes": {
20
+ "description": "Какие области читать: project | local | user. По умолчанию читаем только project.",
21
+ "value": ["project"]
22
+ },
23
+ "include_local": {
24
+ "description": "Разрешить чтение локальных настроек (например, settings.local.json).",
25
+ "value": false
26
+ },
27
+ "include_user": {
28
+ "description": "Разрешить чтение пользовательских настроек (если они существуют и доступны).",
29
+ "value": false
30
+ },
31
+ "source_files": {
32
+ "description": "Какие файлы считаем источниками для prefill.",
33
+ "value": {
34
+ "claude_md_project": "CLAUDE.md",
35
+ "claude_settings_project": ".claude/settings.json",
36
+ "claude_settings_local": ".claude/settings.local.json",
37
+ "mcp_project": ".mcp.json"
38
+ }
39
+ },
40
+ "policy": {
41
+ "description": "Политика чтения и редактирования при импорте: мы ничего не записываем в исходники, но должны избегать захвата чувствительных данных.",
42
+ "default_behavior": "report_only",
43
+ "deny_read_patterns": [
44
+ "*/.env",
45
+ "*/**/*.pem",
46
+ "*/**/*secret*",
47
+ "*/**/*token*",
48
+ "*/**/*key*"
49
+ ],
50
+ "allowed_source_paths": [
51
+ "CLAUDE.md",
52
+ ".claude/settings.json",
53
+ ".claude/settings.local.json",
54
+ ".mcp.json"
55
+ ],
56
+ "redaction": {
57
+ "enabled": true,
58
+ "modes": ["inline_token", "key_value", "json_recursive"],
59
+ "hash_alg": "sha256",
60
+ "never_store_values": true
61
+ },
62
+ "on_denied_read": "report_only",
63
+ "on_parse_error": "report_only",
64
+ "on_missing_file": "report_only"
65
+ },
66
+ "determinism": {
67
+ "description": "Правила детерминированности итогов и артефактов.",
68
+ "stable_json": true,
69
+ "stable_sort_keys": true,
70
+ "stable_newlines": "lf",
71
+ "run_id_source": "input_hash_only"
72
+ }
73
+ },
74
+ "outputs": {
75
+ "result": {
76
+ "ok": true,
77
+ "outcome_code": "OK",
78
+ "summary": "",
79
+ "exit_code_hint": 0,
80
+ "prefill_written": false,
81
+ "sources_read": [],
82
+ "warnings": [],
83
+ "denies": [],
84
+ "errors": []
85
+ },
86
+ "artifacts": {
87
+ "artifact_root": "mova/claude_import/v0",
88
+ "prefill_profile": "mova/claude_import/v0/prefill/control_profile_prefill_v0.json",
89
+ "prefill_report": "mova/claude_import/v0/reports/prefill_report_v0.json",
90
+ "policy_report": "mova/claude_import/v0/reports/input_policy_report_v0.json",
91
+ "manifest": "mova/claude_import/v0/reports/prefill_manifest_v0.json",
92
+ "redaction_report": "mova/claude_import/v0/reports/redaction_report_v0.json"
93
+ }
94
+ },
95
+ "semantics": {
96
+ "what_is_prefill": [
97
+ "prefill не 'переписывает' профиль пользователя — он создаёт наш единый control profile из того, что удалось безопасно прочитать.",
98
+ "всё, что не удалось прочитать или нельзя хранить, отражается как WARNING/DENY в отчёте."
99
+ ],
100
+ "outcome_codes": [
101
+ {
102
+ "code": "OK",
103
+ "meaning": "Источники прочитаны, prefill профиль сформирован, критических проблем нет."
104
+ },
105
+ {
106
+ "code": "WARN",
107
+ "meaning": "Профиль сформирован, но есть предупреждения (неизвестные поля/частичные данные)."
108
+ },
109
+ {
110
+ "code": "PARTIAL",
111
+ "meaning": "Часть источников отсутствует/не распарсилась; prefill неполный, но пригоден как старт."
112
+ },
113
+ {
114
+ "code": "DENY",
115
+ "meaning": "Некоторые источники/фрагменты попали под deny_read; они не использованы, всё описано в отчёте."
116
+ },
117
+ {
118
+ "code": "ERROR",
119
+ "meaning": "Внутренняя ошибка инструмента. Даже в этом случае должны быть отчёты."
120
+ }
121
+ ],
122
+ "exit_code_hints": [
123
+ {
124
+ "exit_code": 0,
125
+ "when": "OK/WARN/PARTIAL/DENY",
126
+ "note": "Импорт prefill не должен ломать работу пользователя."
127
+ },
128
+ {
129
+ "exit_code": 1,
130
+ "when": "ERROR",
131
+ "note": "Системная ошибка выполнения."
132
+ }
133
+ ]
134
+ },
135
+ "evidence": {
136
+ "must_write": [
137
+ "prefill_report_v0.json",
138
+ "input_policy_report_v0.json",
139
+ "prefill_manifest_v0.json"
140
+ ],
141
+ "should_write": [
142
+ "control_profile_prefill_v0.json",
143
+ "redaction_report_v0.json"
144
+ ],
145
+ "prefill_report_fields": [
146
+ "run_id",
147
+ "timestamp_utc",
148
+ "workspace",
149
+ "read_scopes",
150
+ "sources_attempted",
151
+ "sources_read",
152
+ "extracted_fields",
153
+ "unknown_fields",
154
+ "warnings",
155
+ "denies",
156
+ "errors"
157
+ ]
158
+ },
159
+ "compat": {
160
+ "requires": {
161
+ "global_vocab": "global.claude_control_vocab_v0",
162
+ "global_precedence": "global.claude_control_precedence_v0",
163
+ "ds_profile": "ds.claude_control_profile_v0",
164
+ "ds_mapping": "ds.claude_control_mapping_v0"
165
+ },
166
+ "notes": [
167
+ "Prefill не требует apply-механики. Это подготовка данных для последующего apply.",
168
+ "Дефолт: читаем только project scope. local/user — только по явному выбору пользователя."
169
+ ]
170
+ }
171
+ }
@@ -0,0 +1,58 @@
1
+ {
2
+ "kind": "global",
3
+ "id": "global.claude_control_precedence_v0",
4
+ "version": "0.1.0",
5
+ "title": "Claude Code Settings Precedence v0",
6
+ "notes": [
7
+ "Нормативный порядок приоритетов областей (scopes) для чтения/объединения настроек.",
8
+ "Используется инструментом import/check/apply для объяснений и детерминированного маппинга."
9
+ ],
10
+ "settings": {
11
+ "source_of_truth": "mova_control_profile",
12
+ "scopes_precedence_order": ["managed", "user", "project", "local"],
13
+ "merge_strategy_default": "override_last",
14
+ "conflict_rules": [
15
+ {
16
+ "when": "permissions.deny intersects permissions.allow",
17
+ "strategy": "deny_wins",
18
+ "note": "Если одно и то же действие одновременно разрешено и запрещено — запрет сильнее."
19
+ }
20
+ ],
21
+ "paths_reference": {
22
+ "settings": {
23
+ "user": "~/.claude/settings.json",
24
+ "project": ".claude/settings.json",
25
+ "local": ".claude/settings.local.json",
26
+ "managed_windows": "C:\\\\Program Files\\\\ClaudeCode\\\\managed-settings.json",
27
+ "managed_macos": "/Library/Application Support/ClaudeCode/managed-settings.json",
28
+ "managed_linux": "/etc/claude-code/managed-settings.json"
29
+ },
30
+ "mcp": {
31
+ "project": ".mcp.json",
32
+ "user_or_local": "~/.claude.json",
33
+ "managed_windows": "C:\\\\Program Files\\\\ClaudeCode\\\\managed-mcp.json",
34
+ "managed_macos": "/Library/Application Support/ClaudeCode/managed-mcp.json",
35
+ "managed_linux": "/etc/claude-code/managed-mcp.json"
36
+ },
37
+ "claude_md": {
38
+ "project_primary": "CLAUDE.md",
39
+ "project_alt": ".claude/CLAUDE.md",
40
+ "local": "CLAUDE.local.md"
41
+ }
42
+ }
43
+ },
44
+ "explanations": [
45
+ {
46
+ "topic": "Почему managed выше всех",
47
+ "text": "Организационные настройки должны иметь высший приоритет, чтобы администратор мог навязать минимальные ограничения."
48
+ },
49
+ {
50
+ "topic": "Почему local ниже project",
51
+ "text": "Локальные настройки предназначены для машины разработчика и не должны неожиданно менять проектный контракт для команды."
52
+ },
53
+ {
54
+ "topic": "Что значит source_of_truth",
55
+ "text": "После внедрения MOVA контрольный профиль становится единой точкой правды; остальные файлы — производные артефакты и совместимость."
56
+ }
57
+ ]
58
+ }
@@ -0,0 +1,98 @@
1
+ {
2
+ "kind": "global",
3
+ "id": "global.claude_control_vocab_v0",
4
+ "version": "0.1.0",
5
+ "title": "Claude Code Control Vocabulary v0",
6
+ "notes": [
7
+ "Словарь терминов и перечисления для контрольного слоя Claude Code + MOVA overlay.",
8
+ "Используется как единый источник семантики для DS/Env слоев."
9
+ ],
10
+ "enums": {
11
+ "scope": {
12
+ "description": "Где действует настройка/контроль.",
13
+ "values": ["user", "project", "local", "managed"]
14
+ },
15
+ "control_surface": {
16
+ "description": "Точка контроля в Claude Code / интеграциях.",
17
+ "values": [
18
+ "claude_md",
19
+ "settings",
20
+ "permissions",
21
+ "mcp",
22
+ "plugins",
23
+ "hooks",
24
+ "tools",
25
+ "filesystem",
26
+ "network",
27
+ "logging",
28
+ "export"
29
+ ]
30
+ },
31
+ "apply_mode": {
32
+ "description": "Режим применения изменений к файлам Claude Code.",
33
+ "values": ["preview", "write", "write_with_backup"]
34
+ },
35
+ "default_behavior": {
36
+ "description": "Поведение по умолчанию при нарушениях/неполноте/конфликтах.",
37
+ "values": ["report_only", "warn", "enforce"]
38
+ },
39
+ "outcome_code": {
40
+ "description": "Нормализованный код исхода шага/операции.",
41
+ "values": ["OK", "WARN", "PARTIAL", "DENY", "ERROR"]
42
+ },
43
+ "severity": {
44
+ "description": "Важность события/правила/нарушения.",
45
+ "values": ["info", "warn", "high"]
46
+ },
47
+ "artifact_kind": {
48
+ "description": "Тип артефакта наблюдаемости.",
49
+ "values": [
50
+ "control_profile",
51
+ "mapping",
52
+ "manifest",
53
+ "import_report",
54
+ "apply_report",
55
+ "policy_report",
56
+ "check_report",
57
+ "quality_report",
58
+ "episode",
59
+ "export_zip",
60
+ "diff_summary",
61
+ "backup"
62
+ ]
63
+ },
64
+ "merge_strategy": {
65
+ "description": "Как объединять значения из разных областей (scopes).",
66
+ "values": ["override_last", "deny_wins", "allow_wins"]
67
+ },
68
+ "apply_target": {
69
+ "description": "Какие файлы/области разрешено изменять при apply.",
70
+ "values": [
71
+ "project_only",
72
+ "user_only",
73
+ "local_only",
74
+ "project_and_user",
75
+ "project_and_local",
76
+ "all"
77
+ ]
78
+ }
79
+ },
80
+ "glossary": [
81
+ {
82
+ "term": "Control Profile",
83
+ "definition": "Единый файл настроек контроля. Пользователь заполняет один раз; из него генерируются/обновляются файлы Claude Code."
84
+ },
85
+ {
86
+ "term": "Import Prefill",
87
+ "definition": "Импорт существующих настроек Claude Code в Control Profile (перенос значений без применения изменений обратно)."
88
+ },
89
+ {
90
+ "term": "Apply",
91
+ "definition": "Операция разноса значений из Control Profile в конкретные файлы и места Claude Code (settings, mcp и т.д.)."
92
+ },
93
+ {
94
+ "term": "Observability",
95
+ "definition": "Артефакты и отчёты: что было применено, что запрещено, где конфликт, какие версии и доказательства."
96
+ }
97
+ ]
98
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "properties": {
3
+ "profile_version": {
4
+ "type": "string",
5
+ "const": "v0"
6
+ },
7
+ "anchors": {
8
+ "properties": {
9
+ "mova_entry": {
10
+ "type": "string"
11
+ },
12
+ "normalized_project": {
13
+ "type": "string"
14
+ }
15
+ },
16
+ "additionalProperties": false,
17
+ "type": "object"
18
+ },
19
+ "claude_md": {
20
+ "type": "string"
21
+ }
22
+ },
23
+ "type": "object",
24
+ "$id": "ds.claude_import.instruction_profile_v0",
25
+ "required": [
26
+ "profile_version",
27
+ "claude_md"
28
+ ],
29
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
30
+ "additionalProperties": false
31
+ }