diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 060e351..b8e2655 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -3,6 +3,9 @@ contact_links: - name: Report a security vulnerability url: https://github.com/anusbutt/Graph_Keeper/security/advisories/new about: Send suspected vulnerabilities privately instead of opening a public issue. + - name: Ask a question or discuss an idea + url: https://github.com/anusbutt/Graph_Keeper/discussions + about: Use Q&A, Ideas, or Design discussions before opening an actionable work item. - name: Read installation and usage guidance url: https://github.com/anusbutt/Graph_Keeper#readme about: Check prerequisites, supported platforms, commands, and recovery guidance. diff --git a/.github/SUPPORT.md b/.github/SUPPORT.md index 08cd39e..01df663 100644 --- a/.github/SUPPORT.md +++ b/.github/SUPPORT.md @@ -5,12 +5,23 @@ the [contributor guide](../CONTRIBUTING.md) when working from source. Include th GraphKeeper, Node.js, npm, Git, jq, shell, and operating-system versions when asking for help. +- Use [Q&A](https://github.com/anusbutt/Graph_Keeper/discussions/categories/q-a) + for installation, usage, recovery, and integration questions. +- Use [Ideas](https://github.com/anusbutt/Graph_Keeper/discussions/categories/ideas) + or [Design discussions](https://github.com/anusbutt/Graph_Keeper/discussions/categories/design-discussions) + for open-ended proposals and architecture tradeoffs before implementation is scoped. +- Use [Show and tell](https://github.com/anusbutt/Graph_Keeper/discussions/categories/show-and-tell) + to share a repository workflow, experiment, or lesson learned. - Use the [bug report form](https://github.com/anusbutt/Graph_Keeper/issues/new?template=bug_report.yml) for reproducible incorrect behavior or diagnostic mismatches. - Use the [feature request form](https://github.com/anusbutt/Graph_Keeper/issues/new?template=feature_request.yml) - for bounded product proposals with evidence and tradeoffs. + for bounded product proposals with evidence, tradeoffs, and a clear finish line. - Follow [SECURITY.md](SECURITY.md) and report suspected vulnerabilities privately. +Discussion does not commit GraphKeeper to a roadmap change. Once an idea has an +accepted direction and actionable scope, track the implementation in an issue and +link the resulting pull request. + Before opening an issue, remove secrets and unnecessary personal data from graph records, evidence, command output, and diagnostics. This open-source project does not provide a private help desk, guaranteed response time, or support for native diff --git a/.github/repository-settings.md b/.github/repository-settings.md index 4a18dc8..3364dae 100644 --- a/.github/repository-settings.md +++ b/.github/repository-settings.md @@ -36,6 +36,23 @@ squash merging so each pull request has one reviewable integration commit. | `breaking-schema` | Incompatible record interpretation | | `good first issue` | Bounded work with explicit acceptance checks | +## Discussions + +Repository Discussions are enabled for open community conversation. Keep these +categories: + +- `Announcements` for maintainer and release news +- `Q&A` for installation, usage, recovery, and integration help +- `Ideas` for possible improvements that are not yet roadmap commitments +- `Design discussions` for architecture, tradeoffs, and future boundaries +- `Show and tell` for real repository workflows and experiments + +Pin +[`Welcome to GraphKeeper Discussions`](https://github.com/anusbutt/Graph_Keeper/discussions/6) +globally. Route reproducible bugs and accepted, bounded work to Issues; route suspected +vulnerabilities to private security reporting. An accepted discussion direction must +be summarized as an actionable issue before implementation begins. + ## Branch protection and required status checks Protect `main` with these required status checks: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f58cbf2..6c8ec3c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -144,6 +144,13 @@ publication depend on temporary workstation load. ## Pull requests and labels +A question, early idea, or unresolved architecture tradeoff belongs in +[GitHub Discussions](https://github.com/anusbutt/Graph_Keeper/discussions). Discussion +does not authorize implementation or commit the project to a roadmap change. Once the +maintainer accepts a direction, summarize the actionable scope in an issue before +opening a pull request. Link the pull request with `Closes #` when it fully +resolves that work. + A pull request must explain the user-visible outcome, include failing-then-passing tests, update documentation, state schema compatibility, and confirm constitutional compliance. Include observed commands and results. Never hide skipped tests or weaken diff --git a/README.md b/README.md index 24b3371..8fe92e8 100644 --- a/README.md +++ b/README.md @@ -149,6 +149,13 @@ When linear JSON scans or concurrent-write collisions become material, a future ## Contributing and release status +Use [GitHub Discussions](https://github.com/anusbutt/Graph_Keeper/discussions) for +usage questions, early ideas, architecture conversations, and real-world show-and-tell. +Use [GitHub Issues](https://github.com/anusbutt/Graph_Keeper/issues) for reproducible +bugs and clearly bounded work. The +[pinned welcome discussion](https://github.com/anusbutt/Graph_Keeper/discussions/6) +explains the categories and how an accepted direction becomes an actionable issue. + See [`CONTRIBUTING.md`](CONTRIBUTING.md) for the development workflow, extension points, and boundaries, [`SUPPORT.md`](.github/SUPPORT.md) for usage help, and [`SECURITY.md`](.github/SECURITY.md) for private vulnerability reporting. Version diff --git a/tests/integration/contributor-docs.test.ts b/tests/integration/contributor-docs.test.ts index f29287a..c4efa5c 100644 --- a/tests/integration/contributor-docs.test.ts +++ b/tests/integration/contributor-docs.test.ts @@ -130,6 +130,7 @@ test('issue and pull-request templates require actionable engineering context', const issueConfig = await read('.github/ISSUE_TEMPLATE/config.yml'); assert.match(issueConfig, /blank_issues_enabled:\s*false/); assert.match(issueConfig, /security\/advisories\/new/); + assert.match(issueConfig, /github\.com\/anusbutt\/Graph_Keeper\/discussions/); const security = await read('.github/SECURITY.md'); assert.match(security, /supported versions.*latest published/is); @@ -138,8 +139,13 @@ test('issue and pull-request templates require actionable engineering context', const support = await read('.github/SUPPORT.md'); assert.match(support, /README.*contributor guide/is); + assert.match(support, /Q&A.*Ideas.*Design discussions.*Show and tell/is); assert.match(support, /bug report.*feature request/is); assert.match(support, /SECURITY\.md/); + + const guide = await read('CONTRIBUTING.md'); + assert.match(guide, /GitHub Discussions.*does not authorize implementation/is); + assert.match(guide, /accepts? a direction.*actionable scope.*issue/is); }); test('CI and repository settings cover all supported platforms and governance', async () => { @@ -164,6 +170,8 @@ test('CI and repository settings cover all supported platforms and governance', assert.match(settings, /Description/); assert.match(settings, /Topics/); assert.match(settings, /Labels/); + assert.match(settings, /Discussions.*Announcements.*Q&A.*Ideas.*Design discussions.*Show and tell/is); + assert.match(settings, /Welcome to GraphKeeper Discussions/); assert.match(settings, /Default branch.*main/is); assert.match(settings, /Branch protection.*required status checks/is); assert.match(settings, /quality-ubuntu.*quality-macos.*quality-windows/is); diff --git a/tests/integration/release-docs.test.ts b/tests/integration/release-docs.test.ts index 8185dea..9b58b9b 100644 --- a/tests/integration/release-docs.test.ts +++ b/tests/integration/release-docs.test.ts @@ -23,6 +23,7 @@ test('release README covers onboarding, operation, recovery, limits, and future /graphkeeper doctor/, /Native PowerShell is not supported/i, /## Recovery and adoption/, + /github\.com\/anusbutt\/Graph_Keeper\/discussions/, /10,000 claims, 2,000 entities, and 1,000 runs/, /SQLite or PostgreSQL/, ]) assert.match(readme, contract);