Adopt library-quality standard: formatting, linting, coverage, and docs site - #2

Draft
AndroidPoet wants to merge 1 commit into
mainfrom
chore/library-standard
Draft

Adopt library-quality standard: formatting, linting, coverage, and docs site#2
AndroidPoet wants to merge 1 commit into
mainfrom
chore/library-standard

Conversation

@AndroidPoet

Copy link
Copy Markdown
Owner

Brings the repo up to our four-pillar library-quality standard. Each pillar is verifiable locally and in CI.

1. Formatting

  • Formatted the whole codebase with gofumpt (stricter gofmt).
  • CI now enforces gofumpt cleanliness (replaces the old plain-gofmt check).
  • gofumpt -l . is empty.

2. Linting / static analysis

  • Added .golangci.yml (golangci-lint v2) enabling errcheck, govet, ineffassign, staticcheck, unused, and gofumpt as a formatter.
  • Wired golangci-lint into CI as a dedicated lint job.
  • Fixed every issue it surfaced:
    • dynamic format string passed to Errorf (now a sentinel errors.New),
    • an ineffectual assignment in launch.go,
    • a capitalized error string in install.go.
  • golangci-lint run ./... reports 0 issues.
  • The fmt.Fprint*-to-writer errcheck noise is intentionally excluded in config (standard, well-known exclusion for CLI output writers).

3. Test coverage

  • make cover runs go test ./... -coverprofile=coverage.out -covermode=atomic plus a func summary; make cover-html produces a browsable HTML report.
  • CI gained a coverage step that uploads coverage.out as an artifact.
  • Coverage artifacts are gitignored.
  • Current total: ~46.7% of statements.

4. Docs site

  • New Next.js documentation site under website/ with project-specific content: Introduction, Getting Started, Command Reference, Configuration, CI & Releases, Launch Readiness, and Agent Output.
  • Teal/cyan theme, animated hero, custom favicon, SEO/OG metadata.
  • Added a Pages deploy workflow (.github/workflows/docs.yml).
  • Verified the site builds and statically exports cleanly (10/10 pages).

Verification

  • go build ./... — pass
  • go vet ./... — pass
  • go test ./... — pass
  • gofumpt -l . — clean
  • golangci-lint run ./... — 0 issues
  • pnpm build (docs) — static export succeeds

No pillars skipped.

Bring shipkit up to the four-pillar library standard:
- Formatting: format the codebase with gofumpt; CI now enforces gofumpt
cleanliness instead of plain gofmt.
- Linting: add .golangci.yml (errcheck, govet, ineffassign, staticcheck,
unused, gofumpt) and wire golangci-lint into CI. Fix the issues it found
(dynamic-format Errorf, ineffectual assignment, capitalized error string).
- Coverage: add `make cover` / `make cover-html` and a CI coverage step that
produces an atomic coverage profile and func summary, uploaded as an artifact.
- Docs: add a Next.js documentation site under website/ with shipkit-specific
content (intro, getting started, command reference, configuration, CI &
releases, launch readiness, agent output) and a Pages deploy workflow.
Also expand the Makefile with fmt/fmt-check/lint/cover targets and ignore
coverage artifacts.
Sign up for freeto 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

@AndroidPoet
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Adopt library-quality standard: formatting, linting, coverage, and docs site - #2

Draft
AndroidPoet wants to merge 1 commit into
mainfrom
chore/library-standard
Draft

Adopt library-quality standard: formatting, linting, coverage, and docs site#2
AndroidPoet wants to merge 1 commit into
mainfrom
chore/library-standard

Conversation

@AndroidPoet

Copy link
Copy Markdown
Owner

Brings the repo up to our four-pillar library-quality standard. Each pillar is verifiable locally and in CI.

1. Formatting

  • Formatted the whole codebase with gofumpt (stricter gofmt).
  • CI now enforces gofumpt cleanliness (replaces the old plain-gofmt check).
  • gofumpt -l . is empty.

2. Linting / static analysis

  • Added .golangci.yml (golangci-lint v2) enabling errcheck, govet, ineffassign, staticcheck, unused, and gofumpt as a formatter.
  • Wired golangci-lint into CI as a dedicated lint job.
  • Fixed every issue it surfaced:
    • dynamic format string passed to Errorf (now a sentinel errors.New),
    • an ineffectual assignment in launch.go,
    • a capitalized error string in install.go.
  • golangci-lint run ./... reports 0 issues.
  • The fmt.Fprint*-to-writer errcheck noise is intentionally excluded in config (standard, well-known exclusion for CLI output writers).

3. Test coverage

  • make cover runs go test ./... -coverprofile=coverage.out -covermode=atomic plus a func summary; make cover-html produces a browsable HTML report.
  • CI gained a coverage step that uploads coverage.out as an artifact.
  • Coverage artifacts are gitignored.
  • Current total: ~46.7% of statements.

4. Docs site

  • New Next.js documentation site under website/ with project-specific content: Introduction, Getting Started, Command Reference, Configuration, CI & Releases, Launch Readiness, and Agent Output.
  • Teal/cyan theme, animated hero, custom favicon, SEO/OG metadata.
  • Added a Pages deploy workflow (.github/workflows/docs.yml).
  • Verified the site builds and statically exports cleanly (10/10 pages).

Verification

  • go build ./... — pass
  • go vet ./... — pass
  • go test ./... — pass
  • gofumpt -l . — clean
  • golangci-lint run ./... — 0 issues
  • pnpm build (docs) — static export succeeds

No pillars skipped.

Bring shipkit up to the four-pillar library standard:
- Formatting: format the codebase with gofumpt; CI now enforces gofumpt
cleanliness instead of plain gofmt.
- Linting: add .golangci.yml (errcheck, govet, ineffassign, staticcheck,
unused, gofumpt) and wire golangci-lint into CI. Fix the issues it found
(dynamic-format Errorf, ineffectual assignment, capitalized error string).
- Coverage: add `make cover` / `make cover-html` and a CI coverage step that
produces an atomic coverage profile and func summary, uploaded as an artifact.
- Docs: add a Next.js documentation site under website/ with shipkit-specific
content (intro, getting started, command reference, configuration, CI &
releases, launch readiness, agent output) and a Pages deploy workflow.
Also expand the Makefile with fmt/fmt-check/lint/cover targets and ignore
coverage artifacts.
Sign up for freeto 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

@AndroidPoet
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Adopt library-quality standard: formatting, linting, coverage, and docs site - #2

Draft
AndroidPoet wants to merge 1 commit into
mainfrom
chore/library-standard
Draft

Adopt library-quality standard: formatting, linting, coverage, and docs site#2
AndroidPoet wants to merge 1 commit into
mainfrom
chore/library-standard

Conversation

@AndroidPoet

Copy link
Copy Markdown
Owner

Brings the repo up to our four-pillar library-quality standard. Each pillar is verifiable locally and in CI.

1. Formatting

  • Formatted the whole codebase with gofumpt (stricter gofmt).
  • CI now enforces gofumpt cleanliness (replaces the old plain-gofmt check).
  • gofumpt -l . is empty.

2. Linting / static analysis

  • Added .golangci.yml (golangci-lint v2) enabling errcheck, govet, ineffassign, staticcheck, unused, and gofumpt as a formatter.
  • Wired golangci-lint into CI as a dedicated lint job.
  • Fixed every issue it surfaced:
    • dynamic format string passed to Errorf (now a sentinel errors.New),
    • an ineffectual assignment in launch.go,
    • a capitalized error string in install.go.
  • golangci-lint run ./... reports 0 issues.
  • The fmt.Fprint*-to-writer errcheck noise is intentionally excluded in config (standard, well-known exclusion for CLI output writers).

3. Test coverage

  • make cover runs go test ./... -coverprofile=coverage.out -covermode=atomic plus a func summary; make cover-html produces a browsable HTML report.
  • CI gained a coverage step that uploads coverage.out as an artifact.
  • Coverage artifacts are gitignored.
  • Current total: ~46.7% of statements.

4. Docs site

  • New Next.js documentation site under website/ with project-specific content: Introduction, Getting Started, Command Reference, Configuration, CI & Releases, Launch Readiness, and Agent Output.
  • Teal/cyan theme, animated hero, custom favicon, SEO/OG metadata.
  • Added a Pages deploy workflow (.github/workflows/docs.yml).
  • Verified the site builds and statically exports cleanly (10/10 pages).

Verification

  • go build ./... — pass
  • go vet ./... — pass
  • go test ./... — pass
  • gofumpt -l . — clean
  • golangci-lint run ./... — 0 issues
  • pnpm build (docs) — static export succeeds

No pillars skipped.

Bring shipkit up to the four-pillar library standard:
- Formatting: format the codebase with gofumpt; CI now enforces gofumpt
cleanliness instead of plain gofmt.
- Linting: add .golangci.yml (errcheck, govet, ineffassign, staticcheck,
unused, gofumpt) and wire golangci-lint into CI. Fix the issues it found
(dynamic-format Errorf, ineffectual assignment, capitalized error string).
- Coverage: add `make cover` / `make cover-html` and a CI coverage step that
produces an atomic coverage profile and func summary, uploaded as an artifact.
- Docs: add a Next.js documentation site under website/ with shipkit-specific
content (intro, getting started, command reference, configuration, CI &
releases, launch readiness, agent output) and a Pages deploy workflow.
Also expand the Makefile with fmt/fmt-check/lint/cover targets and ignore
coverage artifacts.
Sign up for freeto 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

@AndroidPoet
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Adopt library-quality standard: formatting, linting, coverage, and docs site - #2

Draft
AndroidPoet wants to merge 1 commit into
mainfrom
chore/library-standard
Draft

Adopt library-quality standard: formatting, linting, coverage, and docs site#2
AndroidPoet wants to merge 1 commit into
mainfrom
chore/library-standard

Conversation

@AndroidPoet

Copy link
Copy Markdown
Owner

Brings the repo up to our four-pillar library-quality standard. Each pillar is verifiable locally and in CI.

1. Formatting

  • Formatted the whole codebase with gofumpt (stricter gofmt).
  • CI now enforces gofumpt cleanliness (replaces the old plain-gofmt check).
  • gofumpt -l . is empty.

2. Linting / static analysis

  • Added .golangci.yml (golangci-lint v2) enabling errcheck, govet, ineffassign, staticcheck, unused, and gofumpt as a formatter.
  • Wired golangci-lint into CI as a dedicated lint job.
  • Fixed every issue it surfaced:
    • dynamic format string passed to Errorf (now a sentinel errors.New),
    • an ineffectual assignment in launch.go,
    • a capitalized error string in install.go.
  • golangci-lint run ./... reports 0 issues.
  • The fmt.Fprint*-to-writer errcheck noise is intentionally excluded in config (standard, well-known exclusion for CLI output writers).

3. Test coverage

  • make cover runs go test ./... -coverprofile=coverage.out -covermode=atomic plus a func summary; make cover-html produces a browsable HTML report.
  • CI gained a coverage step that uploads coverage.out as an artifact.
  • Coverage artifacts are gitignored.
  • Current total: ~46.7% of statements.

4. Docs site

  • New Next.js documentation site under website/ with project-specific content: Introduction, Getting Started, Command Reference, Configuration, CI & Releases, Launch Readiness, and Agent Output.
  • Teal/cyan theme, animated hero, custom favicon, SEO/OG metadata.
  • Added a Pages deploy workflow (.github/workflows/docs.yml).
  • Verified the site builds and statically exports cleanly (10/10 pages).

Verification

  • go build ./... — pass
  • go vet ./... — pass
  • go test ./... — pass
  • gofumpt -l . — clean
  • golangci-lint run ./... — 0 issues
  • pnpm build (docs) — static export succeeds

No pillars skipped.

Bring shipkit up to the four-pillar library standard:
- Formatting: format the codebase with gofumpt; CI now enforces gofumpt
cleanliness instead of plain gofmt.
- Linting: add .golangci.yml (errcheck, govet, ineffassign, staticcheck,
unused, gofumpt) and wire golangci-lint into CI. Fix the issues it found
(dynamic-format Errorf, ineffectual assignment, capitalized error string).
- Coverage: add `make cover` / `make cover-html` and a CI coverage step that
produces an atomic coverage profile and func summary, uploaded as an artifact.
- Docs: add a Next.js documentation site under website/ with shipkit-specific
content (intro, getting started, command reference, configuration, CI &
releases, launch readiness, agent output) and a Pages deploy workflow.
Also expand the Makefile with fmt/fmt-check/lint/cover targets and ignore
coverage artifacts.
Sign up for freeto 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

@AndroidPoet
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Adopt library-quality standard: formatting, linting, coverage, and docs site - #2

Draft
AndroidPoet wants to merge 1 commit into
mainfrom
chore/library-standard
Draft

Adopt library-quality standard: formatting, linting, coverage, and docs site#2
AndroidPoet wants to merge 1 commit into
mainfrom
chore/library-standard

Conversation

@AndroidPoet

Copy link
Copy Markdown
Owner

Brings the repo up to our four-pillar library-quality standard. Each pillar is verifiable locally and in CI.

1. Formatting

  • Formatted the whole codebase with gofumpt (stricter gofmt).
  • CI now enforces gofumpt cleanliness (replaces the old plain-gofmt check).
  • gofumpt -l . is empty.

2. Linting / static analysis

  • Added .golangci.yml (golangci-lint v2) enabling errcheck, govet, ineffassign, staticcheck, unused, and gofumpt as a formatter.
  • Wired golangci-lint into CI as a dedicated lint job.
  • Fixed every issue it surfaced:
    • dynamic format string passed to Errorf (now a sentinel errors.New),
    • an ineffectual assignment in launch.go,
    • a capitalized error string in install.go.
  • golangci-lint run ./... reports 0 issues.
  • The fmt.Fprint*-to-writer errcheck noise is intentionally excluded in config (standard, well-known exclusion for CLI output writers).

3. Test coverage

  • make cover runs go test ./... -coverprofile=coverage.out -covermode=atomic plus a func summary; make cover-html produces a browsable HTML report.
  • CI gained a coverage step that uploads coverage.out as an artifact.
  • Coverage artifacts are gitignored.
  • Current total: ~46.7% of statements.

4. Docs site

  • New Next.js documentation site under website/ with project-specific content: Introduction, Getting Started, Command Reference, Configuration, CI & Releases, Launch Readiness, and Agent Output.
  • Teal/cyan theme, animated hero, custom favicon, SEO/OG metadata.
  • Added a Pages deploy workflow (.github/workflows/docs.yml).
  • Verified the site builds and statically exports cleanly (10/10 pages).

Verification

  • go build ./... — pass
  • go vet ./... — pass
  • go test ./... — pass
  • gofumpt -l . — clean
  • golangci-lint run ./... — 0 issues
  • pnpm build (docs) — static export succeeds

No pillars skipped.

Bring shipkit up to the four-pillar library standard:
- Formatting: format the codebase with gofumpt; CI now enforces gofumpt
cleanliness instead of plain gofmt.
- Linting: add .golangci.yml (errcheck, govet, ineffassign, staticcheck,
unused, gofumpt) and wire golangci-lint into CI. Fix the issues it found
(dynamic-format Errorf, ineffectual assignment, capitalized error string).
- Coverage: add `make cover` / `make cover-html` and a CI coverage step that
produces an atomic coverage profile and func summary, uploaded as an artifact.
- Docs: add a Next.js documentation site under website/ with shipkit-specific
content (intro, getting started, command reference, configuration, CI &
releases, launch readiness, agent output) and a Pages deploy workflow.
Also expand the Makefile with fmt/fmt-check/lint/cover targets and ignore
coverage artifacts.
Sign up for freeto 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

@AndroidPoet
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Adopt library-quality standard: formatting, linting, coverage, and docs site - #2

Draft
AndroidPoet wants to merge 1 commit into
mainfrom
chore/library-standard
Draft

Adopt library-quality standard: formatting, linting, coverage, and docs site#2
AndroidPoet wants to merge 1 commit into
mainfrom
chore/library-standard

Conversation

@AndroidPoet

Copy link
Copy Markdown
Owner

Brings the repo up to our four-pillar library-quality standard. Each pillar is verifiable locally and in CI.

1. Formatting

  • Formatted the whole codebase with gofumpt (stricter gofmt).
  • CI now enforces gofumpt cleanliness (replaces the old plain-gofmt check).
  • gofumpt -l . is empty.

2. Linting / static analysis

  • Added .golangci.yml (golangci-lint v2) enabling errcheck, govet, ineffassign, staticcheck, unused, and gofumpt as a formatter.
  • Wired golangci-lint into CI as a dedicated lint job.
  • Fixed every issue it surfaced:
    • dynamic format string passed to Errorf (now a sentinel errors.New),
    • an ineffectual assignment in launch.go,
    • a capitalized error string in install.go.
  • golangci-lint run ./... reports 0 issues.
  • The fmt.Fprint*-to-writer errcheck noise is intentionally excluded in config (standard, well-known exclusion for CLI output writers).

3. Test coverage

  • make cover runs go test ./... -coverprofile=coverage.out -covermode=atomic plus a func summary; make cover-html produces a browsable HTML report.
  • CI gained a coverage step that uploads coverage.out as an artifact.
  • Coverage artifacts are gitignored.
  • Current total: ~46.7% of statements.

4. Docs site

  • New Next.js documentation site under website/ with project-specific content: Introduction, Getting Started, Command Reference, Configuration, CI & Releases, Launch Readiness, and Agent Output.
  • Teal/cyan theme, animated hero, custom favicon, SEO/OG metadata.
  • Added a Pages deploy workflow (.github/workflows/docs.yml).
  • Verified the site builds and statically exports cleanly (10/10 pages).

Verification

  • go build ./... — pass
  • go vet ./... — pass
  • go test ./... — pass
  • gofumpt -l . — clean
  • golangci-lint run ./... — 0 issues
  • pnpm build (docs) — static export succeeds

No pillars skipped.

Bring shipkit up to the four-pillar library standard:
- Formatting: format the codebase with gofumpt; CI now enforces gofumpt
cleanliness instead of plain gofmt.
- Linting: add .golangci.yml (errcheck, govet, ineffassign, staticcheck,
unused, gofumpt) and wire golangci-lint into CI. Fix the issues it found
(dynamic-format Errorf, ineffectual assignment, capitalized error string).
- Coverage: add `make cover` / `make cover-html` and a CI coverage step that
produces an atomic coverage profile and func summary, uploaded as an artifact.
- Docs: add a Next.js documentation site under website/ with shipkit-specific
content (intro, getting started, command reference, configuration, CI &
releases, launch readiness, agent output) and a Pages deploy workflow.
Also expand the Makefile with fmt/fmt-check/lint/cover targets and ignore
coverage artifacts.
Sign up for freeto 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

@AndroidPoet
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Adopt library-quality standard: formatting, linting, coverage, and docs site - #2

Draft
AndroidPoet wants to merge 1 commit into
mainfrom
chore/library-standard
Draft

Adopt library-quality standard: formatting, linting, coverage, and docs site#2
AndroidPoet wants to merge 1 commit into
mainfrom
chore/library-standard

Conversation

@AndroidPoet

Copy link
Copy Markdown
Owner

Brings the repo up to our four-pillar library-quality standard. Each pillar is verifiable locally and in CI.

1. Formatting

  • Formatted the whole codebase with gofumpt (stricter gofmt).
  • CI now enforces gofumpt cleanliness (replaces the old plain-gofmt check).
  • gofumpt -l . is empty.

2. Linting / static analysis

  • Added .golangci.yml (golangci-lint v2) enabling errcheck, govet, ineffassign, staticcheck, unused, and gofumpt as a formatter.
  • Wired golangci-lint into CI as a dedicated lint job.
  • Fixed every issue it surfaced:
    • dynamic format string passed to Errorf (now a sentinel errors.New),
    • an ineffectual assignment in launch.go,
    • a capitalized error string in install.go.
  • golangci-lint run ./... reports 0 issues.
  • The fmt.Fprint*-to-writer errcheck noise is intentionally excluded in config (standard, well-known exclusion for CLI output writers).

3. Test coverage

  • make cover runs go test ./... -coverprofile=coverage.out -covermode=atomic plus a func summary; make cover-html produces a browsable HTML report.
  • CI gained a coverage step that uploads coverage.out as an artifact.
  • Coverage artifacts are gitignored.
  • Current total: ~46.7% of statements.

4. Docs site

  • New Next.js documentation site under website/ with project-specific content: Introduction, Getting Started, Command Reference, Configuration, CI & Releases, Launch Readiness, and Agent Output.
  • Teal/cyan theme, animated hero, custom favicon, SEO/OG metadata.
  • Added a Pages deploy workflow (.github/workflows/docs.yml).
  • Verified the site builds and statically exports cleanly (10/10 pages).

Verification

  • go build ./... — pass
  • go vet ./... — pass
  • go test ./... — pass
  • gofumpt -l . — clean
  • golangci-lint run ./... — 0 issues
  • pnpm build (docs) — static export succeeds

No pillars skipped.

Bring shipkit up to the four-pillar library standard:
- Formatting: format the codebase with gofumpt; CI now enforces gofumpt
cleanliness instead of plain gofmt.
- Linting: add .golangci.yml (errcheck, govet, ineffassign, staticcheck,
unused, gofumpt) and wire golangci-lint into CI. Fix the issues it found
(dynamic-format Errorf, ineffectual assignment, capitalized error string).
- Coverage: add `make cover` / `make cover-html` and a CI coverage step that
produces an atomic coverage profile and func summary, uploaded as an artifact.
- Docs: add a Next.js documentation site under website/ with shipkit-specific
content (intro, getting started, command reference, configuration, CI &
releases, launch readiness, agent output) and a Pages deploy workflow.
Also expand the Makefile with fmt/fmt-check/lint/cover targets and ignore
coverage artifacts.
Sign up for freeto 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

@AndroidPoet
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Adopt library-quality standard: formatting, linting, coverage, and docs site - #2

Draft
AndroidPoet wants to merge 1 commit into
mainfrom
chore/library-standard
Draft

Adopt library-quality standard: formatting, linting, coverage, and docs site#2
AndroidPoet wants to merge 1 commit into
mainfrom
chore/library-standard

Conversation

@AndroidPoet

Copy link
Copy Markdown
Owner

Brings the repo up to our four-pillar library-quality standard. Each pillar is verifiable locally and in CI.

1. Formatting

  • Formatted the whole codebase with gofumpt (stricter gofmt).
  • CI now enforces gofumpt cleanliness (replaces the old plain-gofmt check).
  • gofumpt -l . is empty.

2. Linting / static analysis

  • Added .golangci.yml (golangci-lint v2) enabling errcheck, govet, ineffassign, staticcheck, unused, and gofumpt as a formatter.
  • Wired golangci-lint into CI as a dedicated lint job.
  • Fixed every issue it surfaced:
    • dynamic format string passed to Errorf (now a sentinel errors.New),
    • an ineffectual assignment in launch.go,
    • a capitalized error string in install.go.
  • golangci-lint run ./... reports 0 issues.
  • The fmt.Fprint*-to-writer errcheck noise is intentionally excluded in config (standard, well-known exclusion for CLI output writers).

3. Test coverage

  • make cover runs go test ./... -coverprofile=coverage.out -covermode=atomic plus a func summary; make cover-html produces a browsable HTML report.
  • CI gained a coverage step that uploads coverage.out as an artifact.
  • Coverage artifacts are gitignored.
  • Current total: ~46.7% of statements.

4. Docs site

  • New Next.js documentation site under website/ with project-specific content: Introduction, Getting Started, Command Reference, Configuration, CI & Releases, Launch Readiness, and Agent Output.
  • Teal/cyan theme, animated hero, custom favicon, SEO/OG metadata.
  • Added a Pages deploy workflow (.github/workflows/docs.yml).
  • Verified the site builds and statically exports cleanly (10/10 pages).

Verification

  • go build ./... — pass
  • go vet ./... — pass
  • go test ./... — pass
  • gofumpt -l . — clean
  • golangci-lint run ./... — 0 issues
  • pnpm build (docs) — static export succeeds

No pillars skipped.

Bring shipkit up to the four-pillar library standard:
- Formatting: format the codebase with gofumpt; CI now enforces gofumpt
cleanliness instead of plain gofmt.
- Linting: add .golangci.yml (errcheck, govet, ineffassign, staticcheck,
unused, gofumpt) and wire golangci-lint into CI. Fix the issues it found
(dynamic-format Errorf, ineffectual assignment, capitalized error string).
- Coverage: add `make cover` / `make cover-html` and a CI coverage step that
produces an atomic coverage profile and func summary, uploaded as an artifact.
- Docs: add a Next.js documentation site under website/ with shipkit-specific
content (intro, getting started, command reference, configuration, CI &
releases, launch readiness, agent output) and a Pages deploy workflow.
Also expand the Makefile with fmt/fmt-check/lint/cover targets and ignore
coverage artifacts.
Sign up for freeto 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

@AndroidPoet