ux: gentle real-project feedback nudge where people actually run the tool

Cloners install and run the tool but rarely reread the README, so the existing
'call for testers' never reaches them. Two low-noise touchpoints instead:
- project_report: a one-line footer linking the real-project test-report issue
  template (the report is the artefact a human reads after a real run);
- load_project: a short 'feedback' field on the result — the first call every
  new user makes.
Anonymised addresses explicitly welcome. No logic change; full suite green.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Nikolay Miroshnichenko
2026-09-08 12:19:20 +02:00
co-authored by Claude Fable 5.1
parent 467772618e
commit 05a0658a3a
2 changed files with 17 additions and 1 deletions
+11
View File
@@ -18,6 +18,8 @@ from .generate_ha import generate_ha_yaml
_SEV_ICON = {"error": "🔴", "warning": "🟡", "info": "🔵"}
FEEDBACK_URL = "https://github.com/NickoScope/nickol-knx-mcp/issues/new?template=real_project_test.yml"
def _section(title: str, findings: list[dict[str, Any]]) -> str:
if not findings:
return f"### {title}\n\n_No issues found._\n"
@@ -119,6 +121,15 @@ def build_report(project: LoadedProject,
"4. Generate ETS CSV/XML and HA YAML, commit to Git, then import into ETS "
"and deploy to Home Assistant.\n"
)
# A gentle, one-line nudge at the very end — the report is the artefact a
# human actually reads after running the tool on a real project, so this is
# where a field report is most likely to happen. Anonymised is fine.
md.append(
"\n---\n*Ran this on a real ETS project? Two lines in a "
f"[real-project test report]({FEEDBACK_URL}) — what it got right, what it "
"got wrong — are what make the next release better. Anonymised addresses "
"are perfectly fine.*\n"
)
summary = {
"ga_count": len(gas),
+6 -1
View File
@@ -21,7 +21,7 @@ from .analyze import (validate_naming, detect_missing_status, detect_dpt_issues,
detect_topology_issues, secure_posture)
from .generate_ha import generate_ha_yaml
from .generate_ets import generate_ets_csv, generate_ets_xml
from .report import build_report
from .report import build_report, FEEDBACK_URL
from .handover import build_handover
from .device_library import decompose_device as _decompose_device, list_recipes
from .appprog_parser import (parse_project as _parse_project,
@@ -95,6 +95,11 @@ def load_project(path: str, password: Optional[str] = None,
"devices": len(proj.devices),
"functions": len(proj.functions),
"ets_tool_version": proj.info.get("tool_version"),
# The first call every new user makes — the one place a gentle nudge for a
# real-project field report reaches exactly the people who ran it.
"feedback": ("Ran this on a real ETS project? Two lines on what it got "
"right/wrong help the next release: "
f"{FEEDBACK_URL} (anonymised is fine)."),
}