diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..6055814 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,86 @@ +name: Bug report +description: Report a defect in ForgeSight +labels: ["bug"] +body: + - type: markdown + attributes: + value: | + Thanks for filing a bug! Please search existing issues first, and do + **not** use this form for security vulnerabilities — see + [SECURITY.md](../blob/main/SECURITY.md) for private reporting. + - type: textarea + id: what-happened + attributes: + label: What happened? + description: A clear description of the bug, including what you expected instead. + placeholder: When I ... I expected ... but instead ... + validations: + required: true + - type: textarea + id: repro + attributes: + label: Minimal reproduction + description: The smallest code / config / command sequence that reproduces it. + render: python + validations: + required: true + - type: textarea + id: traceback + attributes: + label: Traceback / logs + description: Paste the full error output if there is one. + render: shell + validations: + required: false + - type: input + id: version + attributes: + label: ForgeSight version + description: Output of `pip show forgesight` — and the exporter/integration package involved (e.g. `forgesight-prometheus`). + placeholder: "0.1.1" + validations: + required: true + - type: dropdown + id: package + attributes: + label: Which package? + description: The package the bug is in (pick the closest). + options: + - forgesight (facade) / forgesight-core / forgesight-api + - forgesight-otel + - forgesight-prometheus + - forgesight-datadog + - forgesight-clickhouse + - forgesight-langfuse + - forgesight-mcp + - forgesight-fastapi + - forgesight-github + - forgesight-governance + - forgesight-eval + - forgesight-registry + - forgesight-audit + - forgesight-adapters-langgraph / forgesight-adapters-crewai + - Not sure + validations: + required: false + - type: input + id: python + attributes: + label: Python version + placeholder: "3.13.x" + validations: + required: true + - type: input + id: os + attributes: + label: OS + placeholder: "macOS 15 / Ubuntu 24.04 / Windows 11" + validations: + required: false + - type: textarea + id: context + attributes: + label: Additional context + description: Backend/exporter in use, relevant config (redact secrets), anything else. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..9d4b6d7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: Security vulnerability + url: https://github.com/Scaffoldic/forgesight/security/advisories/new + about: Please report security issues privately, not as public issues. See SECURITY.md. + - name: Question / usage help / discussion + url: https://github.com/Scaffoldic/forgesight/discussions + about: For usage questions and open-ended discussion, use Discussions — not the issue tracker. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..04be9b2 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,56 @@ +name: Feature request +description: Suggest a capability or improvement for ForgeSight +labels: ["enhancement"] +body: + - type: markdown + attributes: + value: | + Thanks for the idea! Larger features may need a `feat-NNN` spec under + `docs/features/` before implementation — a maintainer will guide you. + Check the [feature catalogue](../blob/main/docs/features/README.md) to + see if it's already planned. + - type: textarea + id: problem + attributes: + label: What problem does this solve? + description: Describe the use case and the pain, not just the proposed API. + placeholder: When instrumenting agents in production, I need ... because ... + validations: + required: true + - type: textarea + id: proposal + attributes: + label: Proposed solution + description: What should ForgeSight do? Sketch the config / API if you have one. + validations: + required: false + - type: textarea + id: alternatives + attributes: + label: Alternatives considered + description: Other approaches, or how you work around it today. + validations: + required: false + - type: dropdown + id: area + attributes: + label: Area + description: Which part of ForgeSight does this touch? + options: + - Core contracts / domain model + - Instrumentation runtime (spans, context, decorators) + - OTel exporter / semantic conventions + - Backend exporter (Prometheus / Datadog / ClickHouse / Langfuse) + - MCP integration + - FastAPI integration + - GitHub Actions integration + - Framework adapter (LangGraph / CrewAI) + - Governance (budgets / policy / kill-switch) + - Cost / pricing + - Eval / feedback + - Registry / chargeback + - Audit trail + - Docs + - Other / not sure + validations: + required: false diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..f00040f --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,32 @@ +## Summary + + + +## Tests added + +- Unit: +- Integration: +- Conformance (if an SPI is touched): +- Coverage on diff: % (gate is 90%) + +## Local gate output + +``` +✅ ruff format +✅ ruff check +✅ mypy --strict +✅ pytest (coverage ≥ 90%, py3.11–3.13) +✅ gitleaks (no secrets) +``` + +## Checklist + +- [ ] Branch follows convention: `feat-NNN`, `fix-`, `docs-`, or `chore-` +- [ ] One feature / fix / chore — not mixed +- [ ] Conventional Commits on every commit (`feat:` / `fix:` / `docs:` / `test:` / + `refactor:` / `chore:` / `perf:` / `revert:`), subject imperative & ≤ 72 chars +- [ ] Vendor-neutral core preserved (no backend/model-provider SDK in `-api` / `-core`) +- [ ] New/changed SPI has a conformance test +- [ ] `AGENTS.md` updated if conventions changed +- [ ] `CHANGELOG.md` entry added under `[Unreleased]` +- [ ] AI-assisted commits carry a `Co-Authored-By:` trailer