From 1b0b2a200b564ea5462c0684272ea1ee72192113 Mon Sep 17 00:00:00 2001 From: DeployAtlas Date: Mon, 25 May 2026 22:48:04 -0400 Subject: [PATCH] feat: GitHub issue templates + canonical support@simdrive.dev address Adds Forms-style issue templates (bug, feature, license) and a config.yml with documentation/email/security contact links so the now-public repo has a structured triage path at /issues/new/choose. Replaces support@synctek.io with brand-aligned support@simdrive.dev in license error messages, the recovery doc, and the community charter. Adds Support sections to both READMEs pointing at docs/issues/email/security. [INIT-2026-549] Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/ISSUE_TEMPLATE/bug-report.yml | 77 ++++++++++++++++++++++ .github/ISSUE_TEMPLATE/config.yml | 11 ++++ .github/ISSUE_TEMPLATE/feature-request.yml | 40 +++++++++++ .github/ISSUE_TEMPLATE/license-issue.yml | 47 +++++++++++++ README.md | 7 ++ simdrive/README.md | 7 ++ simdrive/docs/RECOVERY.md | 2 +- simdrive/docs/gtm/community_charter.md | 4 +- simdrive/src/simdrive/license/errors.py | 4 +- 9 files changed, 194 insertions(+), 5 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/bug-report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature-request.yml create mode 100644 .github/ISSUE_TEMPLATE/license-issue.yml diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml new file mode 100644 index 0000000..529d205 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -0,0 +1,77 @@ +name: Bug report +description: Report a reproducible bug in SimDrive (CLI, MCP server, journey runner, recordings). +title: "bug: " +labels: ["bug", "triage"] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to file a bug report. Please fill out the + sections below so we can reproduce and triage quickly. For sensitive + billing or license details, email `support@simdrive.dev` instead of + posting publicly. + - type: input + id: simdrive-version + attributes: + label: SimDrive version + description: "Run `simdrive --version` and paste the output." + placeholder: "e.g. simdrive 1.0.0" + validations: + required: true + - type: input + id: host-environment + attributes: + label: Host OS + Xcode + iOS version + description: "macOS version, Xcode version, target iOS / simulator version." + placeholder: "e.g. macOS 15.4, Xcode 16.2, iOS 26.3 simulator" + validations: + required: true + - type: dropdown + id: target-type + attributes: + label: Target type + description: Where were you driving SimDrive? + options: + - Simulator + - Real Device + validations: + required: true + - type: textarea + id: steps-to-reproduce + attributes: + label: Steps to reproduce + description: Minimal reproducer. Commands, MCP calls, or a YAML journey snippet. + placeholder: | + 1. `simdrive session_start --bundle-id com.acme.app` + 2. `simdrive tap --text "Sign In"` + 3. ... + validations: + required: true + - type: textarea + id: expected-behavior + attributes: + label: Expected behavior + description: What did you think would happen? + validations: + required: true + - type: textarea + id: actual-behavior + attributes: + label: Actual behavior + description: What actually happened? Include screenshots if helpful. + validations: + required: true + - type: textarea + id: logs + attributes: + label: Logs / stack trace + description: Paste relevant CLI output, simulator logs, or Python tracebacks. Redact anything sensitive. + render: shell + - type: checkboxes + id: code-of-conduct + attributes: + label: Code of Conduct + description: By submitting this issue you agree to follow the project's Code of Conduct. + options: + - label: I agree to abide by the project's Code of Conduct. + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..97c2d65 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,11 @@ +blank_issues_enabled: false +contact_links: + - name: Documentation + url: https://docs.simdrive.dev + about: Read the docs first — install, MCP wiring, journey runner, troubleshooting. + - name: Email support (private) + url: mailto:support@simdrive.dev + about: For sensitive billing, license, or account details, email us privately instead of opening a public issue. + - name: Security disclosure + url: mailto:security@simdrive.dev + about: Please report security issues privately, not via public issue. We follow responsible disclosure. diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml new file mode 100644 index 0000000..2db49c2 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.yml @@ -0,0 +1,40 @@ +name: Feature request +description: Suggest a new capability or improvement for SimDrive. +title: "feat: " +labels: ["enhancement", "triage"] +body: + - type: markdown + attributes: + value: | + Thanks for the suggestion. Help us understand the problem first; we + prioritize based on user impact and current roadmap. + - type: textarea + id: problem + attributes: + label: Problem + description: What are you trying to do that SimDrive doesn't let you do today? + placeholder: "I want to ... but SimDrive currently ..." + validations: + required: true + - type: textarea + id: proposed-solution + attributes: + label: Proposed solution + description: If you have an idea for how this should work, describe it. Mockups, CLI flags, MCP tool sketches all welcome. + - type: textarea + id: alternatives + attributes: + label: Alternatives considered + description: What workarounds have you tried? What other tools handle this well? + - type: dropdown + id: subscription-tier + attributes: + label: Pro/Team subscriber? + description: Used for prioritization only — paying customers' asks get weighted higher in roadmap planning. + options: + - Free + - Trial + - Pro + - Team + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/license-issue.yml b/.github/ISSUE_TEMPLATE/license-issue.yml new file mode 100644 index 0000000..0061629 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/license-issue.yml @@ -0,0 +1,47 @@ +name: License / billing issue +description: Report a trial, license-key, or billing problem. +title: "license: " +labels: ["license", "triage", "priority"] +body: + - type: markdown + attributes: + value: | + > **For sensitive billing or account details, email + > `support@simdrive.dev` directly rather than posting them publicly + > in this issue.** Use this template for surfacing the failure mode + > so we can fix the product; we will follow up over email for any + > private details (Polar order ID, payment method, refund processing). + - type: dropdown + id: issue-type + attributes: + label: Issue type + options: + - Trial not starting + - Pro key not validating + - Lost license + - Refund request + - Billing question + validations: + required: true + - type: input + id: purchase-email + attributes: + label: Email used for purchase + description: The email address tied to the trial or Polar order. + placeholder: "you@example.com" + validations: + required: true + - type: input + id: polar-order-id + attributes: + label: Polar order ID (if known) + description: From your Polar receipt or account dashboard. + placeholder: "polar_xxx..." + - type: textarea + id: error-message + attributes: + label: Error message (verbatim) + description: Paste the exact CLI error or screenshot text. Include the `code:` field if shown. + render: shell + validations: + required: true diff --git a/README.md b/README.md index cdad221..953e3b1 100644 --- a/README.md +++ b/README.md @@ -142,6 +142,13 @@ the default) remains the fully supported path. See [SECURITY.md](SECURITY.md) for vulnerability reporting and the supported-versions policy. +## Support + +- **Docs:** +- **Bugs / feature requests:** [open an issue](https://github.com/SyncTek-LLC/simdrive/issues/new/choose) +- **Email (private — license, billing, account):** +- **Security disclosures:** + ## License Elastic License 2.0 — see [LICENSE](LICENSE). Free for internal use; prohibits diff --git a/simdrive/README.md b/simdrive/README.md index 211aba5..20f9861 100644 --- a/simdrive/README.md +++ b/simdrive/README.md @@ -158,6 +158,13 @@ See `docs/LIMITATIONS.md` for: `type_text` first-character drop workaround, SSIM-vs-structural-check semantics, SwiftUI half-sheet dismissal, appearance-respring caveats, real-device input scope. +## Support + +- **Docs:** +- **Bugs / feature requests:** [open an issue](https://github.com/SyncTek-LLC/simdrive/issues/new/choose) +- **Email (private — license, billing, account):** +- **Security disclosures:** + ## License Elastic License 2.0 — see `LICENSE`. Free for internal use; prohibits diff --git a/simdrive/docs/RECOVERY.md b/simdrive/docs/RECOVERY.md index 9bd507a..8a8dcae 100644 --- a/simdrive/docs/RECOVERY.md +++ b/simdrive/docs/RECOVERY.md @@ -140,7 +140,7 @@ One-stop reference for every error code and its recovery step. When SimDrive rai **Recovery:** Run `simdrive trial start --email ` to begin a 14-day free trial. ### `trial_rate_limited` -**Recovery:** Try again tomorrow or contact support@synctek.io. +**Recovery:** Try again tomorrow or contact support@simdrive.dev. --- diff --git a/simdrive/docs/gtm/community_charter.md b/simdrive/docs/gtm/community_charter.md index 5a5da8b..b314320 100644 --- a/simdrive/docs/gtm/community_charter.md +++ b/simdrive/docs/gtm/community_charter.md @@ -13,7 +13,7 @@ A place for SpecterQA users to learn from each other, share journeys, discuss MC ## What this is not -A support helpdesk. SpecterQA Pro and Team customers get email support against an SLA — that channel is `support@synctek.io`. Free Engine users get community support here, on the same terms as everyone else: a maintainer or a fellow user might answer; no one is on the hook. +A support helpdesk. SpecterQA Pro and Team customers get email support against an SLA — that channel is `support@simdrive.dev`. Free Engine users get community support here, on the same terms as everyone else: a maintainer or a fellow user might answer; no one is on the hook. --- @@ -67,7 +67,7 @@ Use this template in `#help`: **Expected response time:** community-best-effort. Most questions get an answer within 24 hours; some sit longer. If a question is unanswered after 72 hours, the maintainer (Maurice) will read it on the weekly community sweep. **There is no SLA on free-tier support** — this is not a guarantee, it is a community. -If your question is time-critical and you are a Pro / Team / Enterprise customer, use `support@synctek.io` instead. That channel is read against an SLA. The community is faster on average; the SLA channel is faster in the worst case. +If your question is time-critical and you are a Pro / Team / Enterprise customer, use `support@simdrive.dev` instead. That channel is read against an SLA. The community is faster on average; the SLA channel is faster in the worst case. --- diff --git a/simdrive/src/simdrive/license/errors.py b/simdrive/src/simdrive/license/errors.py index 3182115..48f8327 100644 --- a/simdrive/src/simdrive/license/errors.py +++ b/simdrive/src/simdrive/license/errors.py @@ -200,7 +200,7 @@ def license_key_rotation_required(key_id: str, trusted_ids: list[str]) -> "KeyRo f"Your license was signed with key {key_id!r} but this simdrive build only " f"trusts {trusted_ids!r}. Recovery: upgrade simdrive (`pip install -U simdrive`) " "so it picks up the new signing key, then retry. If you cannot upgrade, " - "contact support@synctek.io to re-issue the license under an older key." + "contact support@simdrive.dev to re-issue the license under an older key." ), details={"key_id": key_id, "trusted_key_ids": trusted_ids}, ) @@ -243,7 +243,7 @@ def trial_rate_limited(ip: str) -> LicenseError: code="trial_rate_limited", message=( f"Too many trial requests from {ip!r} (limit: 5/IP/day). " - "Recovery: try again tomorrow or contact support@synctek.io." + "Recovery: try again tomorrow or contact support@simdrive.dev." ), details={"ip": ip}, )