Skip to content

feat: public-repo hygiene baseline (goal 0028) - #15

Merged
alicoding merged 1 commit into
mainfrom
goal/0028-repo-hygiene
Aug 12, 2026
Merged

feat: public-repo hygiene baseline (goal 0028)#15
alicoding merged 1 commit into
mainfrom
goal/0028-repo-hygiene

Conversation

@alicoding

Copy link
Copy Markdown
Owner

Summary

  • README/SECURITY/CONTRIBUTING/issue-template + OpenSSF Scorecard workflow closing the community-profile gaps a public repo needs (community-profile score was 28%; exposure sweep and LICENSE were already clean).
  • golangci-lint strengthened (gosec/bodyclose/noctx/revive/unparam), fully triaged to zero findings on both build-tag variants — one real bug fixed along the way (mcpserving.Serve's http.Server had no ReadHeaderTimeout, a genuine Slowloris exposure). Every gosec suppression carries an inline justification, never a blanket #nosec.
  • ci.yml's dependency-review step now denies GPL/AGPL-family licenses.
  • docs/SPEC.md §3 records the elkjs EPL-2.0-vs-Apache-2.0 verdict it previously only flagged.
  • Two literal /Users/ali paths de-literalized.

See docs/goals/archive/0028-public-repo-hygiene.md for the full per-item breakdown and acceptance check.

Test plan

  • CGO_ENABLED=0 go test -tags server -count=1 -timeout 600s ./internal/... . — all pass
  • golangci-lint run — 0 issues on both --build-tags=server and desktop build-tag variants
  • Frontend static (tsc --noEmit, npm run lint, npm run boundaries) — clean
  • Full Playwright e2e — 160 passed; 4 known-flaky specs (canvas-click/resizable-table/live-run-state/activity-row timing) reproduced as pass-on-retry in isolation, unrelated to any file this PR touches
  • Local Lefthook pre-commit suite green (go-vet, golangci-lint, go-build ×2, go-test, file-loc-limit, root-file-naming)
  • GitHub private vulnerability reporting enabled live, verified {"enabled":true}

Co-Authored-By: Claude Fable 5 noreply@anthropic.com

https://claude.ai/code/session_01FYwojT8GdUbYSoggbvEFft

README/SECURITY/CONTRIBUTING/issue-template/Scorecard workflow +
golangci-lint strengthening (gosec/bodyclose/noctx/revive/unparam,
fully triaged) + dependency-review deny-licenses + elkjs EPL-2.0
verdict, closing the real community-profile/security gaps a public
repo needs without ceremony (research delivered prior session:
community-profile score 28%, exposure sweep clean, LICENSE already
correct).

- README: full rewrite from the Wails scaffold -- what Mill actually
  is (SPEC §1's thesis, no vendor names), honest pre-1.0 status, and
  an install story that actually works for a stranger (adds the
  Go/Node/Task/Wails3-CLI prerequisites CLAUDE.md's own commands
  assume but never state). CI + new Scorecard badges.
- SECURITY.md: GitHub private vulnerability reporting enabled live
  (verified `{"enabled":true}`) as the report channel, an honest
  scope paragraph (guardrailed command execution, keychain secrets,
  the loopback-only unauthenticated MCP listener), pre-1.0
  rolling-main support note.
- CONTRIBUTING.md + one bug-report issue template (reuses the
  build-identity badge value as the version field). .ls-lint.yml's
  root allowlist extended for SECURITY/CONTRIBUTING with a comment.
- .github/workflows/scorecard.yml from the official ossf/scorecard
  template, action SHAs verified live against upstream tags (not
  assumed), matching this repo's existing pinning style.
- .golangci.yml: gosec/bodyclose/noctx/revive/unparam enabled and
  triaged to zero findings on both the `server` and desktop build-tag
  variants. One real bug found and fixed along the way:
  mcpserving.Serve's http.Server had no ReadHeaderTimeout, a genuine
  Slowloris exposure even on a loopback listener. Every gosec
  suppression carries an inline justification, never blanket #nosec.
  revive's exported/package-comments rules disabled with a recorded
  reason (this repo has never doc-commented every exported symbol;
  enforcing it retroactively is ceremony, not a real finding). Second
  pass (gocritic/prealloc/contextcheck/sqlclosecheck) explicitly named
  as future work in the goal file, not attempted here.
- ci.yml: dependency-review-action gains deny-licenses for the
  GPL/AGPL family (Apache-2.0, Mill's own license, is incompatible
  with copyleft terms).
- docs/SPEC.md §3: elkjs's EPL-2.0-vs-Apache-2.0 verdict recorded
  where SPEC already flagged it -- unmodified dependency, its own
  dynamic-import bundle chunk, no conflict.
- De-literalized the two /Users/ali paths (test-investigator.md,
  launchatlogin_desktop_test.go).

Full local suite green (lint/vet/build/test, both build-tag variants,
frontend static, e2e) -- 4 known-flaky e2e specs (canvas-click/
resizable-table/live-run-state/activity-row timing) reproduced as
pass-on-retry in isolation, unrelated to any file this goal touched.

Goal 0028 delivered and archived; BACKLOG updated.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FYwojT8GdUbYSoggbvEFft
@alicoding
alicoding enabled auto-merge (squash) August 12, 2026 06:23
@alicoding
alicoding merged commit de0acd3 into main Aug 12, 2026
16 checks passed
@alicoding
alicoding deleted the goal/0028-repo-hygiene branch August 12, 2026 06:28
alicoding added a commit that referenced this pull request Aug 15, 2026
README/SECURITY/CONTRIBUTING/issue-template/Scorecard workflow +
golangci-lint strengthening (gosec/bodyclose/noctx/revive/unparam,
fully triaged) + dependency-review deny-licenses + elkjs EPL-2.0
verdict, closing the real community-profile/security gaps a public
repo needs without ceremony (research delivered prior session:
community-profile score 28%, exposure sweep clean, LICENSE already
correct).

- README: full rewrite from the Wails scaffold -- what Mill actually
  is (SPEC §1's thesis, no vendor names), honest pre-1.0 status, and
  an install story that actually works for a stranger (adds the
  Go/Node/Task/Wails3-CLI prerequisites CLAUDE.md's own commands
  assume but never state). CI + new Scorecard badges.
- SECURITY.md: GitHub private vulnerability reporting enabled live
  (verified `{"enabled":true}`) as the report channel, an honest
  scope paragraph (guardrailed command execution, keychain secrets,
  the loopback-only unauthenticated MCP listener), pre-1.0
  rolling-main support note.
- CONTRIBUTING.md + one bug-report issue template (reuses the
  build-identity badge value as the version field). .ls-lint.yml's
  root allowlist extended for SECURITY/CONTRIBUTING with a comment.
- .github/workflows/scorecard.yml from the official ossf/scorecard
  template, action SHAs verified live against upstream tags (not
  assumed), matching this repo's existing pinning style.
- .golangci.yml: gosec/bodyclose/noctx/revive/unparam enabled and
  triaged to zero findings on both the `server` and desktop build-tag
  variants. One real bug found and fixed along the way:
  mcpserving.Serve's http.Server had no ReadHeaderTimeout, a genuine
  Slowloris exposure even on a loopback listener. Every gosec
  suppression carries an inline justification, never blanket #nosec.
  revive's exported/package-comments rules disabled with a recorded
  reason (this repo has never doc-commented every exported symbol;
  enforcing it retroactively is ceremony, not a real finding). Second
  pass (gocritic/prealloc/contextcheck/sqlclosecheck) explicitly named
  as future work in the goal file, not attempted here.
- ci.yml: dependency-review-action gains deny-licenses for the
  GPL/AGPL family (Apache-2.0, Mill's own license, is incompatible
  with copyleft terms).
- docs/SPEC.md §3: elkjs's EPL-2.0-vs-Apache-2.0 verdict recorded
  where SPEC already flagged it -- unmodified dependency, its own
  dynamic-import bundle chunk, no conflict.
- De-literalized the two /Users/ali paths (test-investigator.md,
  launchatlogin_desktop_test.go).

Full local suite green (lint/vet/build/test, both build-tag variants,
frontend static, e2e) -- 4 known-flaky e2e specs (canvas-click/
resizable-table/live-run-state/activity-row timing) reproduced as
pass-on-retry in isolation, unrelated to any file this goal touched.

Goal 0028 delivered and archived; BACKLOG updated.


Claude-Session: https://claude.ai/code/session_01FYwojT8GdUbYSoggbvEFft

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant