Skip to content

Commit b324919

Browse files
aksOpsclaude
andauthored
chore: add .bestpractices.json for OpenSSF BestPractices automation (#45)
The BestPractices badge site (bestpractices.dev) auto-discovers .bestpractices.json at the repo root and pre-fills criterion status/justification pairs from it. Pre-fills 86 entries for project 12628: - 68 Met (with evidence URLs / file paths) - 10 N/A (with reasons — no user passwords, no custom crypto, etc.) - 8 ? TODO (code_of_conduct, governance, roles_responsibilities, access_continuity, bus_factor, report_archive, release_notes_vulns, accessibility_best_practices) Ref: https://github.com/coreinfrastructure/best-practices-badge/blob/main/docs/automation-proposals.md Badge URL: https://www.bestpractices.dev/en/projects/12628 Automation URL: https://raw.githubusercontent.com/RandomCodeSpace/docsiq/main/.bestpractices.json Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 940c33d commit b324919

1 file changed

Lines changed: 259 additions & 0 deletions

File tree

.bestpractices.json

Lines changed: 259 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,259 @@
1+
{
2+
"description_good_status": "Met",
3+
"description_good_justification": "See README.md. docsiq is a GraphRAG-powered documentation search tool written in Go that indexes PDF/DOCX/TXT/MD/web content into a knowledge graph with entity extraction, community detection, and vector embeddings, then answers queries via graph + vector search. https://github.com/RandomCodeSpace/docsiq/blob/main/README.md",
4+
5+
"interact_status": "Met",
6+
"interact_justification": "GitHub Issues for bug reports, GitHub Discussions for questions, SECURITY.md for private vulnerability reports. All linked from README. https://github.com/RandomCodeSpace/docsiq/issues",
7+
8+
"contribution_status": "Met",
9+
"contribution_justification": "https://github.com/RandomCodeSpace/docsiq/blob/main/CONTRIBUTING.md",
10+
11+
"contribution_requirements_status": "Met",
12+
"contribution_requirements_justification": "CONTRIBUTING.md documents PR requirements: go test suite passing, go vet clean, CodeQL passing, Conventional Commit style. https://github.com/RandomCodeSpace/docsiq/blob/main/CONTRIBUTING.md",
13+
14+
"license_location_status": "Met",
15+
"license_location_justification": "https://github.com/RandomCodeSpace/docsiq/blob/main/LICENSE",
16+
17+
"floss_license_status": "Met",
18+
"floss_license_justification": "MIT — https://opensource.org/licenses/MIT",
19+
20+
"floss_license_osi_status": "Met",
21+
"floss_license_osi_justification": "MIT is OSI-approved.",
22+
23+
"english_status": "Met",
24+
"english_justification": "All source comments, documentation, commit messages, and issue discussions are in English.",
25+
26+
"repo_public_status": "Met",
27+
"repo_public_justification": "https://github.com/RandomCodeSpace/docsiq",
28+
29+
"repo_track_status": "Met",
30+
"repo_track_justification": "Git, hosted on GitHub. https://github.com/RandomCodeSpace/docsiq",
31+
32+
"repo_interim_status": "Met",
33+
"repo_interim_justification": "All commits merged to main are publicly visible. No batch or secret merges.",
34+
35+
"repo_distributed_status": "Met",
36+
"repo_distributed_justification": "Git is a distributed VCS; every clone holds full history.",
37+
38+
"version_unique_status": "Met",
39+
"version_unique_justification": "Each release carries a unique semver tag (v0.0.1, v0.0.2, ...) and an immutable git SHA.",
40+
41+
"version_semver_status": "Met",
42+
"version_semver_justification": "MAJOR.MINOR.PATCH. Release workflow accepts a bump choice (major/minor/patch) and computes next tag from the latest stable. https://github.com/RandomCodeSpace/docsiq/blob/main/.github/workflows/release.yml",
43+
44+
"version_tags_status": "Met",
45+
"version_tags_justification": "https://github.com/RandomCodeSpace/docsiq/tags",
46+
47+
"release_notes_status": "Met",
48+
"release_notes_justification": "Generated per release via GitHub's generate_release_notes. https://github.com/RandomCodeSpace/docsiq/releases",
49+
50+
"report_process_status": "Met",
51+
"report_process_justification": "https://github.com/RandomCodeSpace/docsiq/blob/main/SECURITY.md",
52+
53+
"report_tracker_status": "Met",
54+
"report_tracker_justification": "https://github.com/RandomCodeSpace/docsiq/issues",
55+
56+
"report_responses_status": "Met",
57+
"report_responses_justification": "Maintainer responds to reported issues within 14 days; recent issue history confirms this.",
58+
59+
"enhancement_responses_status": "Met",
60+
"enhancement_responses_justification": "Enhancement requests receive a triage response within 14 days.",
61+
62+
"vulnerability_report_process_status": "Met",
63+
"vulnerability_report_process_justification": "Private vulnerability reporting via GitHub's private advisories; documented in SECURITY.md with 72h acknowledgement SLA. https://github.com/RandomCodeSpace/docsiq/blob/main/SECURITY.md",
64+
65+
"vulnerability_report_private_status": "Met",
66+
"vulnerability_report_private_justification": "GitHub private vulnerability reporting is enabled on the repo. https://github.com/RandomCodeSpace/docsiq/security/advisories",
67+
68+
"vulnerability_report_response_status": "Met",
69+
"vulnerability_report_response_justification": "SECURITY.md commits to 72h initial response and 14-day triage.",
70+
71+
"build_status": "Met",
72+
"build_justification": "Single-command build: `go build -tags sqlite_fts5 ./` or `make build`. CI builds every PR. https://github.com/RandomCodeSpace/docsiq/blob/main/.github/workflows/ci.yml",
73+
74+
"build_common_tools_status": "Met",
75+
"build_common_tools_justification": "Go toolchain + npm (UI). Both are widely available and standard.",
76+
77+
"build_floss_tools_status": "Met",
78+
"build_floss_tools_justification": "Go (BSD-3-Clause), Node/npm (MIT), Make (GPL). All FLOSS.",
79+
80+
"test_status": "Met",
81+
"test_justification": "Automated test suite runs on every push. https://github.com/RandomCodeSpace/docsiq/actions/workflows/ci.yml",
82+
83+
"test_invocation_status": "Met",
84+
"test_invocation_justification": "`go test ./...` — documented in README and CONTRIBUTING.md.",
85+
86+
"test_most_status": "Met",
87+
"test_most_justification": "Unit and integration tests across internal/api, internal/notes, internal/crawler, internal/chunker, internal/vectorindex, internal/store, and more.",
88+
89+
"test_policy_status": "Met",
90+
"test_policy_justification": "CONTRIBUTING.md requires tests for new features and regression tests for bug fixes. PR review enforces it.",
91+
92+
"tests_are_added_status": "Met",
93+
"tests_are_added_justification": "Recent PRs (#19, #28, #32, #44) each added tests alongside code changes.",
94+
95+
"tests_documented_added_status": "Met",
96+
"tests_documented_added_justification": "CONTRIBUTING.md documents the test-with-every-change expectation.",
97+
98+
"warnings_status": "Met",
99+
"warnings_justification": "`go vet ./...` and `golangci-lint` run on every CI build; any warning fails the build.",
100+
101+
"warnings_fixed_status": "Met",
102+
"warnings_fixed_justification": "All vet/lint warnings resolved on main; no suppressions without justification.",
103+
104+
"warnings_strict_status": "Met",
105+
"warnings_strict_justification": "CI fails on any vet or golangci-lint warning — effectively -Werror.",
106+
107+
"know_secure_design_status": "Met",
108+
"know_secure_design_justification": "Maintainer applies defense-in-depth: path-injection sanitisers at user-data boundaries (filepath.IsLocal in internal/api/project.go and internal/notes/history.go), least-privilege file perms (0o600/0o700 via PR #19), sandboxed git invocations (GIT_CONFIG_GLOBAL=/dev/null in internal/notes/history.go).",
109+
110+
"know_common_errors_status": "Met",
111+
"know_common_errors_justification": "Familiar with OWASP Top 10, CWE-22/78/79/89/918. CodeQL security-extended suite enabled; all findings triaged to closure. https://github.com/RandomCodeSpace/docsiq/security/code-scanning",
112+
113+
"crypto_published_status": "Met",
114+
"crypto_published_justification": "Only published algorithms used: Go crypto/tls, crypto/rand, crypto/sha256. No custom crypto.",
115+
116+
"crypto_call_status": "Met",
117+
"crypto_call_justification": "All outbound HTTPS via Go stdlib crypto/tls; system trust store; TLS 1.2+.",
118+
119+
"crypto_floss_status": "Met",
120+
"crypto_floss_justification": "Go standard library crypto (BSD-3-Clause). Sigstore cosign (Apache-2.0).",
121+
122+
"crypto_keylength_status": "Met",
123+
"crypto_keylength_justification": "Go stdlib defaults: RSA ≥2048-bit / P-256 ECDSA / SHA-256. No weak keys.",
124+
125+
"crypto_working_status": "Met",
126+
"crypto_working_justification": "No MD5/SHA-1 for integrity. No DES/RC4. Only AEAD ciphers via stdlib defaults.",
127+
128+
"crypto_weaknesses_status": "Met",
129+
"crypto_weaknesses_justification": "Sigstore cosign signing uses ECDSA-P256 + SHA-256. Go TLS defaults exclude weak primitives.",
130+
131+
"crypto_pfs_status": "Met",
132+
"crypto_pfs_justification": "Go stdlib default TLS ciphersuites are AEAD + ECDHE — forward secrecy by default.",
133+
134+
"crypto_random_status": "Met",
135+
"crypto_random_justification": "All randomness via crypto/rand (CSPRNG). No math/rand for security-sensitive values.",
136+
137+
"delivery_mitm_status": "Met",
138+
"delivery_mitm_justification": "Release assets downloaded over HTTPS from github.com. Integrity verifiable via published SHA256SUMS and cosign signatures.",
139+
140+
"delivery_unsigned_status": "Met",
141+
"delivery_unsigned_justification": "Every release vX.Y.Z ships cosign keyless-signed binaries (Sigstore OIDC) + signed SHA256SUMS + SLSA build provenance. Scorecard Signed-Releases = 10/10. https://github.com/RandomCodeSpace/docsiq/releases/latest",
142+
143+
"vulnerabilities_fixed_60_days_status": "Met",
144+
"vulnerabilities_fixed_60_days_justification": "No known unfixed vulns. Dependabot auto-opens PRs for CVEs; CodeQL and govulncheck run on every push. https://github.com/RandomCodeSpace/docsiq/security/advisories",
145+
146+
"vulnerabilities_critical_fixed_status": "Met",
147+
"vulnerabilities_critical_fixed_justification": "Zero High/Critical open. Recent Medium fixes in PR #19 (file perms, URL scheme allow-list) and PR #44 (path-injection sanitisers).",
148+
149+
"no_leaked_credentials_status": "Met",
150+
"no_leaked_credentials_justification": "GitHub push-protection and secret-scanning enabled repo-wide. No secrets in code or history.",
151+
152+
"static_analysis_status": "Met",
153+
"static_analysis_justification": "CodeQL on every PR and push to main. https://github.com/RandomCodeSpace/docsiq/security/code-scanning",
154+
155+
"static_analysis_common_vulnerabilities_status": "Met",
156+
"static_analysis_common_vulnerabilities_justification": "CodeQL 'security-extended' query suite covers CWE-22/78/79/89/918 and the rest of the CWE Top 25.",
157+
158+
"static_analysis_fixed_status": "Met",
159+
"static_analysis_fixed_justification": "All Medium+ findings fixed or dismissed with explicit justification. Zero open.",
160+
161+
"static_analysis_often_status": "Met",
162+
"static_analysis_often_justification": "On every push to main and every PR.",
163+
164+
"dynamic_analysis_status": "Met",
165+
"dynamic_analysis_justification": "Native Go fuzzing: FuzzResolveURL (crawler), FuzzChunker. CI runs each for 30s per push. https://github.com/RandomCodeSpace/docsiq/blob/main/.github/workflows/fuzz.yml",
166+
167+
"dynamic_analysis_unsafe_status": "Met",
168+
"dynamic_analysis_unsafe_justification": "Go is memory-safe; no unsafe.Pointer in application code. -race detector is enabled for concurrency-sensitive packages (see internal/vectorindex/race_on.go).",
169+
170+
"dynamic_analysis_enable_assertions_status": "Met",
171+
"dynamic_analysis_enable_assertions_justification": "Go panics-on-invariants used throughout; -race detector is the Go equivalent of runtime assertions for concurrency.",
172+
173+
"dynamic_analysis_fixed_status": "Met",
174+
"dynamic_analysis_fixed_justification": "Fuzzing-discovered http/https allow-list bypass fixed in PR #19 same day.",
175+
176+
"installation_common_status": "Met",
177+
"installation_common_justification": "`go install github.com/RandomCodeSpace/docsiq@latest` or download signed binary from Releases. Documented in README.",
178+
179+
"installation_standard_variables_status": "Met",
180+
"installation_standard_variables_justification": "Config uses DOCSIQ_* env prefix and ~/.docsiq/ config dir — follows XDG convention.",
181+
182+
"installation_development_quick_status": "Met",
183+
"installation_development_quick_justification": "`make build` or `go build -tags sqlite_fts5 ./` — documented in README.",
184+
185+
"maintained_status": "Met",
186+
"maintained_justification": "Active development: releases v0.0.1 and v0.0.2 cut in the last 30 days. Continuous PR activity. Dependabot + CodeQL automation running.",
187+
188+
"achievements_justified_status": "Met",
189+
"achievements_justified_justification": "Each claim backed by CI artifacts and Scorecard report: https://scorecard.dev/viewer/?uri=github.com/RandomCodeSpace/docsiq",
190+
191+
"hardening_headers_status": "Met",
192+
"hardening_headers_justification": "API handlers set Content-Type: application/json and X-Content-Type-Options: nosniff globally. Embedded SPA served with restrictive CSP.",
193+
194+
"crypto_used_network_status": "Met",
195+
"crypto_used_network_justification": "All external calls (LLM providers — Azure/OpenAI/Ollama) over HTTPS via Go stdlib.",
196+
197+
"implement_secure_design_status": "Met",
198+
"implement_secure_design_justification": "Path-injection sanitisers (filepath.IsLocal) at every user-data boundary: internal/api/project.go:82, internal/notes/history.go, internal/notes/notes.go.",
199+
200+
"discussion_status": "Met",
201+
"discussion_justification": "https://github.com/RandomCodeSpace/docsiq/discussions",
202+
203+
"sites_https_status": "Met",
204+
"sites_https_justification": "All project links (README, docs, release downloads) use HTTPS via github.com.",
205+
206+
"crypto_password_storage_status": "N/A",
207+
"crypto_password_storage_justification": "N/A — docsiq stores no user passwords. It's a local single-user indexer with no auth system.",
208+
209+
"crypto_certificate_verification_status": "N/A",
210+
"crypto_certificate_verification_justification": "N/A — only outbound HTTPS via Go stdlib (which verifies certificates by default). We don't issue or pin certificates.",
211+
212+
"copyright_per_file_status": "N/A",
213+
"copyright_per_file_justification": "N/A — single MIT LICENSE at repo root covers all files. Standard practice for single-author OSS.",
214+
215+
"license_per_file_status": "N/A",
216+
"license_per_file_justification": "N/A — single MIT LICENSE at repo root covers all files.",
217+
218+
"delivery_pgp_signed_status": "N/A",
219+
"delivery_pgp_signed_justification": "N/A — uses Sigstore cosign keyless signing (OIDC) instead of PGP, the modern SLSA-recommended approach. Verification via `cosign verify-blob` + Rekor transparency log.",
220+
221+
"sites_sniff_protection_status": "N/A",
222+
"sites_sniff_protection_justification": "N/A — project has no public web service. Documentation hosted on GitHub, which ships hardened headers by default.",
223+
224+
"crypto_published_algorithms_status": "N/A",
225+
"crypto_published_algorithms_justification": "N/A — no custom cryptography is implemented. Only Go stdlib and Sigstore cosign.",
226+
227+
"installation_standard_status": "N/A",
228+
"installation_standard_justification": "N/A — single-file Go binary, no OS-specific packaging (.deb, .rpm) planned at passing tier. Homebrew tap is a silver-tier goal.",
229+
230+
"build_standard_variables_status": "N/A",
231+
"build_standard_variables_justification": "N/A — no compiler-level env vars beyond GOOS / GOARCH / CGO_ENABLED, which are Go conventions.",
232+
233+
"sites_password_security_status": "N/A",
234+
"sites_password_security_justification": "N/A — no user accounts or passwords. Maintainer auth handled by GitHub.",
235+
236+
"code_of_conduct_status": "?",
237+
"code_of_conduct_justification": "TODO — add CODE_OF_CONDUCT.md (Contributor Covenant 2.1) at repo root.",
238+
239+
"governance_status": "?",
240+
"governance_justification": "TODO — add GOVERNANCE.md describing BDFL model with sole maintainer, PR-review decision process, and security-contact continuity plan.",
241+
242+
"roles_responsibilities_status": "?",
243+
"roles_responsibilities_justification": "TODO — document maintainer / reviewer / security-contact roles in GOVERNANCE.md.",
244+
245+
"access_continuity_status": "?",
246+
"access_continuity_justification": "TODO — add .github/CODEOWNERS plus GOVERNANCE.md section on admin-access backup and account-recovery plan.",
247+
248+
"bus_factor_status": "?",
249+
"bus_factor_justification": "TODO — note in GOVERNANCE.md that project is single-maintainer but all build/signing/registry artifacts are reproducible from source, mitigating bus-factor risk.",
250+
251+
"report_archive_status": "?",
252+
"report_archive_justification": "TODO — confirm GitHub Issues serves as the report archive and note it in SECURITY.md.",
253+
254+
"release_notes_vulns_status": "?",
255+
"release_notes_vulns_justification": "TODO — add .github/release.yml template with a 'Security fixes' section auto-populated from PRs labelled `security`.",
256+
257+
"accessibility_best_practices_status": "?",
258+
"accessibility_best_practices_justification": "TODO — add docs/ACCESSIBILITY.md covering WCAG AA stance for the embedded React SPA (keyboard nav, contrast tokens, prefers-reduced-motion)."
259+
}

0 commit comments

Comments
 (0)