-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsumd.json
More file actions
156 lines (156 loc) · 151 KB
/
Copy pathsumd.json
File metadata and controls
156 lines (156 loc) · 151 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
{
"project_name": "redeploy",
"description": "SUMD - Structured Unified Markdown Descriptor for AI-aware project refactorization",
"sections": [
{
"name": "contents",
"type": "unknown",
"content": "- [Metadata](#metadata)\n- [Architecture](#architecture)\n- [Workflows](#workflows)\n- [Quality Pipeline (`pyqual.yaml`)](#quality-pipeline-pyqualyaml)\n- [Dependencies](#dependencies)\n- [Source Map](#source-map)\n- [Call Graph](#call-graph)\n- [Refactoring Analysis](#refactoring-analysis)\n- [Intent](#intent)",
"level": 2
},
{
"name": "metadata",
"type": "metadata",
"content": "- **name**: `redeploy`\n- **version**: `0.2.55`\n- **python_requires**: `>=3.11`\n- **ai_model**: `openrouter/qwen/qwen3-coder-next`\n- **ecosystem**: SUMD + DOQL + testql + taskfile\n- **generated_from**: pyproject.toml, Makefile, app.doql.less, pyqual.yaml, goal.yaml, .env.example, src(16 mod), project/(6 analysis files)",
"level": 2
},
{
"name": "architecture",
"type": "architecture",
"content": "```\nSUMD (description) → DOQL/source (code) → taskfile (automation) → testql (verification)\n```",
"level": 2
},
{
"name": "# doql application declaration (`app.doql.less`)",
"type": "unknown",
"content": "```less markpact:doql path=app.doql.less\napp {\n name: redeploy;\n version: 0.2.55;\n}\n\napp {\n name: redeploy;\n version: 0.2.55;\n}\n\napp {\n name: redeploy;\n version: 0.2.55;\n}\n\n// LESS format — define @variables here as needed\n// Generated by sumd for redeploy\n\napp {\n name: redeploy;\n version: 0.2.55;\n}\n\ninterface[type=\"cli\"] {\n framework: click;\n}\n\nworkflow[name=\"install\"] {\n trigger: manual;\n step-1: run cmd=pip install -e .;\n}\n\nworkflow[name=\"dev\"] {\n trigger: manual;\n step-1: run cmd=pip install -e \".[dev]\";\n}\n\nworkflow[name=\"build\"] {\n trigger: manual;\n step-1: run cmd=python -m build;\n}\n\nworkflow[name=\"test\"] {\n trigger: manual;\n step-1: run cmd=pytest -q;\n}\n\nworkflow[name=\"lint\"] {\n trigger: manual;\n step-1: run cmd=ruff check .;\n}\n\nworkflow[name=\"fmt\"] {\n trigger: manual;\n step-1: run cmd=ruff format .;\n}\n\nworkflow[name=\"clean\"] {\n trigger: manual;\n step-1: run cmd=rm -rf build/ dist/ *.egg-info;\n}\n\nworkflow[name=\"help\"] {\n trigger: manual;\n step-1: run cmd=task --list;\n}\n\ndeploy {\n target: pip;\n}\n\nenvironment[name=\"local\"] {\n runtime: python;\n}\n```",
"level": 2
},
{
"name": "# source modules",
"type": "unknown",
"content": "- `redeploy.audit`\n- `redeploy.cli`\n- `redeploy.data_sync`\n- `redeploy.discovery`\n- `redeploy.fleet`\n- `redeploy.heal`\n- `redeploy.mcp_server`\n- `redeploy.models`\n- `redeploy.observe`\n- `redeploy.parse`\n- `redeploy.patterns`\n- `redeploy.schema`\n- `redeploy.spec_loader`\n- `redeploy.ssh`\n- `redeploy.verify`\n- `redeploy.version`",
"level": 2
},
{
"name": "workflows",
"type": "workflows",
"content": "",
"level": 2
},
{
"name": "quality pipeline (`pyqual.yaml`)",
"type": "unknown",
"content": "```yaml markpact:pyqual path=pyqual.yaml\npipeline:\n name: redeploy-quality\n\n metrics:\n cc_max: 15\n critical_max: 80\n\n stages:\n - name: analyze\n tool: code2llm-filtered\n\n - name: validate\n tool: vallm-filtered\n\n - name: prefact\n tool: prefact\n optional: true\n when: any_stage_fail\n timeout: 900\n\n - name: test\n tool: pytest\n timeout: 600\n\n loop:\n max_iterations: 3\n on_fail: report\n ticket_backends:\n - markdown\n\n env:\n LLM_MODEL: openrouter/qwen/qwen3-coder-next\n```",
"level": 2
},
{
"name": "dependencies",
"type": "dependencies",
"content": "",
"level": 2
},
{
"name": "# runtime",
"type": "unknown",
"content": "```text markpact:deps python\npydantic>=2.0\npyyaml>=6.0\nmarkdown-it-py>=3.0\nclick>=8.0\nloguru>=0.7\nparamiko>=3.0\nhttpx>=0.25\nrich>=13.0\njmespath>=1.0\ngoal>=2.1.0\ncosts>=0.1.20\npfix>=0.1.60\n```",
"level": 2
},
{
"name": "# development",
"type": "unknown",
"content": "```text markpact:deps python scope=dev\npytest>=8.0\nruff>=0.4\ngoal>=2.1.0\ncosts>=0.1.20\npfix>=0.1.60\n```",
"level": 2
},
{
"name": "source map",
"type": "unknown",
"content": "*Top 5 modules by symbol density — signatures for LLM orientation.*",
"level": 2
},
{
"name": "# `redeploy.models` (`redeploy/models.py`)",
"type": "unknown",
"content": "```python\ndef _migrate_legacy_post_deploy(raw) # CC=5, fan=6\nclass ConflictSeverity:\nclass StepAction:\nclass StepStatus:\nclass DeployStrategy:\nclass PersistedModel: # Mixin for models that can be persisted to/from YAML files.\n def to_yaml() # CC=1\n def load(cls, path) # CC=5\nclass ServiceInfo:\nclass PortInfo:\nclass ConflictInfo:\nclass RuntimeInfo:\nclass AppHealthInfo:\nclass DrmOutput: # One DRM connector (e.g. card1-DSI-2, card2-HDMI-A-1).\nclass BacklightInfo: # Sysfs backlight device.\nclass I2CBusInfo:\nclass HardwareDiagnostic: # Problem found during hardware probe.\nclass HardwareInfo: # Hardware state produced by hardware probe.\n def has_dsi() # CC=2\n def kms_enabled() # CC=3\n def dsi_connected() # CC=3\n def dsi_physically_connected() # CC=3\n def dsi_enabled() # CC=3\n def backlight_on() # CC=3\n def errors() # CC=3\n def warnings() # CC=3\nclass InfraState: # Full detected state of infrastructure — output of `detect`.\nclass Hook: # Generyczny hook w pipeline: faza + akcja (reuse StepAction) \nclass TargetConfig: # Desired infrastructure state — input to `plan`.\n def _accept_strategy_aliases(cls, v) # CC=2\nclass MigrationStep:\nclass InfraSpec: # Declarative description of one infrastructure state (from OR\nclass MigrationSpec: # Single YAML file describing full migration: from-state → to-\n def from_file(cls, path) # CC=2\n def resolve_versions(manifest_version) # CC=5\n def to_infra_state() # CC=4\n def to_target_config() # CC=2\nclass MigrationPlan: # Full migration plan — output of `plan`, input to `apply`.\nclass EnvironmentConfig: # One named environment (prod / dev / rpi5 / staging …) in red\nclass ProjectManifest: # Per-project redeploy.yaml — replaces repetitive Makefile var\n def find_and_load(cls, start) # CC=6\n def find_css(cls, start) # CC=4\n def env(name) # CC=1\n def resolve_env(name) # CC=9\n def from_dotenv(cls, project_dir) # CC=12 ⚠\n def apply_to_spec(spec, env_name) # CC=19 ⚠\nclass DeployRecord: # Single deployment event recorded for a device.\nclass KnownDevice: # Device known to redeploy — persisted in ~/.config/redeploy/d\n def last_deploy() # CC=2\n def is_reachable() # CC=2\n def record_deploy(record) # CC=1\nclass DeviceMap: # Full, persisted snapshot of a device: identity + InfraState \n def has_errors() # CC=2\n def display_summary() # CC=7\n def save(path) # CC=4\n def load_for(cls, device_id) # CC=2\n def list_saved(cls) # CC=2\nclass ServicePort: # A single port mapping for a container service.\nclass VolumeMount:\nclass ServiceSpec: # Complete specification of a single containerised service.\nclass HardwareRequirements: # Hardware capabilities required to run the blueprint.\nclass BlueprintSource: # Where the blueprint was extracted from — audit trail.\nclass DeviceBlueprint: # Self-contained, portable deployment recipe.\n def service(name) # CC=3\n def save(path) # CC=4\n def list_saved(cls) # CC=2\nclass DeviceRegistry: # Persistent device registry — stored at ~/.config/redeploy/de\n def get(device_id) # CC=3\n def upsert(device) # CC=3\n def remove(device_id) # CC=3\n def by_tag(tag) # CC=3\n def by_strategy(strategy) # CC=3\n def reachable() # CC=3\n def default_path(cls) # CC=1\n def load(cls, path) # CC=5\n def save(path) # CC=4\n```",
"level": 2
},
{
"name": "# `redeploy.audit` (`redeploy/audit.py`)",
"type": "unknown",
"content": "```python\ndef _extract_port(url) # CC=5, fan=5\ndef _normalize_path(path) # CC=3, fan=4\ndef _strip_remote_dir(path) # CC=5, fan=3\ndef audit_spec(spec_path) # CC=1, fan=3\nclass AuditCheck: # Outcome of a single audit probe.\n def ok() # CC=1\nclass AuditReport:\n def add(check) # CC=1\n def passed() # CC=3\n def failed() # CC=3\n def warned() # CC=3\n def skipped() # CC=3\n def ok() # CC=1\n def summary() # CC=1\n def to_dict() # CC=2\nclass _Expect:\n def extras() # CC=1\nclass _Extractor: # Walk a MigrationSpec and emit Expect tuples.\n def __init__(spec) # CC=4\n def collect() # CC=4\n def _from_target() # CC=7\n def _from_step(raw) # CC=12 ⚠\n def _from_command(cmd, sid) # CC=14 ⚠\nclass _Probe: # Thin wrapper around SshClient with sensible audit timeouts.\n def __init__(client) # CC=4\n def has_binary(name) # CC=3\n def has_path(path) # CC=3\n def port_listening(port) # CC=4\n def has_image(ref) # CC=4\n def has_systemd_unit(unit) # CC=4\n def apt_package(name) # CC=3\n def disk_free_gib(path) # CC=3\nclass Auditor: # Compare a MigrationSpec's expectations against a live target\n def __init__(spec, spec_path) # CC=4\n def run() # CC=5\n def _dispatch(exp, report) # CC=1\n def _probe_one(exp) # CC=10 ⚠\n def _probe_binary(exp) # CC=4\n def _probe_directory(exp) # CC=4\n def _probe_file(exp) # CC=4\n def _probe_local_file(exp) # CC=3\n def _probe_port_listening(exp) # CC=4\n def _probe_container_image(exp) # CC=4\n def _probe_systemd_unit(exp, user) # CC=4\n def _probe_apt_package(exp) # CC=4\n```",
"level": 2
},
{
"name": "# `redeploy.observe` (`redeploy/observe.py`)",
"type": "unknown",
"content": "```python\nclass AuditEntry: # Single audit log entry — immutable snapshot of one deploymen\n def __init__(data) # CC=1\n def ts() # CC=1\n def host() # CC=1\n def app() # CC=1\n def from_strategy() # CC=1\n def to_strategy() # CC=1\n def ok() # CC=1\n def elapsed_s() # CC=1\n def steps_total() # CC=1\n def steps_ok() # CC=1\n def steps_failed() # CC=1\n def pattern() # CC=1\n def version() # CC=1\n def dry_run() # CC=1\n def steps() # CC=1\n def error() # CC=1\n def to_dict() # CC=1\n def __repr__() # CC=2\nclass DeployAuditLog: # Persistent audit log — newline-delimited JSON at ``path``.\n def __init__(path) # CC=1\n def record(plan, completed_steps) # CC=11 ⚠\n def _append(entry) # CC=1\n def load(limit) # CC=5\n def tail(n) # CC=1\n def filter(host, app, ok, since) # CC=12 ⚠\n def clear() # CC=2\nclass DeployReport: # Human-readable post-deploy report from an AuditEntry.\n def __init__(entry) # CC=1\n def text() # CC=8\n def yaml() # CC=1\n def summary_line() # CC=2\n```",
"level": 2
},
{
"name": "# `redeploy.fleet` (`redeploy/fleet.py`)",
"type": "unknown",
"content": "```python\nclass DeviceArch:\nclass Stage:\nclass DeviceExpectation: # Declarative assertions about required infrastructure on a de\nclass FleetDevice: # Generic device descriptor — superset of ``deploy``'s DeviceC\n def ssh_user() # CC=2\n def ssh_ip() # CC=2\n def is_local() # CC=1\n def is_prod() # CC=2\n def has_tag(tag) # CC=1\n def has_expectation(exp) # CC=1\n def verify_expectations(state) # CC=25 ⚠\nclass FleetConfig: # Top-level fleet manifest — list of devices with stage / tag \n def get_device(device_id) # CC=3\n def by_tag(tag) # CC=3\n def by_stage(stage) # CC=3\n def by_strategy(strategy) # CC=3\n def prod_devices() # CC=1\n def from_file(cls, path, workspace_root) # CC=1\nclass Fleet: # Unified first-class fleet — wraps FleetConfig and/or DeviceR\n def __init__(devices) # CC=1\n def from_file(cls, path) # CC=1\n def from_registry(cls, path) # CC=6\n def from_config(cls, config) # CC=1\n def devices() # CC=1\n def get(device_id) # CC=3\n def by_tag(tag) # CC=3\n def by_stage(stage) # CC=3\n def by_strategy(strategy) # CC=3\n def prod() # CC=1\n def reachable(within_seconds) # CC=5\n def merge(other) # CC=3\n def __len__() # CC=1\n def __iter__() # CC=1\n def __repr__() # CC=1\n```",
"level": 2
},
{
"name": "# `redeploy.discovery` (`redeploy/discovery.py`)",
"type": "unknown",
"content": "```python\ndef _is_raspberry_pi_mac(mac) # CC=2, fan=1\ndef _scan_known_hosts(ssh_user) # CC=10, fan=15 ⚠\ndef _scan_arp_cache() # CC=10, fan=12 ⚠\ndef _scan_mdns(timeout) # CC=7, fan=10\ndef _ping_sweep(subnet, timeout) # CC=6, fan=14\ndef _probe_ssh(hosts, users, port, timeout, max_workers) # CC=1, fan=6\ndef _detect_local_subnet() # CC=9, fan=11\ndef _merge(hosts) # CC=11, fan=2 ⚠\ndef discover(subnet, ssh_users, ssh_port, ping, mdns, probe_ssh, timeout) # CC=14, fan=16 ⚠\ndef update_registry(hosts, registry, save) # CC=17, fan=7 ⚠\ndef _run(cmd, timeout) # CC=2, fan=1\ndef _is_ip(s) # CC=1, fan=2\ndef _collect_ssh_keys() # CC=14, fan=11 ⚠\ndef _tcp_reachable(ip, port, timeout) # CC=2, fan=1\ndef _try_ssh_credentials(ip, users, keys, port, timeout) # CC=14, fan=12 ⚠\ndef _detect_strategy_remote(host, key, port, timeout) # CC=3, fan=5\ndef _build_probe_command() # CC=1, fan=0\ndef _build_ssh_command(host, port, timeout, key_opts, probe_cmd) # CC=1, fan=1\ndef _run_ssh_probe(cmd, timeout) # CC=3, fan=1\ndef _parse_probe_output(out) # CC=16, fan=6 ⚠\ndef _infer_strategy(info, services) # CC=8, fan=2\ndef _parse_probe_input(ip_or_host, users) # CC=4, fan=1\ndef _detect_app_from_services(services, app_hint) # CC=5, fan=1\ndef _update_existing_device(existing, result, ssh_user, ssh_key, ip, host_str, port, now) # CC=5, fan=0\ndef _create_new_device(result, ssh_user, ssh_key, ip, host_str, port, now) # CC=2, fan=1\ndef auto_probe(ip_or_host, users, port, timeout, app_hint, save) # CC=7, fan=19\nclass DiscoveredHost:\nclass ProbeResult: # Full autonomous probe result for a single host.\n```",
"level": 2
},
{
"name": "call graph",
"type": "unknown",
"content": "*366 nodes · 337 edges · 97 modules · CC̄=1.7*",
"level": 2
},
{
"name": "# hubs (by degree)",
"type": "unknown",
"content": "| Function | CC | in | out | total |\n|----------|----|----|-----|-------|\n| `_parse_service` *(in redeploy.iac.docker_compose.DockerComposeParser)* | 37 ⚠ | 0 | 61 | **61** |\n| `snapshot_to_hardware_info` *(in redeploy.integrations.op3_bridge)* | 10 ⚠ | 2 | 49 | **51** |\n| `list` *(in redeploy.steps.StepLibrary)* | 1 | 48 | 2 | **50** |\n| `exec_cmd` *(in redeploy.cli.commands.exec_)* | 9 | 0 | 40 | **40** |\n| `_bump_single` *(in redeploy.cli.commands.version.helpers)* | 25 ⚠ | 4 | 35 | **39** |\n| `plugin_cmd` *(in redeploy.cli.commands.plugin)* | 13 ⚠ | 0 | 38 | **38** |\n| `version_list` *(in redeploy.cli.commands.version.commands)* | 13 ⚠ | 0 | 38 | **38** |\n| `_parse_k8s_yaml` *(in redeploy.iac.config_hints.ConfigHintsParser)* | 26 ⚠ | 0 | 38 | **38** |\n\n```toon markpact:analysis path=project/calls.toon.yaml\n# code2llm call graph | /home/tom/github/maskservice/redeploy\n# nodes: 366 | edges: 337 | modules: 97\n# CC̄=1.7\n\nHUBS[20]:\n redeploy.iac.docker_compose.DockerComposeParser._parse_service\n CC=37 in:0 out:61 total:61\n redeploy.integrations.op3_bridge.snapshot_to_hardware_info\n CC=10 in:2 out:49 total:51\n redeploy.steps.StepLibrary.list\n CC=1 in:48 out:2 total:50\n redeploy.cli.commands.exec_.exec_cmd\n CC=9 in:0 out:40 total:40\n redeploy.cli.commands.version.helpers._bump_single\n CC=25 in:4 out:35 total:39\n redeploy.cli.commands.plugin.plugin_cmd\n CC=13 in:0 out:38 total:38\n redeploy.cli.commands.version.commands.version_list\n CC=13 in:0 out:38 total:38\n redeploy.iac.config_hints.ConfigHintsParser._parse_k8s_yaml\n CC=26 in:0 out:38 total:38\n redeploy.cli.commands.prompt_cmd.prompt_cmd\n CC=15 in:0 out:37 total:37\n redeploy.discovery.auto_probe\n CC=7 in:4 out:33 total:37\n redeploy.heal.runner.HealRunner._heal_step\n CC=13 in:0 out:35 total:35\n redeploy.blueprint.sources.compose._merge_compose\n CC=21 in:1 out:33 total:34\n redeploy.iac.parsers.compose.DockerComposeParser._parse_service\n CC=21 in:0 out:33 total:33\n redeploy.plugins.builtin.hardware_diagnostic._analyze_hardware\n CC=14 in:1 out:32 total:33\n redeploy.cli.commands.target.target\n CC=10 in:1 out:31 total:32\n redeploy.dsl_python.runner.PythonMigrationRunner.run_file\n CC=15 in:0 out:30 total:30\n redeploy.detect.detector.Detector.run\n CC=9 in:0 out:30 total:30\n examples.redeploy_iac_parsers.helm_kustomize.HelmTemplatesParser.parse\n CC=17 in:0 out:27 total:27\n redeploy.schema._discover_specs\n CC=14 in:1 out:26 total:27\n redeploy.apply.state_apply.HardwareStateHandler.apply\n CC=18 in:0 out:27 total:27\n\nMODULES:\n DOQL-INTEGRATION [1 funcs]\n print CC=0 out:0\n SUMD [1 funcs]\n run_container_build CC=0 out:0\n docs.markpact-implementation-plan [1 funcs]\n load_migration_spec CC=0 out:0\n examples.redeploy_iac_parsers.gitops_ci [2 funcs]\n can_parse CC=11 out:9\n _is_gitops_command CC=2 out:2\n examples.redeploy_iac_parsers.helm_kustomize [1 funcs]\n parse CC=17 out:27\n redeploy.apply.executor [3 funcs]\n __init__ CC=14 out:8\n _execute_step CC=4 out:27\n _rollback CC=1 out:1\n redeploy.apply.handlers [11 funcs]\n _all_containers_healthy CC=5 out:2\n _parse_container_statuses CC=6 out:8\n _resolve_command_ref CC=7 out:11\n run_docker_build CC=1 out:1\n run_docker_health_wait CC=10 out:11\n run_ensure_autostart_entry CC=16 out:21\n run_ensure_config_line CC=7 out:9\n run_inline_script CC=6 out:7\n run_podman_build CC=1 out:1\n run_raspi_config CC=5 out:6\n redeploy.apply.rollback [1 funcs]\n rollback_steps CC=8 out:8\n redeploy.apply.state [6 funcs]\n reset CC=1 out:2\n save CC=5 out:11\n _now_iso CC=1 out:2\n _slug CC=5 out:3\n default_state_path CC=2 out:2\n state_key CC=1 out:7\n redeploy.apply.state_apply [4 funcs]\n apply CC=18 out:27\n _update_kanshi CC=9 out:17\n apply_state CC=2 out:4\n detect_handler CC=3 out:1\n redeploy.audit [4 funcs]\n _from_target CC=7 out:9\n _extract_port CC=5 out:6\n _normalize_path CC=3 out:5\n audit_spec CC=1 out:3\n redeploy.blueprint.extractor [1 funcs]\n extract_blueprint CC=22 out:23\n redeploy.blueprint.generators.docker_compose [2 funcs]\n _build_service CC=20 out:8\n generate_twin CC=11 out:3\n redeploy.blueprint.sources.compose [6 funcs]\n _merge_compose CC=21 out:33\n _parse_compose_env CC=7 out:8\n _parse_compose_healthcheck CC=6 out:6\n _parse_compose_ports CC=7 out:21\n _parse_compose_volumes CC=8 out:13\n merge_compose_files CC=2 out:1\n redeploy.blueprint.sources.hardware [1 funcs]\n build_hw_requirements CC=13 out:15\n redeploy.blueprint.sources.infra [1 funcs]\n infer_app_url CC=8 out:1\n redeploy.cli [3 funcs]\n _resolve_device CC=5 out:12\n _setup_logging CC=2 out:2\n cli CC=1 out:5\n redeploy.cli.commands.blueprint [2 funcs]\n _execute_query_blueprint CC=1 out:1\n show CC=3 out:17\n redeploy.cli.commands.bump_fix [9 funcs]\n _bump_patch CC=2 out:7\n _bump_version_file CC=1 out:5\n _detect_version CC=2 out:3\n _find_spec CC=15 out:22\n _find_version_file CC=3 out:2\n _prompt_choose_spec CC=5 out:9\n _update_migration_header CC=2 out:7\n _update_quadlet_service_version CC=6 out:9\n bump_cmd CC=6 out:23\n redeploy.cli.commands.device_map [2 funcs]\n _execute_query_device_map CC=1 out:1\n _render CC=3 out:3\n redeploy.cli.commands.device_map_renderers [7 funcs]\n _build_drm_table CC=9 out:8\n _build_header_panel CC=4 out:3\n _build_issues_table CC=3 out:12\n _build_services_table CC=7 out:9\n render_json CC=1 out:3\n render_rich CC=22 out:22\n render_yaml CC=1 out:2\n redeploy.cli.commands.diagnose [1 funcs]\n diagnose CC=5 out:19\n redeploy.cli.commands.exec_ [3 funcs]\n _extract_all_scripts CC=3 out:7\n _extract_script_for_ref CC=4 out:3\n exec_cmd CC=9 out:40\n redeploy.cli.commands.export [4 funcs]\n _export_to_css CC=2 out:2\n _find_export_source CC=9 out:10\n _load_manifest_from_css CC=1 out:1\n export_cmd CC=7 out:23\n redeploy.cli.commands.hardware [3 funcs]\n _apply_fix CC=8 out:18\n _execute_query CC=1 out:2\n _probe_hardware CC=4 out:6\n redeploy.cli.commands.import_ [4 funcs]\n _copy_plugin_template CC=3 out:12\n _examples_plugin_dir CC=1 out:2\n _plugin_templates CC=1 out:0\n _print_plugin_templates CC=2 out:4\n redeploy.cli.commands.inspect [2 funcs]\n _find_css_path CC=4 out:4\n inspect CC=4 out:22\n redeploy.cli.commands.mcp_cmd [1 funcs]\n mcp_cmd CC=1 out:6\n redeploy.cli.commands.plan_apply [1 funcs]\n _apply_manifest_to_spec CC=8 out:9\n redeploy.cli.commands.plugin [1 funcs]\n plugin_cmd CC=13 out:38\n redeploy.cli.commands.prompt_cmd [1 funcs]\n prompt_cmd CC=15 out:37\n redeploy.cli.commands.state [4 funcs]\n _get_state_path CC=5 out:5\n _list_checkpoints CC=7 out:17\n _show_checkpoint CC=4 out:11\n state_cmd CC=4 out:16\n redeploy.cli.commands.target [1 funcs]\n target CC=10 out:31\n redeploy.cli.commands.version.commands [2 funcs]\n version_list CC=13 out:38\n version_verify CC=7 out:18\n redeploy.cli.commands.version.helpers [10 funcs]\n _build_package_version_manifest CC=2 out:5\n _bump_single CC=25 out:35\n _load_live_version_diff CC=3 out:4\n _load_spec_version_diff CC=8 out:13\n _print_source_drift_status CC=7 out:6\n _print_verify_result CC=6 out:5\n _resolve_monorepo_targets CC=8 out:11\n _resolve_package_release_changelog_config CC=5 out:2\n _resolve_package_release_git_config CC=5 out:5\n _run_version_diff_for_manifest CC=7 out:11\n redeploy.cli.commands.version.monorepo [5 funcs]\n _create_version_set_git CC=6 out:3\n _create_version_set_taggers CC=2 out:2\n _finalize_monorepo_version_set CC=11 out:8\n _print_monorepo_set_dry_run CC=3 out:5\n _set_monorepo_version CC=8 out:13\n redeploy.cli.commands.version.release [5 funcs]\n _create_release_tags CC=3 out:5\n _format_release_tag CC=1 out:1\n _resolve_package_release_changelog_config CC=5 out:2\n _update_monorepo_release_changelogs CC=5 out:12\n _update_release_changelog CC=7 out:7\n redeploy.cli.commands.version.scanner [17 funcs]\n _classify_version_scan_source_confidence CC=3 out:0\n _default_keep_scanned_source CC=2 out:0\n _derive_scanned_package_name CC=4 out:5\n _detect_source_version CC=2 out:1\n _detect_version_sources_in_dir CC=13 out:17\n _format_version_scan_source_status CC=2 out:2\n _is_scannable_version_path CC=2 out:1\n _iter_version_scan_groups CC=4 out:1\n _print_version_scan_group CC=3 out:4\n _print_version_scan_review CC=6 out:5\n redeploy.cli.commands.workflow [2 funcs]\n _execute_workflow CC=6 out:8\n workflow_cmd CC=10 out:21\n redeploy.cli.core [5 funcs]\n find_manifest_path CC=3 out:5\n load_spec_or_exit CC=2 out:3\n load_spec_with_manifest CC=5 out:8\n resolve_device CC=5 out:12\n run_detect_workflow CC=4 out:8\n redeploy.cli.display [18 funcs]\n _format_workflow_header CC=2 out:1\n _get_plugin_hint CC=5 out:1\n _get_status_color CC=3 out:0\n _print_alternatives CC=5 out:2\n _print_host_header CC=1 out:1\n _print_services_table CC=9 out:14\n _print_spec_metadata CC=4 out:6\n _print_template_match CC=5 out:7\n _print_workflow_step CC=4 out:4\n generate_workflow_output_css CC=8 out:9\n redeploy.cli.query [1 funcs]\n execute_query CC=5 out:9\n redeploy.config_apply.applier [3 funcs]\n _normalize_hardware CC=4 out:2\n apply_config_dict CC=1 out:2\n apply_config_file CC=4 out:6\n redeploy.config_apply.loader [1 funcs]\n load_config_file CC=3 out:4\n redeploy.detect.detector [2 funcs]\n probe_hardware CC=2 out:4\n run CC=9 out:30\n redeploy.detect.hardware [2 funcs]\n _wrap_remote_probe CC=1 out:2\n probe_hardware CC=4 out:10\n redeploy.detect.hardware_rules [3 funcs]\n _hw_info_to_dict CC=2 out:2\n _op3_diag_to_hw_diag CC=1 out:5\n analyze CC=3 out:4\n redeploy.detect.probes [4 funcs]\n detect_conflicts CC=13 out:12\n probe_iptables_dnat CC=7 out:5\n probe_ports CC=6 out:11\n probe_runtime CC=5 out:16\n redeploy.detect.templates [4 funcs]\n detect CC=2 out:3\n _build_templates CC=1 out:1\n _load_templates_from_yaml CC=9 out:22\n build_context CC=2 out:1\n redeploy.detect.workflow [2 funcs]\n _collect_hosts CC=18 out:14\n _probe_ssh CC=3 out:3\n redeploy.discovery [21 funcs]\n _build_probe_command CC=1 out:0\n _build_ssh_command CC=1 out:1\n _collect_ssh_keys CC=14 out:18\n _detect_local_subnet CC=9 out:11\n _detect_strategy_remote CC=3 out:5\n _infer_strategy CC=8 out:5\n _is_ip CC=1 out:2\n _merge CC=11 out:2\n _parse_probe_input CC=4 out:1\n _parse_probe_output CC=16 out:20\n redeploy.dsl.loader [9 funcs]\n _build_from_nodes CC=1 out:4\n _build_manifest CC=25 out:23\n _build_templates CC=14 out:24\n _build_workflows CC=8 out:16\n _condition_key CC=4 out:5\n load_css CC=1 out:4\n load_css_text CC=2 out:4\n manifest_to_css CC=14 out:17\n templates_to_css CC=6 out:13\n redeploy.dsl.parser [3 funcs]\n __repr__ CC=2 out:4\n parse CC=6 out:23\n _strip_comments CC=1 out:3\n redeploy.dsl_python.decorators [3 funcs]\n begin CC=1 out:3\n end CC=3 out:1\n migration CC=1 out:8\n redeploy.dsl_python.docker_steps [1 funcs]\n wait_healthy CC=7 out:14\n redeploy.dsl_python.runner [3 funcs]\n list_migrations CC=5 out:13\n run_file CC=15 out:30\n main CC=5 out:13\n redeploy.dsl_python.steps [4 funcs]\n ssh CC=4 out:4\n ssh_available CC=5 out:9\n version_check CC=7 out:10\n wait CC=2 out:2\n redeploy.fleet [4 funcs]\n __init__ CC=1 out:1\n from_registry CC=6 out:5\n get CC=3 out:1\n merge CC=3 out:3\n redeploy.hardware.config_txt [2 funcs]\n ensure_line CC=14 out:20\n ensure_lines CC=4 out:4\n redeploy.hardware.fixes [6 funcs]\n _detect_port CC=6 out:0\n _step CC=1 out:1\n fix_dsi_not_enabled CC=6 out:20\n fix_enable_i2c CC=1 out:1\n fix_enable_spi CC=1 out:1\n generate_fix_plan CC=7 out:3\n redeploy.hardware.kiosk.autostart [1 funcs]\n ensure_autostart_entry CC=6 out:6\n redeploy.hardware.kiosk.browsers [1 funcs]\n build_launch_cmd CC=5 out:3\n redeploy.hardware.panels [1 funcs]\n infer_from_hardware CC=1 out:0\n redeploy.hardware.raspi_config [1 funcs]\n build_raspi_config_command CC=3 out:2\n redeploy.heal [12 funcs]\n observe CC=5 out:4\n _ask_and_apply_fix CC=7 out:15\n _collect_diag_with_hint CC=2 out:2\n _record_repair CC=1 out:2\n _reload_migration CC=1 out:4\n run CC=8 out:19\n _ssh CC=3 out:2\n apply_fix_to_spec CC=6 out:15\n ask_llm CC=8 out:8\n collect_diagnostics CC=2 out:4\n redeploy.heal.hint_provider [2 funcs]\n _ssh CC=3 out:2\n collect_diagnostics CC=2 out:4\n redeploy.heal.loop_detector [1 funcs]\n observe CC=5 out:4\n redeploy.heal.runner [3 funcs]\n _heal_step CC=13 out:35\n _reload_migration CC=1 out:4\n run CC=7 out:15\n redeploy.iac.config_hints [1 funcs]\n _parse_k8s_yaml CC=26 out:38\n redeploy.iac.docker_compose [3 funcs]\n _load_merged CC=6 out:9\n _parse_service CC=37 out:61\n _env_dict CC=7 out:6\n redeploy.iac.parsers.compose [2 funcs]\n _parse_depends_on CC=5 out:6\n _parse_service CC=21 out:33\n redeploy.integrations.op3_bridge [3 funcs]\n snapshot_to_device_map CC=7 out:10\n snapshot_to_hardware_info CC=10 out:49\n snapshot_to_infra_state CC=3 out:2\n redeploy.markpact.compiler [6 funcs]\n _deep_merge CC=5 out:4\n _extract_steps CC=9 out:20\n _load_block_payload CC=8 out:7\n _normalize_config_payload CC=11 out:18\n compile_markpact_document CC=2 out:4\n compile_markpact_document_to_data CC=6 out:8\n redeploy.markpact.parser [9 funcs]\n _check_heading CC=5 out:5\n _handle_fence_line CC=7 out:7\n _normalize_section_id CC=1 out:3\n _parse_markpact_fence_info CC=14 out:10\n extract_script_by_ref CC=12 out:11\n extract_script_from_markdown CC=10 out:10\n parse_markpact_file CC=1 out:3\n parse_markpact_file_with_refs CC=6 out:6\n parse_markpact_text CC=7 out:8\n redeploy.mcp_server [12 funcs]\n _redeploy_bin CC=5 out:4\n _run CC=4 out:4\n bump_version CC=3 out:4\n diagnose CC=1 out:2\n fix_spec CC=4 out:5\n get_workspace CC=1 out:3\n list_specs CC=1 out:6\n nlp_command CC=2 out:2\n plan_spec CC=1 out:2\n run_spec CC=5 out:5\n redeploy.models [5 funcs]\n from_file CC=2 out:5\n to_target_config CC=2 out:2\n find_and_load CC=6 out:9\n find_css CC=4 out:4\n _migrate_legacy_post_deploy CC=5 out:20\n redeploy.observe [1 funcs]\n record CC=11 out:20\n redeploy.parse [7 funcs]\n _apply_git_line CC=3 out:3\n _apply_health_line CC=2 out:1\n _apply_network_line CC=3 out:2\n _apply_system_line CC=8 out:10\n _parse_section_line CC=7 out:6\n parse_container_line CC=3 out:3\n parse_diagnostics CC=5 out:4\n redeploy.patterns [6 funcs]\n expand CC=2 out:14\n expand CC=5 out:13\n expand CC=1 out:8\n _step CC=1 out:1\n get_pattern CC=1 out:1\n list_patterns CC=1 out:2\n redeploy.plan.planner [1 funcs]\n _plan_pattern CC=10 out:17\n redeploy.plugins [5 funcs]\n _ensure_builtins CC=2 out:1\n names CC=1 out:2\n _load_builtin_plugins CC=6 out:7\n load_user_plugins CC=3 out:4\n register_plugin CC=1 out:1\n redeploy.plugins.builtin.browser_reload [1 funcs]\n browser_reload CC=16 out:26\n redeploy.plugins.builtin.hardware_diagnostic [11 funcs]\n _analyze_hardware CC=14 out:32\n _check_gpio CC=2 out:2\n _detect_platform CC=10 out:6\n _get_audio_devices CC=3 out:5\n _get_cpu_info CC=5 out:10\n _get_memory_mb CC=3 out:5\n _get_network_interfaces CC=5 out:6\n _get_storage_gb CC=6 out:11\n _get_usb_devices CC=4 out:5\n _run_command CC=2 out:3\n redeploy.plugins.builtin.notify [6 funcs]\n _fmt CC=1 out:3\n _http_post CC=5 out:10\n _notify_slack CC=3 out:7\n _notify_webhook CC=6 out:16\n _resolve_env CC=1 out:1\n notify CC=4 out:5\n redeploy.plugins.builtin.process_control [2 funcs]\n _find_pid_on_port CC=11 out:14\n process_control CC=9 out:19\n redeploy.plugins.builtin.systemd_reload [1 funcs]\n systemd_reload CC=12 out:23\n redeploy.schema [5 funcs]\n _discover_specs CC=14 out:26\n _git_branch CC=3 out:2\n _iac_info CC=2 out:0\n _read_version CC=3 out:4\n build_schema CC=2 out:7\n redeploy.spec_loader [1 funcs]\n load_migration_spec CC=4 out:8\n redeploy.steps [2 funcs]\n all CC=2 out:2\n list CC=1 out:2\n redeploy.version [1 funcs]\n read_remote_version CC=4 out:3\n redeploy.version.bump [6 funcs]\n _calculate_bump CC=8 out:10\n bump_all_packages CC=3 out:5\n bump_package CC=9 out:13\n bump_version CC=6 out:9\n bump_version_with_git CC=13 out:14\n verify_sources CC=4 out:7\n redeploy.version.changelog [2 funcs]\n _categorize_commits CC=3 out:3\n get_commits_since_tag CC=5 out:3\n redeploy.version.commits [3 funcs]\n analyze_commits CC=18 out:25\n format_analysis_report CC=2 out:3\n parse_conventional CC=4 out:6\n redeploy.version.diff [2 funcs]\n diff_manifest_vs_live CC=2 out:2\n diff_manifest_vs_spec CC=4 out:7\n redeploy.version.manifest [1 funcs]\n list_packages CC=2 out:2\n redeploy.version.sources [1 funcs]\n get_adapter CC=2 out:1\n redeploy.version.transaction [1 funcs]\n _stage_one CC=6 out:7\n\nEDGES:\n redeploy.schema.build_schema → redeploy.schema._read_version\n redeploy.schema.build_schema → redeploy.schema._git_branch\n redeploy.schema.build_schema → redeploy.schema._discover_specs\n redeploy.schema.build_schema → redeploy.schema._iac_info\n redeploy.observe.DeployAuditLog.record → redeploy.steps.StepLibrary.list\n redeploy.heal.collect_diagnostics → redeploy.heal._ssh\n redeploy.heal.HealLoopDetector.observe → redeploy.steps.StepLibrary.all\n redeploy.heal.HealRunner._reload_migration → docs.markpact-implementation-plan.load_migration_spec\n redeploy.heal.HealRunner._collect_diag_with_hint → redeploy.heal.collect_diagnostics\n redeploy.heal.HealRunner._ask_and_apply_fix → redeploy.heal.ask_llm\n redeploy.heal.HealRunner._ask_and_apply_fix → redeploy.heal.apply_fix_to_spec\n redeploy.heal.HealRunner._record_repair → redeploy.heal.write_repair_log\n redeploy.heal.HealRunner.run → redeploy.heal.write_repair_log\n redeploy.heal.HealRunner.run → redeploy.heal.parse_failed_step\n redeploy.parse.parse_diagnostics → redeploy.parse._parse_section_line\n redeploy.parse._parse_section_line → redeploy.parse._apply_system_line\n redeploy.parse._parse_section_line → redeploy.parse.parse_container_line\n redeploy.parse._parse_section_line → redeploy.parse._apply_git_line\n redeploy.parse._parse_section_line → redeploy.parse._apply_health_line\n redeploy.parse._parse_section_line → redeploy.parse._apply_network_line\n redeploy.fleet.Fleet.__init__ → redeploy.steps.StepLibrary.list\n redeploy.fleet.Fleet.from_registry → redeploy.steps.StepLibrary.list\n redeploy.fleet.Fleet.merge → redeploy.steps.StepLibrary.list\n redeploy.models._migrate_legacy_post_deploy → redeploy.steps.StepLibrary.list\n redeploy.models.MigrationSpec.from_file → redeploy.models._migrate_legacy_post_deploy\n redeploy.models.MigrationSpec.to_target_config → redeploy.steps.StepLibrary.list\n redeploy.models.ProjectManifest.find_and_load → redeploy.steps.StepLibrary.list\n redeploy.models.ProjectManifest.find_and_load → redeploy.dsl.loader.load_css\n redeploy.models.ProjectManifest.find_css → redeploy.steps.StepLibrary.list\n redeploy.spec_loader.load_migration_spec → redeploy.markpact.compiler.compile_markpact_document\n redeploy.spec_loader.load_migration_spec → redeploy.markpact.parser.parse_markpact_file\n redeploy.patterns.BlueGreenPattern.expand → redeploy.patterns._step\n redeploy.patterns.CanaryPattern.expand → redeploy.patterns._step\n redeploy.patterns.RollbackOnFailurePattern.expand → redeploy.patterns._step\n redeploy.patterns.list_patterns → redeploy.steps.StepLibrary.list\n redeploy.discovery._scan_arp_cache → redeploy.discovery._run\n redeploy.discovery._scan_mdns → redeploy.discovery._run\n redeploy.discovery._scan_mdns → redeploy.discovery._is_ip\n redeploy.discovery._ping_sweep → redeploy.steps.StepLibrary.list\n redeploy.discovery._probe_ssh → redeploy.steps.StepLibrary.list\n redeploy.discovery._detect_local_subnet → redeploy.discovery._run\n redeploy.discovery._merge → redeploy.steps.StepLibrary.list\n redeploy.discovery.discover → redeploy.discovery._merge\n redeploy.discovery.discover → redeploy.discovery._scan_known_hosts\n redeploy.discovery.discover → redeploy.discovery._scan_arp_cache\n redeploy.discovery.discover → redeploy.discovery._probe_ssh\n redeploy.discovery._try_ssh_credentials → redeploy.discovery._tcp_reachable\n redeploy.discovery._detect_strategy_remote → redeploy.discovery._build_probe_command\n redeploy.discovery._detect_strategy_remote → redeploy.discovery._build_ssh_command\n redeploy.discovery._detect_strategy_remote → redeploy.discovery._run_ssh_probe\n```",
"level": 2
},
{
"name": "refactoring analysis",
"type": "unknown",
"content": "*Pre-refactoring snapshot — use this section to identify targets. Generated from `project/` toon files.*",
"level": 2
},
{
"name": "# call graph & complexity (`project/calls.toon.yaml`)",
"type": "unknown",
"content": "```toon markpact:analysis path=project/calls.toon.yaml\n# code2llm call graph | /home/tom/github/maskservice/redeploy\n# nodes: 366 | edges: 337 | modules: 97\n# CC̄=1.7\n\nHUBS[20]:\n redeploy.iac.docker_compose.DockerComposeParser._parse_service\n CC=37 in:0 out:61 total:61\n redeploy.integrations.op3_bridge.snapshot_to_hardware_info\n CC=10 in:2 out:49 total:51\n redeploy.steps.StepLibrary.list\n CC=1 in:48 out:2 total:50\n redeploy.cli.commands.exec_.exec_cmd\n CC=9 in:0 out:40 total:40\n redeploy.cli.commands.version.helpers._bump_single\n CC=25 in:4 out:35 total:39\n redeploy.cli.commands.plugin.plugin_cmd\n CC=13 in:0 out:38 total:38\n redeploy.cli.commands.version.commands.version_list\n CC=13 in:0 out:38 total:38\n redeploy.iac.config_hints.ConfigHintsParser._parse_k8s_yaml\n CC=26 in:0 out:38 total:38\n redeploy.cli.commands.prompt_cmd.prompt_cmd\n CC=15 in:0 out:37 total:37\n redeploy.discovery.auto_probe\n CC=7 in:4 out:33 total:37\n redeploy.heal.runner.HealRunner._heal_step\n CC=13 in:0 out:35 total:35\n redeploy.blueprint.sources.compose._merge_compose\n CC=21 in:1 out:33 total:34\n redeploy.iac.parsers.compose.DockerComposeParser._parse_service\n CC=21 in:0 out:33 total:33\n redeploy.plugins.builtin.hardware_diagnostic._analyze_hardware\n CC=14 in:1 out:32 total:33\n redeploy.cli.commands.target.target\n CC=10 in:1 out:31 total:32\n redeploy.dsl_python.runner.PythonMigrationRunner.run_file\n CC=15 in:0 out:30 total:30\n redeploy.detect.detector.Detector.run\n CC=9 in:0 out:30 total:30\n examples.redeploy_iac_parsers.helm_kustomize.HelmTemplatesParser.parse\n CC=17 in:0 out:27 total:27\n redeploy.schema._discover_specs\n CC=14 in:1 out:26 total:27\n redeploy.apply.state_apply.HardwareStateHandler.apply\n CC=18 in:0 out:27 total:27\n\nMODULES:\n DOQL-INTEGRATION [1 funcs]\n print CC=0 out:0\n SUMD [1 funcs]\n run_container_build CC=0 out:0\n docs.markpact-implementation-plan [1 funcs]\n load_migration_spec CC=0 out:0\n examples.redeploy_iac_parsers.gitops_ci [2 funcs]\n can_parse CC=11 out:9\n _is_gitops_command CC=2 out:2\n examples.redeploy_iac_parsers.helm_kustomize [1 funcs]\n parse CC=17 out:27\n redeploy.apply.executor [3 funcs]\n __init__ CC=14 out:8\n _execute_step CC=4 out:27\n _rollback CC=1 out:1\n redeploy.apply.handlers [11 funcs]\n _all_containers_healthy CC=5 out:2\n _parse_container_statuses CC=6 out:8\n _resolve_command_ref CC=7 out:11\n run_docker_build CC=1 out:1\n run_docker_health_wait CC=10 out:11\n run_ensure_autostart_entry CC=16 out:21\n run_ensure_config_line CC=7 out:9\n run_inline_script CC=6 out:7\n run_podman_build CC=1 out:1\n run_raspi_config CC=5 out:6\n redeploy.apply.rollback [1 funcs]\n rollback_steps CC=8 out:8\n redeploy.apply.state [6 funcs]\n reset CC=1 out:2\n save CC=5 out:11\n _now_iso CC=1 out:2\n _slug CC=5 out:3\n default_state_path CC=2 out:2\n state_key CC=1 out:7\n redeploy.apply.state_apply [4 funcs]\n apply CC=18 out:27\n _update_kanshi CC=9 out:17\n apply_state CC=2 out:4\n detect_handler CC=3 out:1\n redeploy.audit [4 funcs]\n _from_target CC=7 out:9\n _extract_port CC=5 out:6\n _normalize_path CC=3 out:5\n audit_spec CC=1 out:3\n redeploy.blueprint.extractor [1 funcs]\n extract_blueprint CC=22 out:23\n redeploy.blueprint.generators.docker_compose [2 funcs]\n _build_service CC=20 out:8\n generate_twin CC=11 out:3\n redeploy.blueprint.sources.compose [6 funcs]\n _merge_compose CC=21 out:33\n _parse_compose_env CC=7 out:8\n _parse_compose_healthcheck CC=6 out:6\n _parse_compose_ports CC=7 out:21\n _parse_compose_volumes CC=8 out:13\n merge_compose_files CC=2 out:1\n redeploy.blueprint.sources.hardware [1 funcs]\n build_hw_requirements CC=13 out:15\n redeploy.blueprint.sources.infra [1 funcs]\n infer_app_url CC=8 out:1\n redeploy.cli [3 funcs]\n _resolve_device CC=5 out:12\n _setup_logging CC=2 out:2\n cli CC=1 out:5\n redeploy.cli.commands.blueprint [2 funcs]\n _execute_query_blueprint CC=1 out:1\n show CC=3 out:17\n redeploy.cli.commands.bump_fix [9 funcs]\n _bump_patch CC=2 out:7\n _bump_version_file CC=1 out:5\n _detect_version CC=2 out:3\n _find_spec CC=15 out:22\n _find_version_file CC=3 out:2\n _prompt_choose_spec CC=5 out:9\n _update_migration_header CC=2 out:7\n _update_quadlet_service_version CC=6 out:9\n bump_cmd CC=6 out:23\n redeploy.cli.commands.device_map [2 funcs]\n _execute_query_device_map CC=1 out:1\n _render CC=3 out:3\n redeploy.cli.commands.device_map_renderers [7 funcs]\n _build_drm_table CC=9 out:8\n _build_header_panel CC=4 out:3\n _build_issues_table CC=3 out:12\n _build_services_table CC=7 out:9\n render_json CC=1 out:3\n render_rich CC=22 out:22\n render_yaml CC=1 out:2\n redeploy.cli.commands.diagnose [1 funcs]\n diagnose CC=5 out:19\n redeploy.cli.commands.exec_ [3 funcs]\n _extract_all_scripts CC=3 out:7\n _extract_script_for_ref CC=4 out:3\n exec_cmd CC=9 out:40\n redeploy.cli.commands.export [4 funcs]\n _export_to_css CC=2 out:2\n _find_export_source CC=9 out:10\n _load_manifest_from_css CC=1 out:1\n export_cmd CC=7 out:23\n redeploy.cli.commands.hardware [3 funcs]\n _apply_fix CC=8 out:18\n _execute_query CC=1 out:2\n _probe_hardware CC=4 out:6\n redeploy.cli.commands.import_ [4 funcs]\n _copy_plugin_template CC=3 out:12\n _examples_plugin_dir CC=1 out:2\n _plugin_templates CC=1 out:0\n _print_plugin_templates CC=2 out:4\n redeploy.cli.commands.inspect [2 funcs]\n _find_css_path CC=4 out:4\n inspect CC=4 out:22\n redeploy.cli.commands.mcp_cmd [1 funcs]\n mcp_cmd CC=1 out:6\n redeploy.cli.commands.plan_apply [1 funcs]\n _apply_manifest_to_spec CC=8 out:9\n redeploy.cli.commands.plugin [1 funcs]\n plugin_cmd CC=13 out:38\n redeploy.cli.commands.prompt_cmd [1 funcs]\n prompt_cmd CC=15 out:37\n redeploy.cli.commands.state [4 funcs]\n _get_state_path CC=5 out:5\n _list_checkpoints CC=7 out:17\n _show_checkpoint CC=4 out:11\n state_cmd CC=4 out:16\n redeploy.cli.commands.target [1 funcs]\n target CC=10 out:31\n redeploy.cli.commands.version.commands [2 funcs]\n version_list CC=13 out:38\n version_verify CC=7 out:18\n redeploy.cli.commands.version.helpers [10 funcs]\n _build_package_version_manifest CC=2 out:5\n _bump_single CC=25 out:35\n _load_live_version_diff CC=3 out:4\n _load_spec_version_diff CC=8 out:13\n _print_source_drift_status CC=7 out:6\n _print_verify_result CC=6 out:5\n _resolve_monorepo_targets CC=8 out:11\n _resolve_package_release_changelog_config CC=5 out:2\n _resolve_package_release_git_config CC=5 out:5\n _run_version_diff_for_manifest CC=7 out:11\n redeploy.cli.commands.version.monorepo [5 funcs]\n _create_version_set_git CC=6 out:3\n _create_version_set_taggers CC=2 out:2\n _finalize_monorepo_version_set CC=11 out:8\n _print_monorepo_set_dry_run CC=3 out:5\n _set_monorepo_version CC=8 out:13\n redeploy.cli.commands.version.release [5 funcs]\n _create_release_tags CC=3 out:5\n _format_release_tag CC=1 out:1\n _resolve_package_release_changelog_config CC=5 out:2\n _update_monorepo_release_changelogs CC=5 out:12\n _update_release_changelog CC=7 out:7\n redeploy.cli.commands.version.scanner [17 funcs]\n _classify_version_scan_source_confidence CC=3 out:0\n _default_keep_scanned_source CC=2 out:0\n _derive_scanned_package_name CC=4 out:5\n _detect_source_version CC=2 out:1\n _detect_version_sources_in_dir CC=13 out:17\n _format_version_scan_source_status CC=2 out:2\n _is_scannable_version_path CC=2 out:1\n _iter_version_scan_groups CC=4 out:1\n _print_version_scan_group CC=3 out:4\n _print_version_scan_review CC=6 out:5\n redeploy.cli.commands.workflow [2 funcs]\n _execute_workflow CC=6 out:8\n workflow_cmd CC=10 out:21\n redeploy.cli.core [5 funcs]\n find_manifest_path CC=3 out:5\n load_spec_or_exit CC=2 out:3\n load_spec_with_manifest CC=5 out:8\n resolve_device CC=5 out:12\n run_detect_workflow CC=4 out:8\n redeploy.cli.display [18 funcs]\n _format_workflow_header CC=2 out:1\n _get_plugin_hint CC=5 out:1\n _get_status_color CC=3 out:0\n _print_alternatives CC=5 out:2\n _print_host_header CC=1 out:1\n _print_services_table CC=9 out:14\n _print_spec_metadata CC=4 out:6\n _print_template_match CC=5 out:7\n _print_workflow_step CC=4 out:4\n generate_workflow_output_css CC=8 out:9\n redeploy.cli.query [1 funcs]\n execute_query CC=5 out:9\n redeploy.config_apply.applier [3 funcs]\n _normalize_hardware CC=4 out:2\n apply_config_dict CC=1 out:2\n apply_config_file CC=4 out:6\n redeploy.config_apply.loader [1 funcs]\n load_config_file CC=3 out:4\n redeploy.detect.detector [2 funcs]\n probe_hardware CC=2 out:4\n run CC=9 out:30\n redeploy.detect.hardware [2 funcs]\n _wrap_remote_probe CC=1 out:2\n probe_hardware CC=4 out:10\n redeploy.detect.hardware_rules [3 funcs]\n _hw_info_to_dict CC=2 out:2\n _op3_diag_to_hw_diag CC=1 out:5\n analyze CC=3 out:4\n redeploy.detect.probes [4 funcs]\n detect_conflicts CC=13 out:12\n probe_iptables_dnat CC=7 out:5\n probe_ports CC=6 out:11\n probe_runtime CC=5 out:16\n redeploy.detect.templates [4 funcs]\n detect CC=2 out:3\n _build_templates CC=1 out:1\n _load_templates_from_yaml CC=9 out:22\n build_context CC=2 out:1\n redeploy.detect.workflow [2 funcs]\n _collect_hosts CC=18 out:14\n _probe_ssh CC=3 out:3\n redeploy.discovery [21 funcs]\n _build_probe_command CC=1 out:0\n _build_ssh_command CC=1 out:1\n _collect_ssh_keys CC=14 out:18\n _detect_local_subnet CC=9 out:11\n _detect_strategy_remote CC=3 out:5\n _infer_strategy CC=8 out:5\n _is_ip CC=1 out:2\n _merge CC=11 out:2\n _parse_probe_input CC=4 out:1\n _parse_probe_output CC=16 out:20\n redeploy.dsl.loader [9 funcs]\n _build_from_nodes CC=1 out:4\n _build_manifest CC=25 out:23\n _build_templates CC=14 out:24\n _build_workflows CC=8 out:16\n _condition_key CC=4 out:5\n load_css CC=1 out:4\n load_css_text CC=2 out:4\n manifest_to_css CC=14 out:17\n templates_to_css CC=6 out:13\n redeploy.dsl.parser [3 funcs]\n __repr__ CC=2 out:4\n parse CC=6 out:23\n _strip_comments CC=1 out:3\n redeploy.dsl_python.decorators [3 funcs]\n begin CC=1 out:3\n end CC=3 out:1\n migration CC=1 out:8\n redeploy.dsl_python.docker_steps [1 funcs]\n wait_healthy CC=7 out:14\n redeploy.dsl_python.runner [3 funcs]\n list_migrations CC=5 out:13\n run_file CC=15 out:30\n main CC=5 out:13\n redeploy.dsl_python.steps [4 funcs]\n ssh CC=4 out:4\n ssh_available CC=5 out:9\n version_check CC=7 out:10\n wait CC=2 out:2\n redeploy.fleet [4 funcs]\n __init__ CC=1 out:1\n from_registry CC=6 out:5\n get CC=3 out:1\n merge CC=3 out:3\n redeploy.hardware.config_txt [2 funcs]\n ensure_line CC=14 out:20\n ensure_lines CC=4 out:4\n redeploy.hardware.fixes [6 funcs]\n _detect_port CC=6 out:0\n _step CC=1 out:1\n fix_dsi_not_enabled CC=6 out:20\n fix_enable_i2c CC=1 out:1\n fix_enable_spi CC=1 out:1\n generate_fix_plan CC=7 out:3\n redeploy.hardware.kiosk.autostart [1 funcs]\n ensure_autostart_entry CC=6 out:6\n redeploy.hardware.kiosk.browsers [1 funcs]\n build_launch_cmd CC=5 out:3\n redeploy.hardware.panels [1 funcs]\n infer_from_hardware CC=1 out:0\n redeploy.hardware.raspi_config [1 funcs]\n build_raspi_config_command CC=3 out:2\n redeploy.heal [12 funcs]\n observe CC=5 out:4\n _ask_and_apply_fix CC=7 out:15\n _collect_diag_with_hint CC=2 out:2\n _record_repair CC=1 out:2\n _reload_migration CC=1 out:4\n run CC=8 out:19\n _ssh CC=3 out:2\n apply_fix_to_spec CC=6 out:15\n ask_llm CC=8 out:8\n collect_diagnostics CC=2 out:4\n redeploy.heal.hint_provider [2 funcs]\n _ssh CC=3 out:2\n collect_diagnostics CC=2 out:4\n redeploy.heal.loop_detector [1 funcs]\n observe CC=5 out:4\n redeploy.heal.runner [3 funcs]\n _heal_step CC=13 out:35\n _reload_migration CC=1 out:4\n run CC=7 out:15\n redeploy.iac.config_hints [1 funcs]\n _parse_k8s_yaml CC=26 out:38\n redeploy.iac.docker_compose [3 funcs]\n _load_merged CC=6 out:9\n _parse_service CC=37 out:61\n _env_dict CC=7 out:6\n redeploy.iac.parsers.compose [2 funcs]\n _parse_depends_on CC=5 out:6\n _parse_service CC=21 out:33\n redeploy.integrations.op3_bridge [3 funcs]\n snapshot_to_device_map CC=7 out:10\n snapshot_to_hardware_info CC=10 out:49\n snapshot_to_infra_state CC=3 out:2\n redeploy.markpact.compiler [6 funcs]\n _deep_merge CC=5 out:4\n _extract_steps CC=9 out:20\n _load_block_payload CC=8 out:7\n _normalize_config_payload CC=11 out:18\n compile_markpact_document CC=2 out:4\n compile_markpact_document_to_data CC=6 out:8\n redeploy.markpact.parser [9 funcs]\n _check_heading CC=5 out:5\n _handle_fence_line CC=7 out:7\n _normalize_section_id CC=1 out:3\n _parse_markpact_fence_info CC=14 out:10\n extract_script_by_ref CC=12 out:11\n extract_script_from_markdown CC=10 out:10\n parse_markpact_file CC=1 out:3\n parse_markpact_file_with_refs CC=6 out:6\n parse_markpact_text CC=7 out:8\n redeploy.mcp_server [12 funcs]\n _redeploy_bin CC=5 out:4\n _run CC=4 out:4\n bump_version CC=3 out:4\n diagnose CC=1 out:2\n fix_spec CC=4 out:5\n get_workspace CC=1 out:3\n list_specs CC=1 out:6\n nlp_command CC=2 out:2\n plan_spec CC=1 out:2\n run_spec CC=5 out:5\n redeploy.models [5 funcs]\n from_file CC=2 out:5\n to_target_config CC=2 out:2\n find_and_load CC=6 out:9\n find_css CC=4 out:4\n _migrate_legacy_post_deploy CC=5 out:20\n redeploy.observe [1 funcs]\n record CC=11 out:20\n redeploy.parse [7 funcs]\n _apply_git_line CC=3 out:3\n _apply_health_line CC=2 out:1\n _apply_network_line CC=3 out:2\n _apply_system_line CC=8 out:10\n _parse_section_line CC=7 out:6\n parse_container_line CC=3 out:3\n parse_diagnostics CC=5 out:4\n redeploy.patterns [6 funcs]\n expand CC=2 out:14\n expand CC=5 out:13\n expand CC=1 out:8\n _step CC=1 out:1\n get_pattern CC=1 out:1\n list_patterns CC=1 out:2\n redeploy.plan.planner [1 funcs]\n _plan_pattern CC=10 out:17\n redeploy.plugins [5 funcs]\n _ensure_builtins CC=2 out:1\n names CC=1 out:2\n _load_builtin_plugins CC=6 out:7\n load_user_plugins CC=3 out:4\n register_plugin CC=1 out:1\n redeploy.plugins.builtin.browser_reload [1 funcs]\n browser_reload CC=16 out:26\n redeploy.plugins.builtin.hardware_diagnostic [11 funcs]\n _analyze_hardware CC=14 out:32\n _check_gpio CC=2 out:2\n _detect_platform CC=10 out:6\n _get_audio_devices CC=3 out:5\n _get_cpu_info CC=5 out:10\n _get_memory_mb CC=3 out:5\n _get_network_interfaces CC=5 out:6\n _get_storage_gb CC=6 out:11\n _get_usb_devices CC=4 out:5\n _run_command CC=2 out:3\n redeploy.plugins.builtin.notify [6 funcs]\n _fmt CC=1 out:3\n _http_post CC=5 out:10\n _notify_slack CC=3 out:7\n _notify_webhook CC=6 out:16\n _resolve_env CC=1 out:1\n notify CC=4 out:5\n redeploy.plugins.builtin.process_control [2 funcs]\n _find_pid_on_port CC=11 out:14\n process_control CC=9 out:19\n redeploy.plugins.builtin.systemd_reload [1 funcs]\n systemd_reload CC=12 out:23\n redeploy.schema [5 funcs]\n _discover_specs CC=14 out:26\n _git_branch CC=3 out:2\n _iac_info CC=2 out:0\n _read_version CC=3 out:4\n build_schema CC=2 out:7\n redeploy.spec_loader [1 funcs]\n load_migration_spec CC=4 out:8\n redeploy.steps [2 funcs]\n all CC=2 out:2\n list CC=1 out:2\n redeploy.version [1 funcs]\n read_remote_version CC=4 out:3\n redeploy.version.bump [6 funcs]\n _calculate_bump CC=8 out:10\n bump_all_packages CC=3 out:5\n bump_package CC=9 out:13\n bump_version CC=6 out:9\n bump_version_with_git CC=13 out:14\n verify_sources CC=4 out:7\n redeploy.version.changelog [2 funcs]\n _categorize_commits CC=3 out:3\n get_commits_since_tag CC=5 out:3\n redeploy.version.commits [3 funcs]\n analyze_commits CC=18 out:25\n format_analysis_report CC=2 out:3\n parse_conventional CC=4 out:6\n redeploy.version.diff [2 funcs]\n diff_manifest_vs_live CC=2 out:2\n diff_manifest_vs_spec CC=4 out:7\n redeploy.version.manifest [1 funcs]\n list_packages CC=2 out:2\n redeploy.version.sources [1 funcs]\n get_adapter CC=2 out:1\n redeploy.version.transaction [1 funcs]\n _stage_one CC=6 out:7\n\nEDGES:\n redeploy.schema.build_schema → redeploy.schema._read_version\n redeploy.schema.build_schema → redeploy.schema._git_branch\n redeploy.schema.build_schema → redeploy.schema._discover_specs\n redeploy.schema.build_schema → redeploy.schema._iac_info\n redeploy.observe.DeployAuditLog.record → redeploy.steps.StepLibrary.list\n redeploy.heal.collect_diagnostics → redeploy.heal._ssh\n redeploy.heal.HealLoopDetector.observe → redeploy.steps.StepLibrary.all\n redeploy.heal.HealRunner._reload_migration → docs.markpact-implementation-plan.load_migration_spec\n redeploy.heal.HealRunner._collect_diag_with_hint → redeploy.heal.collect_diagnostics\n redeploy.heal.HealRunner._ask_and_apply_fix → redeploy.heal.ask_llm\n redeploy.heal.HealRunner._ask_and_apply_fix → redeploy.heal.apply_fix_to_spec\n redeploy.heal.HealRunner._record_repair → redeploy.heal.write_repair_log\n redeploy.heal.HealRunner.run → redeploy.heal.write_repair_log\n redeploy.heal.HealRunner.run → redeploy.heal.parse_failed_step\n redeploy.parse.parse_diagnostics → redeploy.parse._parse_section_line\n redeploy.parse._parse_section_line → redeploy.parse._apply_system_line\n redeploy.parse._parse_section_line → redeploy.parse.parse_container_line\n redeploy.parse._parse_section_line → redeploy.parse._apply_git_line\n redeploy.parse._parse_section_line → redeploy.parse._apply_health_line\n redeploy.parse._parse_section_line → redeploy.parse._apply_network_line\n redeploy.fleet.Fleet.__init__ → redeploy.steps.StepLibrary.list\n redeploy.fleet.Fleet.from_registry → redeploy.steps.StepLibrary.list\n redeploy.fleet.Fleet.merge → redeploy.steps.StepLibrary.list\n redeploy.models._migrate_legacy_post_deploy → redeploy.steps.StepLibrary.list\n redeploy.models.MigrationSpec.from_file → redeploy.models._migrate_legacy_post_deploy\n redeploy.models.MigrationSpec.to_target_config → redeploy.steps.StepLibrary.list\n redeploy.models.ProjectManifest.find_and_load → redeploy.steps.StepLibrary.list\n redeploy.models.ProjectManifest.find_and_load → redeploy.dsl.loader.load_css\n redeploy.models.ProjectManifest.find_css → redeploy.steps.StepLibrary.list\n redeploy.spec_loader.load_migration_spec → redeploy.markpact.compiler.compile_markpact_document\n redeploy.spec_loader.load_migration_spec → redeploy.markpact.parser.parse_markpact_file\n redeploy.patterns.BlueGreenPattern.expand → redeploy.patterns._step\n redeploy.patterns.CanaryPattern.expand → redeploy.patterns._step\n redeploy.patterns.RollbackOnFailurePattern.expand → redeploy.patterns._step\n redeploy.patterns.list_patterns → redeploy.steps.StepLibrary.list\n redeploy.discovery._scan_arp_cache → redeploy.discovery._run\n redeploy.discovery._scan_mdns → redeploy.discovery._run\n redeploy.discovery._scan_mdns → redeploy.discovery._is_ip\n redeploy.discovery._ping_sweep → redeploy.steps.StepLibrary.list\n redeploy.discovery._probe_ssh → redeploy.steps.StepLibrary.list\n redeploy.discovery._detect_local_subnet → redeploy.discovery._run\n redeploy.discovery._merge → redeploy.steps.StepLibrary.list\n redeploy.discovery.discover → redeploy.discovery._merge\n redeploy.discovery.discover → redeploy.discovery._scan_known_hosts\n redeploy.discovery.discover → redeploy.discovery._scan_arp_cache\n redeploy.discovery.discover → redeploy.discovery._probe_ssh\n redeploy.discovery._try_ssh_credentials → redeploy.discovery._tcp_reachable\n redeploy.discovery._detect_strategy_remote → redeploy.discovery._build_probe_command\n redeploy.discovery._detect_strategy_remote → redeploy.discovery._build_ssh_command\n redeploy.discovery._detect_strategy_remote → redeploy.discovery._run_ssh_probe\n```",
"level": 2
},
{
"name": "# code analysis (`project/analysis.toon.yaml`)",
"type": "unknown",
"content": "```toon markpact:analysis path=project/analysis.toon.yaml\n# code2llm | 324f 57926L | python:158,yaml:106,md:52,shell:2,toml:1,yml:1,txt:1,json:1 | 2026-04-21\n# CC̄=1.7 | critical:40/2633 | dups:0 | cycles:0\n\nHEALTH[20]:\n 🔴 GOD redeploy/models.py = 1096L, 34 classes, 30m, max CC=19\n 🔴 GOD redeploy/audit.py = 609L, 6 classes, 32m, max CC=14\n 🔴 GOD SUMR.md = 2865L, 51 classes, 140m, max CC=0.0\n 🔴 GOD SUMD.md = 2849L, 51 classes, 839m, max CC=0.0\n 🟡 CC verify_expectations CC=25 (limit:15)\n 🟡 CC apply_to_spec CC=19 (limit:15)\n 🟡 CC update_registry CC=17 (limit:15)\n 🟡 CC _parse_probe_output CC=16 (limit:15)\n 🟡 CC _collect_hosts CC=18 (limit:15)\n 🟡 CC devices CC=22 (limit:15)\n 🟡 CC render_rich CC=22 (limit:15)\n 🟡 CC _find_spec CC=15 (limit:15)\n 🟡 CC fix_cmd CC=17 (limit:15)\n 🟡 CC _print_blueprint CC=20 (limit:15)\n 🟡 CC probe CC=26 (limit:15)\n 🟡 CC import_cmd CC=21 (limit:15)\n 🟡 CC _print_import_spec CC=15 (limit:15)\n 🟡 CC _spec_to_migration_yaml CC=22 (limit:15)\n 🟡 CC device_map_cmd CC=20 (limit:15)\n 🟡 CC prompt_cmd CC=15 (limit:15)\n\nREFACTOR[5]:\n 1. split redeploy/models.py (god module)\n 2. split redeploy/audit.py (god module)\n 3. split SUMR.md (god module)\n 4. split SUMD.md (god module)\n 5. split 16 high-CC methods (CC>15)\n\nPIPELINES[467]:\n [1] Src [to_dict]: to_dict\n PURITY: 100% pure\n [2] Src [record]: record → list\n PURITY: 100% pure\n [3] Src [_append]: _append\n PURITY: 100% pure\n [4] Src [load]: load\n PURITY: 100% pure\n [5] Src [tail]: tail\n PURITY: 100% pure\n\nLAYERS:\n examples/ CC̄=6.2 ←in:0 →out:0\n │ migration.md 312L 0C 3m CC=0.0 ←0\n │ migration.md 255L 0C 2m CC=0.0 ←0\n │ rpi5-waveshare-kiosk.md 196L 0C 0m CC=0.0 ←0\n │ migration.md 145L 0C 2m CC=0.0 ←0\n │ migration.md 138L 0C 0m CC=0.0 ←0\n │ !! gitops_ci 137L 2C 5m CC=16 ←0\n │ argocd_flux 129L 2C 4m CC=13 ←0\n │ fleet.yaml 128L 0C 0m CC=0.0 ←0\n │ !! helm_kustomize 113L 2C 5m CC=17 ←0\n │ helm_ansible 94L 2C 4m CC=11 ←0\n │ migration-rpi5.yaml 85L 0C 0m CC=0.0 ←0\n │ README.md 81L 0C 0m CC=0.0 ←0\n │ migration.yaml 72L 0C 0m CC=0.0 ←0\n │ README.md 67L 0C 0m CC=0.0 ←0\n │ waveshare-8-inch-dsi.md 64L 0C 0m CC=0.0 ←0\n │ README.md 63L 0C 0m CC=0.0 ←0\n │ fleet.yaml 62L 0C 0m CC=0.0 ←0\n │ migration.yaml 62L 0C 0m CC=0.0 ←0\n │ README.md 62L 0C 0m CC=0.0 ←0\n │ migration.yaml 61L 0C 0m CC=0.0 ←0\n │ official-dsi-7-inch.md 58L 0C 0m CC=0.0 ←0\n │ README.md 55L 0C 0m CC=0.0 ←0\n │ migration.yaml 52L 0C 0m CC=0.0 ←0\n │ migration.yaml 52L 0C 0m CC=0.0 ←0\n │ migration.md 51L 0C 0m CC=0.0 ←0\n │ README.md 49L 0C 0m CC=0.0 ←0\n │ README.md 48L 0C 0m CC=0.0 ←0\n │ migration.yaml 46L 0C 0m CC=0.0 ←0\n │ enable-i2c-spi.md 45L 0C 0m CC=0.0 ←0\n │ README.md 45L 0C 0m CC=0.0 ←0\n │ migration.md 45L 0C 0m CC=0.0 ←0\n │ migration.yaml 44L 0C 0m CC=0.0 ←0\n │ README.md 44L 0C 0m CC=0.0 ←0\n │ migration.yaml 43L 0C 0m CC=0.0 ←0\n │ README.md 41L 0C 0m CC=0.0 ←0\n │ README.md 41L 0C 0m CC=0.0 ←0\n │ README.md 40L 0C 0m CC=0.0 ←0\n │ README.md 40L 0C 0m CC=0.0 ←0\n │ migration.yaml 40L 0C 0m CC=0.0 ←0\n │ migration.md 39L 0C 0m CC=0.0 ←0\n │ 14-blue-green.yaml 38L 0C 0m CC=0.0 ←0\n │ migration.yaml 37L 0C 0m CC=0.0 ←0\n │ 15-canary.yaml 36L 0C 0m CC=0.0 ←0\n │ README.md 36L 0C 0m CC=0.0 ←0\n │ 16-auto-rollback.yaml 35L 0C 0m CC=0.0 ←0\n │ migration.yaml 35L 0C 0m CC=0.0 ←0\n │ README.md 35L 0C 0m CC=0.0 ←0\n │ prod.yaml 34L 0C 0m CC=0.0 ←0\n │ 13-kiosk-appliance.yaml 33L 0C 0m CC=0.0 ←0\n │ staging.yaml 33L 0C 0m CC=0.0 ←0\n │ README.md 29L 0C 0m CC=0.0 ←0\n │ README.md 29L 0C 0m CC=0.0 ←0\n │ README.md 29L 0C 0m CC=0.0 ←0\n │ dev.yaml 28L 0C 0m CC=0.0 ←0\n │ redeploy.yaml 11L 0C 0m CC=0.0 ←0\n │ redeploy.yaml 6L 0C 0m CC=0.0 ←0\n │ redeploy.yaml 6L 0C 0m CC=0.0 ←0\n │ redeploy.yaml 6L 0C 0m CC=0.0 ←0\n │ redeploy.yaml 5L 0C 0m CC=0.0 ←0\n │ redeploy.yaml 5L 0C 0m CC=0.0 ←0\n │ tls.yml 4L 0C 0m CC=0.0 ←0\n │ redeploy.yaml 4L 0C 0m CC=0.0 ←0\n │ redeploy.yaml 3L 0C 0m CC=0.0 ←0\n │\n redeploy/ CC̄=5.0 ←in:97 →out:6\n │ !! models 1096L 34C 30m CC=19 ←18\n │ !! discovery 789L 2C 26m CC=17 ←5\n │ !! planner 621L 1C 21m CC=10 ←5\n │ !! handlers 616L 0C 20m CC=16 ←2\n │ !! audit 609L 6C 32m CC=14 ←1\n │ !! commands 594L 0C 8m CC=26 ←0\n │ !! plan_apply 505L 0C 11m CC=13 ←0\n │ heal 482L 2C 20m CC=8 ←1\n │ hardware 464L 0C 11m CC=13 ←0\n │ !! docker_compose 443L 1C 11m CC=37 ←0\n │ templates 419L 6C 13m CC=9 ←0\n │ !! workflow 418L 3C 12m CC=18 ←0\n │ patterns 407L 4C 11m CC=5 ←1\n │ !! loader 403L 3C 12m CC=25 ←5\n │ !! fleet 396L 6C 23m CC=25 ←1\n │ display 389L 0C 25m CC=9 ←6\n │ !! import_ 357L 0C 8m CC=22 ←0\n │ executor 354L 1C 17m CC=14 ←1\n │ !! helpers 349L 0C 10m CC=25 ←2\n │ !! bump_fix 348L 0C 12m CC=17 ←0\n │ !! blueprint 333L 0C 8m CC=20 ←0\n │ mcp_server 314L 0C 14m CC=5 ←2\n │ observe 313L 3C 14m CC=12 ←0\n │ schema 309L 0C 6m CC=14 ←2\n │ ssh 301L 4C 17m CC=7 ←0\n │ !! device_map 299L 0C 5m CC=20 ←0\n │ steps 294L 0C 7m CC=7 ←0\n │ !! config_hints 289L 1C 15m CC=26 ←0\n │ !! compose 287L 1C 13m CC=21 ←0\n │ bump 284L 0C 6m CC=13 ←3\n │ hardware_diagnostic 282L 1C 11m CC=14 ←0\n │ parser 280L 1C 9m CC=14 ←3\n │ probes 277L 0C 9m CC=13 ←1\n │ builtins 275L 0C 1m CC=1 ←0\n │ base 275L 7C 13m CC=7 ←1\n │ !! prompt_cmd 264L 0C 4m CC=15 ←0\n │ scanner 262L 0C 18m CC=13 ←1\n │ parser 261L 2C 8m CC=8 ←0\n │ exec_ 251L 0C 6m CC=10 ←0\n │ op3_bridge 250L 0C 5m CC=10 ←3\n │ !! devices 226L 0C 4m CC=22 ←0\n │ runner 224L 1C 5m CC=13 ←0\n │ !! state_apply 222L 4C 9m CC=18 ←2\n │ !! commits 218L 2C 3m CC=18 ←2\n │ templates.yaml 215L 0C 0m CC=0.0 ←0\n │ docker_steps 211L 2C 6m CC=7 ←0\n │ !! runner 205L 1C 5m CC=15 ←0\n │ changelog 204L 1C 15m CC=7 ←1\n │ hint_provider 203L 0C 5m CC=8 ←0\n │ fixes 203L 0C 6m CC=7 ←1\n │ parse 190L 0C 10m CC=12 ←0\n │ !! docker_compose 190L 0C 2m CC=20 ←1\n │ compiler 182L 1C 6m CC=11 ←2\n │ __init__ 180L 2C 10m CC=7 ←8\n │ core 179L 0C 7m CC=10 ←6\n │ !! migration 179L 0C 1m CC=19 ←1\n │ !! device_map_renderers 170L 0C 7m CC=22 ←1\n │ manifest 169L 8C 10m CC=6 ←2\n │ notify 168L 0C 7m CC=6 ←0\n │ process_control_template.yaml 164L 0C 0m CC=0.0 ←0\n │ transaction 162L 2C 6m CC=12 ←0\n │ state 161L 1C 13m CC=5 ←2\n │ release 153L 0C 6m CC=7 ←2\n │ __init__ 153L 0C 0m CC=0.0 ←0\n │ __init__ 148L 0C 4m CC=8 ←1\n │ !! compose 146L 0C 6m CC=21 ←1\n │ !! probe 144L 0C 1m CC=26 ←0\n │ git_integration 142L 2C 13m CC=4 ←0\n │ !! extractor 140L 0C 1m CC=22 ←1\n │ monorepo 139L 0C 5m CC=11 ←1\n │ detect 137L 0C 1m CC=11 ←0\n │ decorators 137L 4C 8m CC=3 ←0\n │ export 126L 0C 6m CC=9 ←0\n │ !! audit 126L 0C 1m CC=18 ←0\n │ process_control 123L 0C 3m CC=11 ←0\n │ __init__ 122L 0C 3m CC=5 ←0\n │ !! browser_reload 120L 0C 3m CC=16 ←0\n │ state 118L 0C 4m CC=7 ←0\n │ diff 118L 1C 3m CC=8 ←1\n │ init 111L 0C 1m CC=10 ←0\n │ !! push 110L 0C 1m CC=15 ←0\n │ progress 107L 1C 11m CC=2 ←0\n │ registry 107L 0C 4m CC=14 ←1\n │ git_transaction 105L 2C 5m CC=9 ←0\n │ detector 104L 1C 4m CC=9 ←2\n │ patterns 104L 0C 1m CC=8 ←0\n │ toml_ 104L 1C 3m CC=10 ←0\n │ systemd_reload 98L 0C 2m CC=12 ←0\n │ target 97L 0C 1m CC=10 ←1\n │ yaml_ 94L 1C 3m CC=10 ←0\n │ verify 92L 1C 7m CC=8 ←0\n │ json_ 90L 1C 3m CC=9 ←0\n │ config_txt 88L 1C 2m CC=14 ←1\n │ workflow 87L 0C 3m CC=10 ←0\n │ decider 85L 2C 2m CC=7 ←1\n │ autostart 84L 1C 3m CC=6 ←1\n │ hardware 83L 0C 2m CC=4 ←0\n │ compositors 80L 1C 1m CC=2 ←0\n │ plugin 79L 0C 1m CC=13 ←0\n │ browsers 78L 1C 1m CC=5 ←0\n │ __init__ 77L 0C 0m CC=0.0 ←0\n │ __init__ 76L 1C 4m CC=4 ←37\n │ inspect 73L 0C 2m CC=4 ←0\n │ applier 72L 0C 3m CC=4 ←3\n │ output_profiles 68L 1C 2m CC=5 ←0\n │ regex 65L 1C 2m CC=5 ←0\n │ __init__ 65L 1C 5m CC=2 ←3\n │ loop_detector 61L 2C 4m CC=5 ←0\n │ __init__ 59L 0C 0m CC=0.0 ←0\n │ hardware_rules 56L 0C 3m CC=3 ←0\n │ status 55L 0C 1m CC=12 ←0\n │ mcp_cmd 54L 0C 1m CC=1 ←0\n │ __init__ 52L 0C 0m CC=0.0 ←0\n │ log_writer 51L 0C 1m CC=6 ←0\n │ panels 51L 1C 5m CC=2 ←2\n │ base 49L 1C 5m CC=3 ←0\n │ kiosk 49L 0C 0m CC=0.0 ←0\n │ waveshare 48L 0C 0m CC=0.0 ←0\n │ spec_loader 47L 2C 1m CC=4 ←0\n │ diagnose 47L 0C 1m CC=5 ←0\n │ data_sync 45L 0C 2m CC=7 ←0\n │ hardware 45L 0C 1m CC=13 ←1\n │ exceptions 44L 6C 4m CC=1 ←0\n │ rollback 44L 0C 1m CC=8 ←1\n │ __init__ 44L 0C 0m CC=0.0 ←0\n │ infra 43L 0C 2m CC=8 ←1\n │ query 42L 0C 1m CC=5 ←3\n │ hyperpixel 41L 0C 0m CC=0.0 ←0\n │ context 39L 1C 3m CC=1 ←0\n │ __init__ 37L 0C 0m CC=0.0 ←0\n │ migration 34L 0C 1m CC=9 ←1\n │ diff 33L 0C 1m CC=1 ←0\n │ raspi_config 32L 0C 1m CC=3 ←1\n │ __init__ 30L 0C 0m CC=0.0 ←0\n │ models 26L 2C 0m CC=0.0 ←0\n │ plain 24L 1C 2m CC=2 ←0\n │ __init__ 24L 0C 0m CC=0.0 ←0\n │ __init__ 18L 0C 0m CC=0.0 ←0\n │ official 18L 0C 0m CC=0.0 ←0\n │ loader 17L 0C 1m CC=3 ←1\n │ __init__ 15L 0C 0m CC=0.0 ←0\n │ exceptions 12L 1C 1m CC=1 ←0\n │ __init__ 11L 0C 0m CC=0.0 ←0\n │ __init__ 8L 0C 0m CC=0.0 ←0\n │ __init__ 8L 0C 0m CC=0.0 ←0\n │ __init__ 6L 0C 0m CC=0.0 ←0\n │ __init__ 6L 0C 0m CC=0.0 ←0\n │ __init__ 5L 0C 0m CC=0.0 ←0\n │ remote 4L 0C 0m CC=0.0 ←0\n │ __init__ 4L 0C 0m CC=0.0 ←0\n │ __init__ 4L 0C 0m CC=0.0 ←0\n │ __init__ 2L 0C 0m CC=0.0 ←0\n │ __init__ 1L 0C 0m CC=0.0 ←0\n │ __init__ 1L 0C 0m CC=0.0 ←0\n │ __init__ 1L 0C 0m CC=0.0 ←0\n │ __init__ 0L 0C 0m CC=0.0 ←0\n │\n ./ CC̄=0.0 ←in:0 →out:0\n │ !! SUMR.md 2865L 51C 140m CC=0.0 ←0\n │ !! SUMD.md 2849L 51C 839m CC=0.0 ←1\n │ !! CHANGELOG.md 1133L 0C 1m CC=0.0 ←0\n │ !! README.md 1046L 0C 1m CC=0.0 ←0\n │ !! goal.yaml 512L 0C 0m CC=0.0 ←0\n │ REFACTORING.md 399L 6C 9m CC=0.0 ←0\n │ TODO.md 198L 1C 11m CC=0.0 ←0\n │ DOQL-INTEGRATION.md 197L 0C 3m CC=0.0 ←8\n │ sumd.json 156L 0C 0m CC=0.0 ←0\n │ pyproject.toml 73L 0C 0m CC=0.0 ←0\n │ REPAIR_LOG.md 37L 0C 0m CC=0.0 ←0\n │ project.sh 35L 0C 0m CC=0.0 ←0\n │ pyqual.yaml 32L 0C 0m CC=0.0 ←0\n │ tree.sh 1L 0C 0m CC=0.0 ←0\n │ Makefile 0L 0C 0m CC=0.0 ←0\n │\n docs/ CC̄=0.0 ←in:4 →out:0\n │ !! README.md 2543L 0C 1m CC=0.0 ←0\n │ dsl-migration.md 478L 0C 13m CC=0.0 ←0\n │ fleet.md 366L 0C 1m CC=0.0 ←0\n │ patterns.md 304L 1C 4m CC=0.0 ←0\n │ observe.md 302L 0C 0m CC=0.0 ←0\n │ markpact-implementation-plan.md 284L 0C 1m CC=0.0 ←4\n │ README.md 202L 1C 2m CC=0.0 ←0\n │ markpact-audit.md 81L 0C 0m CC=0.0 ←0\n │ op3-migration.md 44L 0C 0m CC=0.0 ←0\n │\n project/ CC̄=0.0 ←in:0 →out:0\n │ !! calls.yaml 6319L 0C 0m CC=0.0 ←0\n │ !! map.toon.yaml 1774L 0C 733m CC=0.0 ←0\n │ !! context.md 728L 0C 0m CC=0.0 ←0\n │ !! validation.toon.yaml 683L 0C 0m CC=0.0 ←0\n │ !! calls.toon.yaml 533L 0C 0m CC=0.0 ←0\n │ analysis.toon.yaml 427L 0C 0m CC=0.0 ←0\n │ README.md 339L 0C 0m CC=0.0 ←0\n │ README.md 329L 0C 0m CC=0.0 ←0\n │ duplication.toon.yaml 125L 0C 0m CC=0.0 ←0\n │ evolution.toon.yaml 82L 0C 0m CC=0.0 ←0\n │ project.toon.yaml 62L 0C 0m CC=0.0 ←0\n │ context.md 51L 0C 0m CC=0.0 ←0\n │ prompt.txt 47L 0C 0m CC=0.0 ←0\n │ analysis.toon.yaml 16L 0C 0m CC=0.0 ←0\n │\n code2llm_output/ CC̄=0.0 ←in:0 →out:0\n │ !! context.md 722L 0C 0m CC=0.0 ←0\n │ README.md 329L 0C 0m CC=0.0 ←0\n │ analysis.toon.yaml 161L 0C 0m CC=0.0 ←0\n │\n .redeploy/ CC̄=0.0 ←in:0 →out:0\n │ version.yaml 30L 0C 0m CC=0.0 ←0\n │ migration-local-92efc860.yaml 12L 0C 0m CC=0.0 ←0\n │ migration-local-e4114daa.yaml 11L 0C 0m CC=0.0 ←0\n │ test-local-63f620b6.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-68ae2b20.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-be94eb0c.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-6bb4cec7.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-c05a99a2.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-ec3c5638.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-1862711e.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-bcb75e42.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-ec6ccce4.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-eac354f9.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-ed7da478.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-46c5e2ce.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-abe8802f.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-831fd1ab.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-0e863125.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-2859ad55.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-e1009318.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-563ceb24.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-036bc2a0.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-35782b9c.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-4d4cf12b.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-f868d117.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-09b68243.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-ab92e6d9.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-ee51c059.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-c1ec6b35.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-ea908429.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-5e8acada.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-c89d7b36.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-7f5ddd97.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-179edfed.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-e3a0f31a.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-6279ef2c.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-24cd498c.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-efd3d620.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-e322f022.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-3ad44506.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-9cc88960.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-50622a24.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-df0d6ff6.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-c9849e24.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-56cb0635.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-d3c0fad8.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-891787e9.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-0a0a5446.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-9c9d5826.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-da199855.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-db469906.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-a70e54ce.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-ad30ec23.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-a929f336.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-4cea1066.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-cba6eec3.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-5a1d7483.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-e069dd9f.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-36935faf.yaml 10L 0C 0m CC=0.0 ←0\n │ test-local-1d287d51.yaml 10L 0C 0m CC=0.0 ←0\n │ infra-local-9dd2f59b.yaml 0L 0C 0m CC=0.0 ←0\n │\n scripts/ CC̄=0.0 ←in:0 →out:0\n │ quality_gate 48L 0C 0m CC=0.0 ←0\n │\n reports/ CC̄=0.0 ←in:0 →out:0\n │ hardware-108.yaml 224L 0C 0m CC=0.0 ←0\n │ hardware-109.yaml 200L 0C 0m CC=0.0 ←0\n │\n ── zero ──\n .redeploy/state/infra-local-9dd2f59b.yaml 0L\n Makefile 0L\n redeploy/blueprint/generators/__init__.py 0L\n\nCOUPLING:\n redeploy.cli redeploy redeploy.dsl_python DOQL-INTEGRATION redeploy.version redeploy.apply redeploy.heal redeploy.markpact redeploy.iac redeploy.plan redeploy.detect redeploy.dsl redeploy.blueprint redeploy.hardware redeploy.plugins\n redeploy.cli ── 52 ←1 4 21 10 3 2 5 2 7 3 2 !! fan-out\n redeploy ←52 ── ←3 ←1 ←2 ←9 2 ←7 1 ←6 1 ←2 ←1 ←5 hub\n redeploy.dsl_python 1 3 ── 21 1 !! fan-out\n DOQL-INTEGRATION ←4 ←21 ── hub\n redeploy.version ←21 1 ←1 ── hub\n redeploy.apply ←10 2 ── 2 3 hub\n redeploy.heal 9 ── 1 !! fan-out\n redeploy.markpact ←3 3 ←2 ── ←1 hub\n redeploy.iac ←2 7 1 ── !! fan-out\n redeploy.plan ←5 3 ←1 ── hub\n redeploy.detect ←2 6 ── \n redeploy.dsl ←7 1 ── hub\n redeploy.blueprint ←3 2 ── \n redeploy.hardware ←2 1 ←3 ── hub\n redeploy.plugins 5 ──\n CYCLES: none\n HUB: redeploy.markpact/ (fan-in=8)\n HUB: redeploy/ (fan-in=97)\n HUB: DOQL-INTEGRATION/ (fan-in=25)\n HUB: redeploy.dsl/ (fan-in=8)\n HUB: redeploy.version/ (fan-in=22)\n HUB: redeploy.plan/ (fan-in=7)\n HUB: redeploy.hardware/ (fan-in=5)\n HUB: redeploy.apply/ (fan-in=11)\n SMELL: redeploy.cli/ fan-out=116 → split needed\n SMELL: redeploy.dsl_python/ fan-out=26 → split needed\n SMELL: redeploy.iac/ fan-out=8 → split needed\n SMELL: redeploy.apply/ fan-out=9 → split needed\n SMELL: redeploy.heal/ fan-out=11 → split needed\n\nEXTERNAL:\n validation: run `vallm batch .` → validation.toon\n duplication: run `redup scan .` → duplication.toon\n```",
"level": 2
},
{
"name": "# duplication (`project/duplication.toon.yaml`)",
"type": "unknown",
"content": "```toon markpact:analysis path=project/duplication.toon.yaml\n# redup/duplication | 11 groups | 157f 26383L | 2026-04-21\n\nSUMMARY:\n files_scanned: 157\n total_lines: 26383\n dup_groups: 11\n dup_fragments: 22\n saved_lines: 190\n scan_ms: 5440\n\nHOTSPOTS[7] (files with most duplication):\n redeploy/heal.py dup=112L groups=5 frags=5 (0.4%)\n redeploy/heal/hint_provider.py dup=109L groups=4 frags=4 (0.4%)\n redeploy/cli/commands/version/helpers.py dup=38L groups=2 frags=2 (0.1%)\n redeploy/cli/commands/version/release.py dup=38L groups=2 frags=2 (0.1%)\n redeploy/hardware/fixes.py dup=26L groups=1 frags=2 (0.1%)\n examples/redeploy_iac_parsers/argocd_flux.py dup=20L groups=1 frags=2 (0.1%)\n redeploy/apply/handlers.py dup=16L groups=1 frags=2 (0.1%)\n\nDUPLICATES[11] (ranked by impact):\n [67d15ccee9577f3c] ! EXAC ask_llm L=71 N=2 saved=71 sim=1.00\n redeploy/heal/hint_provider.py:86-156 (ask_llm)\n redeploy/heal.py:97-167 (ask_llm)\n [ba06f7b6ebdc9a24] EXAC apply_fix_to_spec L=23 N=2 saved=23 sim=1.00\n redeploy/heal/hint_provider.py:159-181 (apply_fix_to_spec)\n redeploy/heal.py:170-192 (apply_fix_to_spec)\n [bb546964bbb3b9b9] EXAC _resolve_package_release_git_config L=22 N=2 saved=22 sim=1.00\n redeploy/cli/commands/version/helpers.py:60-81 (_resolve_package_release_git_config)\n redeploy/cli/commands/version/release.py:114-135 (_resolve_package_release_git_config)\n [7764f64185066b87] EXAC _resolve_package_release_changelog_config L=16 N=2 saved=16 sim=1.00\n redeploy/cli/commands/version/helpers.py:84-99 (_resolve_package_release_changelog_config)\n redeploy/cli/commands/version/release.py:138-153 (_resolve_package_release_changelog_config)\n [834af96e195aeafb] STRU fix_enable_i2c L=13 N=2 saved=13 sim=1.00\n redeploy/hardware/fixes.py:137-149 (fix_enable_i2c)\n redeploy/hardware/fixes.py:152-164 (fix_enable_spi)\n [6378b1bc4c001c05] STRU can_parse L=10 N=2 saved=10 sim=1.00\n examples/redeploy_iac_parsers/argocd_flux.py:27-36 (can_parse)\n examples/redeploy_iac_parsers/argocd_flux.py:81-90 (can_parse)\n [af902116d9805742] EXAC _load_dotenv L=9 N=2 saved=9 sim=1.00\n redeploy/cli/commands/bump_fix.py:163-171 (_load_dotenv)\n redeploy/cli/commands/plan_apply.py:480-489 (_load_dotenv)\n [fc600e8d2f11c2ec] EXAC collect_diagnostics L=8 N=2 saved=8 sim=1.00\n redeploy/heal/hint_provider.py:76-83 (collect_diagnostics)\n redeploy/heal.py:87-94 (collect_diagnostics)\n [069a3d8b69b2d778] STRU run_docker_build L=8 N=2 saved=8 sim=1.00\n redeploy/apply/handlers.py:74-81 (run_docker_build)\n redeploy/apply/handlers.py:84-91 (run_podman_build)\n [2bcb64b1eb9fa406] EXAC _ssh L=7 N=2 saved=7 sim=1.00\n redeploy/heal/hint_provider.py:67-73 (_ssh)\n redeploy/heal.py:78-84 (_ssh)\n [cd12ee27f7030458] EXAC reset L=3 N=2 saved=3 sim=1.00\n redeploy/heal/loop_detector.py:55-57 (reset)\n redeploy/heal.py:271-273 (reset)\n\nREFACTOR[11] (ranked by priority):\n [1] ◐ extract_module → redeploy/utils/ask_llm.py\n WHY: 2 occurrences of 71-line block across 2 files — saves 71 lines\n FILES: redeploy/heal.py, redeploy/heal/hint_provider.py\n [2] ○ extract_function → redeploy/utils/apply_fix_to_spec.py\n WHY: 2 occurrences of 23-line block across 2 files — saves 23 lines\n FILES: redeploy/heal.py, redeploy/heal/hint_provider.py\n [3] ○ extract_function → redeploy/cli/commands/version/utils/_resolve_package_release_git_config.py\n WHY: 2 occurrences of 22-line block across 2 files — saves 22 lines\n FILES: redeploy/cli/commands/version/helpers.py, redeploy/cli/commands/version/release.py\n [4] ○ extract_function → redeploy/cli/commands/version/utils/_resolve_package_release_changelog_config.py\n WHY: 2 occurrences of 16-line block across 2 files — saves 16 lines\n FILES: redeploy/cli/commands/version/helpers.py, redeploy/cli/commands/version/release.py\n [5] ○ extract_function → redeploy/hardware/utils/fix_enable_i2c.py\n WHY: 2 occurrences of 13-line block across 1 files — saves 13 lines\n FILES: redeploy/hardware/fixes.py\n [6] ○ extract_function → examples/redeploy_iac_parsers/utils/can_parse.py\n WHY: 2 occurrences of 10-line block across 1 files — saves 10 lines\n FILES: examples/redeploy_iac_parsers/argocd_flux.py\n [7] ○ extract_function → redeploy/cli/commands/utils/_load_dotenv.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: redeploy/cli/commands/bump_fix.py, redeploy/cli/commands/plan_apply.py\n [8] ○ extract_function → redeploy/utils/collect_diagnostics.py\n WHY: 2 occurrences of 8-line block across 2 files — saves 8 lines\n FILES: redeploy/heal.py, redeploy/heal/hint_provider.py\n [9] ○ extract_function → redeploy/apply/utils/run_docker_build.py\n WHY: 2 occurrences of 8-line block across 1 files — saves 8 lines\n FILES: redeploy/apply/handlers.py\n [10] ○ extract_function → redeploy/utils/_ssh.py\n WHY: 2 occurrences of 7-line block across 2 files — saves 7 lines\n FILES: redeploy/heal.py, redeploy/heal/hint_provider.py\n [11] ○ extract_class → redeploy/utils/reset.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: redeploy/heal.py, redeploy/heal/loop_detector.py\n\nQUICK_WINS[9] (low risk, high savings — do first):\n [2] extract_function saved=23L → redeploy/utils/apply_fix_to_spec.py\n FILES: heal.py, hint_provider.py\n [3] extract_function saved=22L → redeploy/cli/commands/version/utils/_resolve_package_release_git_config.py\n FILES: helpers.py, release.py\n [4] extract_function saved=16L → redeploy/cli/commands/version/utils/_resolve_package_release_changelog_config.py\n FILES: helpers.py, release.py\n [5] extract_function saved=13L → redeploy/hardware/utils/fix_enable_i2c.py\n FILES: fixes.py\n [6] extract_function saved=10L → examples/redeploy_iac_parsers/utils/can_parse.py\n FILES: argocd_flux.py\n [7] extract_function saved=9L → redeploy/cli/commands/utils/_load_dotenv.py\n FILES: bump_fix.py, plan_apply.py\n [8] extract_function saved=8L → redeploy/utils/collect_diagnostics.py\n FILES: heal.py, hint_provider.py\n [9] extract_function saved=8L → redeploy/apply/utils/run_docker_build.py\n FILES: handlers.py\n [10] extract_function saved=7L → redeploy/utils/_ssh.py\n FILES: heal.py, hint_provider.py\n\nEFFORT_ESTIMATE (total ≈ 7.5h):\n hard ask_llm saved=71L ~213min\n medium apply_fix_to_spec saved=23L ~46min\n medium _resolve_package_release_git_config saved=22L ~44min\n medium _resolve_package_release_changelog_config saved=16L ~32min\n easy fix_enable_i2c saved=13L ~26min\n easy can_parse saved=10L ~20min\n easy _load_dotenv saved=9L ~18min\n easy collect_diagnostics saved=8L ~16min\n easy run_docker_build saved=8L ~16min\n easy _ssh saved=7L ~14min\n ... +1 more (~6min)\n\nMETRICS-TARGET:\n dup_groups: 11 → 0\n saved_lines: 190 lines recoverable\n```",
"level": 2
},
{
"name": "# evolution / churn (`project/evolution.toon.yaml`)",
"type": "unknown",
"content": "```toon markpact:analysis path=project/evolution.toon.yaml\n# code2llm/evolution | 2608 func | 139f | 2026-04-21\n\nNEXT[10] (ranked by impact):\n [1] !! SPLIT redeploy/models.py\n WHY: 1096L, 34 classes, max CC=19\n EFFORT: ~4h IMPACT: 20824\n\n [2] !! SPLIT redeploy/discovery.py\n WHY: 789L, 2 classes, max CC=17\n EFFORT: ~4h IMPACT: 13413\n\n [3] !! SPLIT redeploy/plan/planner.py\n WHY: 621L, 1 classes, max CC=10\n EFFORT: ~4h IMPACT: 6210\n\n [4] !! SPLIT-FUNC DockerComposeParser._parse_service CC=37 fan=23\n WHY: CC=37 exceeds 15\n EFFORT: ~1h IMPACT: 851\n\n [5] !! SPLIT-FUNC version_init CC=26 fan=26\n WHY: CC=26 exceeds 15\n EFFORT: ~1h IMPACT: 676\n\n [6] !! SPLIT-FUNC DockerComposeParser.parse CC=25 fan=24\n WHY: CC=25 exceeds 15\n EFFORT: ~1h IMPACT: 600\n\n [7] ! SPLIT-FUNC device_map_cmd CC=20 fan=28\n WHY: CC=20 exceeds 15\n EFFORT: ~1h IMPACT: 560\n\n [8] !! SPLIT-FUNC probe CC=26 fan=21\n WHY: CC=26 exceeds 15\n EFFORT: ~1h IMPACT: 546\n\n [9] ! SPLIT-FUNC import_cmd CC=21 fan=26\n WHY: CC=21 exceeds 15\n EFFORT: ~1h IMPACT: 546\n\n [10] !! SPLIT-FUNC ConfigHintsParser._parse_k8s_yaml CC=26 fan=20\n WHY: CC=26 exceeds 15\n EFFORT: ~1h IMPACT: 520\n\n\nRISKS[3]:\n ⚠ Splitting redeploy/models.py may break 30 import paths\n ⚠ Splitting redeploy/discovery.py may break 26 import paths\n ⚠ Splitting redeploy/plan/planner.py may break 21 import paths\n\nMETRICS-TARGET:\n CC̄: 1.6 → ≤1.1\n max-CC: 37 → ≤18\n god-modules: 7 → 0\n high-CC(≥15): 37 → ≤18\n hub-types: 0 → ≤0\n\nPATTERNS (language parser shared logic):\n _extract_declarations() in base.py — unified extraction for:\n - TypeScript: interfaces, types, classes, functions, arrow funcs\n - PHP: namespaces, traits, classes, functions, includes\n - Ruby: modules, classes, methods, requires\n - C++: classes, structs, functions, #includes\n - C#: classes, interfaces, methods, usings\n - Java: classes, interfaces, methods, imports\n - Go: packages, functions, structs\n - Rust: modules, functions, traits, use statements\n\n Shared regex patterns per language:\n - import: language-specific import/require/using patterns\n - class: class/struct/trait declarations with inheritance\n - function: function/method signatures with visibility\n - brace_tracking: for C-family languages ({ })\n - end_keyword_tracking: for Ruby (module/class/def...end)\n\n Benefits:\n - Consistent extraction logic across all languages\n - Reduced code duplication (~70% reduction in parser LOC)\n - Easier maintenance: fix once, apply everywhere\n - Standardized FunctionInfo/ClassInfo models\n\nHISTORY:\n prev CC̄=1.6 → now CC̄=1.6\n```",
"level": 2
},
{
"name": "# validation (`project/validation.toon.yaml`)",
"type": "unknown",
"content": "```toon markpact:analysis path=project/validation.toon.yaml\n# vallm batch | 270f | 0✓ 214⚠ 0✗ | 2026-04-21\n\nSUMMARY:\n scanned: 270 passed: 0 (0.0%) warnings: 214 errors: 0 unsupported: 0\n\nWARNINGS[214]{path,score}:\n redeploy/detect/hardware.py,0.68\n issues[4]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,probe_wlr_randr: CC=17 exceeds limit 15,95\n complexity.lizard_cc,warning,_analyze: CC=43 exceeds limit 15,223\n complexity.lizard_length,warning,_analyze: 147 lines exceeds limit 100,223\n redeploy/blueprint/extractor.py,0.71\n issues[3]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,extract_blueprint: CC=31 exceeds limit 15,32\n complexity.lizard_cc,warning,_merge_compose: CC=21 exceeds limit 15,141\n redeploy/blueprint/generators/migration.py,0.71\n issues[3]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,generate_migration: CC=18 exceeds limit 15,17\n complexity.lizard_length,warning,generate_migration: 122 lines exceeds limit 100,17\n redeploy/cli/commands/device_map.py,0.71\n issues[3]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,device_map_cmd: CC=19 exceeds limit 15,55\n complexity.lizard_cc,warning,_render: CC=34 exceeds limit 15,182\n redeploy/cli/commands/hardware.py,0.71\n issues[3]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,hardware: CC=44 exceeds limit 15,62\n complexity.lizard_length,warning,hardware: 129 lines exceeds limit 100,62\n redeploy/cli/commands/import_.py,0.71\n issues[3]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,import_cmd: CC=17 exceeds limit 15,39\n complexity.lizard_cc,warning,_spec_to_migration_yaml: CC=22 exceeds limit 15,187\n redeploy/cli/commands/version.py,0.71\n issues[3]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,version_init: CC=25 exceeds limit 15,410\n complexity.lizard_cc,warning,_bump_single: CC=25 exceeds limit 15,796\n redeploy/detect/templates.py,0.71\n issues[3]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,build_context: CC=36 exceeds limit 15,87\n complexity.lizard_length,warning,_build_templates: 155 lines exceeds limit 100,180\n redeploy/discovery.py,0.71\n issues[3]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,update_registry: CC=17 exceeds limit 15,350\n complexity.lizard_cc,warning,_parse_probe_output: CC=16 exceeds limit 15,618\n redeploy/iac/docker_compose.py,0.71\n issues[3]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,parse: CC=25 exceeds limit 15,168\n complexity.lizard_cc,warning,_parse_service: CC=36 exceeds limit 15,294\n redeploy/iac/parsers/compose.py,0.71\n issues[3]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,parse: CC=19 exceeds limit 15,58\n complexity.lizard_cc,warning,_parse_service: CC=21 exceeds limit 15,116\n redeploy/blueprint/generators/docker_compose.py,0.74\n issues[2]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,_build_service: CC=20 exceeds limit 15,114\n redeploy/cli/commands/audit.py,0.74\n issues[2]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,audit: CC=17 exceeds limit 15,28\n redeploy/cli/commands/blueprint.py,0.74\n issues[2]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,_print_blueprint: CC=16 exceeds limit 15,234\n redeploy/cli/commands/devices.py,0.74\n issues[2]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,devices: CC=22 exceeds limit 15,19\n redeploy/cli/commands/probe.py,0.74\n issues[2]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,probe: CC=26 exceeds limit 15,29\n redeploy/detect/workflow.py,0.74\n issues[2]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,_collect_hosts: CC=18 exceeds limit 15,244\n redeploy/dsl/loader.py,0.74\n issues[2]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,_build_manifest: CC=25 exceeds limit 15,167\n redeploy/fleet.py,0.74\n issues[2]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,verify_expectations: CC=25 exceeds limit 15,138\n redeploy/models.py,0.74\n issues[2]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,apply_to_spec: CC=19 exceeds limit 15,577\n redeploy/plugins/builtin/browser_reload.py,0.74\n issues[2]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,browser_reload: CC=16 exceeds limit 15,33\n redeploy/version/commits.py,0.74\n issues[2]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n complexity.lizard_cc,warning,analyze_commits: CC=18 exceeds limit 15,78\n .redeploy/state/test-local-09b68243.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-24cd498c.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-36935faf.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-46c5e2ce.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-50622a24.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-563ceb24.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-56cb0635.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-5a1d7483.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-6279ef2c.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-63f620b6.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-68ae2b20.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-7f5ddd97.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-831fd1ab.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-891787e9.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-9c9d5826.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-a70e54ce.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-a929f336.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-be94eb0c.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-da199855.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-db469906.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-df0d6ff6.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-e1009318.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-e322f022.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-e3a0f31a.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-ea908429.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-eac354f9.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-ec3c5638.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-ed7da478.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/state/test-local-efd3d620.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n .redeploy/version.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/01-vps-version-bump/migration.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/01-vps-version-bump/redeploy.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/02-k3s-to-docker/migration.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/02-k3s-to-docker/redeploy.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/03-docker-to-podman-quadlet/migration.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/03-docker-to-podman-quadlet/redeploy.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/04-rpi-kiosk/migration-rpi5.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/04-rpi-kiosk/migration.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/04-rpi-kiosk/redeploy.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/05-iot-fleet-ota/migration.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/05-iot-fleet-ota/redeploy.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/06-local-dev/migration.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/06-local-dev/redeploy.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/07-staging-to-prod/migration.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/07-staging-to-prod/redeploy.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/08-rollback/migration.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/08-rollback/redeploy.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/09-fleet-yaml/fleet.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/09-fleet-yaml/redeploy.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/10-multienv/dev.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/10-multienv/prod.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/10-multienv/redeploy.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/10-multienv/staging.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/11-traefik-tls/migration.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/11-traefik-tls/redeploy.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/12-ci-pipeline/migration.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/12-ci-pipeline/redeploy.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/13-kiosk-appliance.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/13-multi-app-monorepo/fleet.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/13-multi-app-monorepo/migration.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/13-multi-app-monorepo/redeploy.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/14-blue-green.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/15-canary.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n examples/yaml/16-auto-rollback.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n goal.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n migration.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n project.sh,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse BASH: Download error: Language 'BASH' not available for download. Available groups: [\"\"all\"\"]\",\n project/calls.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n pyproject.toml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse TOML: Download error: Language 'TOML' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/__init__.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/apply/__init__.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/apply/exceptions.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/apply/executor.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/apply/handlers.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/apply/progress.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/apply/rollback.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/apply/state.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/audit.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/blueprint/__init__.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/blueprint/generators/__init__.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/cli.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/cli/__init__.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/cli/commands/__init__.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/cli/commands/detect.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/cli/commands/diagnose.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/cli/commands/diff.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/cli/commands/exec_.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/cli/commands/export.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/cli/commands/init.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/cli/commands/inspect.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/cli/commands/patterns.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/cli/commands/plan_apply.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/cli/commands/plugin.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/cli/commands/state.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/cli/commands/status.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/cli/commands/target.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/cli/commands/workflow.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/cli/core.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/cli/display.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/data_sync.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/detect/__init__.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/detect/detector.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/detect/probes.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/detect/remote.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/dsl/__init__.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/dsl/parser.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/dsl_python/__init__.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/dsl_python/context.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/dsl_python/decorators.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/dsl_python/docker_steps.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/dsl_python/exceptions.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/dsl_python/runner.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/dsl_python/steps.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/iac/__init__.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/iac/base.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/iac/parsers/__init__.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/iac/registry.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/markpact/__init__.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/markpact/compiler.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/markpact/models.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/markpact/parser.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/observe.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/parse.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/patterns.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/plan/__init__.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/plan/planner.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/plugins/__init__.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/plugins/builtin/__init__.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/plugins/builtin/hardware_diagnostic.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/plugins/builtin/notify.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/plugins/builtin/process_control.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/plugins/builtin/systemd_reload.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/spec_loader.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/ssh.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/steps.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/templates/process_control_template.yaml,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse YAML: Download error: Language 'YAML' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/__init__.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_audit.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_cli.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_data_sync.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_discovery.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_dsl.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_examples.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_executor.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_fleet.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_git_integration.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_iac.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_manifest.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_markpact_compiler.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_markpact_parser.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_models.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_observe.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_parse.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_patterns.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_planner_edge.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_plugins.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_probes.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_public_api.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_resume.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_spec_loader.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_ssh.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_templates.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_verify.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_version.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_version_changelog.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_version_cli.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_version_manifest.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_version_sources.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/tests/test_workflow.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/verify.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/version.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/version/__init__.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/version/bump.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/version/changelog.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/version/diff.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/version/git_integration.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/version/git_transaction.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/version/manifest.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/version/sources/__init__.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/version/sources/base.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/version/sources/json_.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/version/sources/plain.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/version/sources/regex.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/version/sources/toml_.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/version/sources/yaml_.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n redeploy/version/transaction.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n sumd.json,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse JSON: Download error: Language 'JSON' not available for download. Available groups: [\"\"all\"\"]\",\n tests/test_iac.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n tests/test_parse.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n tests/test_redeploy.py,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse PYTHON: Download error: Language 'PYTHON' not available for download. Available groups: [\"\"all\"\"]\",\n tree.sh,0.78\n issues[1]{rule,severity,message,line}:\n syntax.unsupported,warning,\"Could not parse BASH: Download error: Language 'BASH' not available for download. Available groups: [\"\"all\"\"]\",\n```",
"level": 2
},
{
"name": "intent",
"type": "intent",
"content": "Infrastructure migration toolkit: detect → plan → apply",
"level": 2
}
]
}