Make safe reporting reachable from the documentation entrypoints

Accept original failure evidence without another reproduction or a diagnostic export, and place public-sharing precautions before readers leave for GitHub. Keep the shipped documentation index in sync and guard both entrypoints within the README page budget.

Contract-Neutral: Documentation-only intake guidance and regression checks; no runtime, API, collection, authentication or release contract changes.
Change-source: pulse-maintainer
This commit is contained in:
pulse-triage[bot] 2026-10-12 01:46:48 +01:00
parent 297f933d45
commit 3f97cfe27b
4 changed files with 41 additions and 6 deletions

View file

@ -202,12 +202,11 @@ unsolicited pull requests.
## Community and support
- Ask questions in [GitHub Discussions](https://github.com/rcourtman/Pulse/discussions).
- Report reproducible bugs through [GitHub Issues](https://github.com/rcourtman/Pulse/issues).
- Home Assistant users can use the community-maintained
[Pulse add-ons](https://github.com/Kosztyk/homeassistant-addons).
- If Pulse is useful to you, support its development through
[GitHub Sponsors](https://github.com/sponsors/rcourtman) or
[Ko-fi](https://ko-fi.com/rcourtman).
- Report bugs and unexpected outcomes through [GitHub Issues](https://github.com/rcourtman/Pulse/issues).
- Home Assistant users can use the community-maintained [Pulse add-ons](https://github.com/Kosztyk/homeassistant-addons).
- If Pulse is useful to you, support its development through [GitHub Sponsors](https://github.com/sponsors/rcourtman) or [Ko-fi](https://ko-fi.com/rcourtman).
Read the [safe reporting guidance](docs/TROUBLESHOOTING.md#-getting-help) before sharing original evidence. A second reproduction or diagnostics export is not required; do not repeat an attempt that could interrupt workloads or send duplicate notifications. GitHub reports and attachments are public: review them locally and keep credentials and private details out.
## License

View file

@ -4,6 +4,13 @@ Start here for installation, platform setup, security, operations, and Pulse
Intelligence. Commands, configuration keys, image names, API fields, and
product identifiers remain untranslated in localized guides.
**Need help with a failure?** Read the
[safe reporting guidance](TROUBLESHOOTING.md#-getting-help) before sharing
evidence. A second reproduction or diagnostics export is not required; keep
the original evidence if another attempt could interrupt workloads or send
duplicate notifications. GitHub reports and attachments are public: review
them locally and keep credentials and private details out.
## Start here
- [Install Pulse](INSTALL.md) — signed Proxmox/Linux installation, Docker,

View file

@ -4,6 +4,13 @@ Start here for installation, platform setup, security, operations, and Pulse
Intelligence. Commands, configuration keys, image names, API fields, and
product identifiers remain untranslated in localized guides.
**Need help with a failure?** Read the
[safe reporting guidance](TROUBLESHOOTING.md#-getting-help) before sharing
evidence. A second reproduction or diagnostics export is not required; keep
the original evidence if another attempt could interrupt workloads or send
duplicate notifications. GitHub reports and attachments are public: review
them locally and keep credentials and private details out.
## Start here
- [Install Pulse](INSTALL.md) — signed Proxmox/Linux installation, Docker,

View file

@ -17,6 +17,28 @@ def report_guidance() -> str:
class ContributionReportSafetyTest(unittest.TestCase):
def test_help_entrypoints_accept_original_evidence_before_public_sharing(self):
surfaces = (
("README.md", "## Community and support\n", "\n## ", "docs/"),
("docs/README.md", "# Pulse documentation\n", "\n## Start here", ""),
)
for name, start, end, prefix in surfaces:
with self.subTest(surface=name):
text = (ROOT / name).read_text(encoding="utf-8")
entry = " ".join(text.split(start, 1)[1].split(end, 1)[0].split())
self.assertIn(f"({prefix}TROUBLESHOOTING.md#-getting-help)", entry)
self.assertIn("A second reproduction or diagnostics export is not required", entry)
self.assertIn("original evidence", entry)
self.assertIn("interrupt workloads or send duplicate notifications", entry)
self.assertIn("reports and attachments are public", entry)
self.assertIn("review them locally", entry)
self.assertIn("credentials and private details", entry)
self.assertNotIn("Report reproducible bugs", entry)
self.assertEqual(
(ROOT / "docs/README.md").read_bytes(),
(ROOT / "frontend-modern/public/docs/README.md").read_bytes(),
)
def contribution_surfaces(self):
return (
" ".join((ROOT / "CONTRIBUTING.md").read_text(encoding="utf-8").split()),