Publish methodology and correction path
Adds reader-facing methodology, correction-report links, and distribution guidance. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Juan Manuel Servera committed
Jun 7, 2026 at 10:49 UTC
aa449525d9465a1639afebbe8ff2222ae22ec4fc
5 files changed
+95
-3
assets/css/extended/squadscope.css
+20
@@ -465,6 +465,7 @@ summary:focus-visible,
465
.article-footer__prompt,
466
.article-footer__updated,
467
.article-errata,
468
+.article-correction-path,
469
.repo-card__stats {
470
color: var(--color-text-muted);
471
font-size: var(--text-sm);
@@ -720,6 +721,25 @@ summary:focus-visible,
721
font-style: italic;
722
}
723
724
+.article-correction-path {
725
+ display: grid;
726
+ gap: var(--space-2);
727
+ padding: var(--space-3);
728
+ border: var(--size-border-thin) solid var(--color-border);
729
+ border-radius: var(--radius-md);
730
+ background: var(--color-surface);
731
+}
732
+
733
+.article-correction-path__title {
734
+ margin: 0;
735
+ color: var(--color-text);
736
+ font-size: var(--text-base);
737
+}
738
+
739
+.article-correction-path p {
740
+ margin: 0;
741
+}
742
+
743
.article-errata__title {
744
margin: 0;
745
color: var(--color-text);
content/methodology/_index.md
+19
-2
@@ -26,18 +26,35 @@ For topic channels, `scripts/score_repos.py` can compute a 0-100 relevance score
26
27
`signals.json` is not a separate source; in the current payload, `signals` is the structured summary generated from crawled repositories. `scripts/momentum_tracker.py` adds a hindsight check for press-correlated repos: after two or four weeks, a repo is marked sustained if its later stars gained are at least 20% of the initial gain; otherwise it is marked faded. The recorded decay rate is `1 - current / initial`, clamped between 0 and 1.
28
29
-## Biases readers should account for
29
+## Responsible-AI caveats and bias limits
30
31
+- **Source bias:** GitHub repositories and the current TechCrunch feed are only a slice of developer activity. Private work, enterprise pilots, package registries, community forums, regional press, and smaller newsletters are under-observed, so SquadScope should not be read as a neutral or complete map of technology.
32
- **English-language source bias:** GitHub metadata and the current TechCrunch feed favor English-language projects and coverage; treat non-English ecosystem absence as under-observation, not lack of activity.
33
+- **Platform bias:** GitHub-centric measurement over-represents open-source projects, public launch behavior, star-seeking promotion, and communities that already use GitHub. Work happening on GitLab, SourceHut, Bitbucket, self-hosted forges, package registries, Discord, Slack, or behind company firewalls may be invisible.
34
- **High-star bias:** The default crawl requires more than 50 stars and sorts by stars, so important niche projects can be missed until they are already visible.
35
- **US and Bay Area press bias:** TechCrunch coverage reflects a US startup lens; read press correlation as one narrative input, not a global technology map.
36
- **BigCo signal-strength bias:** Large companies create more repos, launches, docs, and articles, so their activity can look more important than quieter independent work.
37
- **Survivorship bias:** We mostly see projects that remain public and crawlable; failed experiments, abandoned private work, and deleted repos are largely invisible.
38
- **Recency bias:** A weekly window is good at catching spikes but can miss slower ecosystem shifts; use monthly and yearly rollups for longer arcs.
39
40
+These caveats are part of the analysis, not a disclaimer that makes the output neutral. The AI-assisted write-up can still over-weight vivid examples, repeat gaps in source coverage, or describe a project more confidently than the evidence supports. Reader reports are welcome when a claim, framing, source choice, or safety implication needs review.
41
+
42
+## Corrections and reader reports
43
+
44
+Weekly articles include a footer link to report a correction, source concern, or safety concern through GitHub Issues. The link prefills the article URL and week so reports can be triaged against the exact published page.
45
+
46
+When a report arrives, maintainers should:
47
+
48
+1. **Triage the report.** Confirm the affected article/week, classify it as factual correction, source-quality issue, safety concern, bias/framing concern, or duplicate/out of scope, and ask for additional evidence only if the report cannot be evaluated from public sources.
49
+2. **Update carefully.** Preserve the article's original publication context where possible. Fix clear factual errors, broken links, unsafe framing, or materially misleading source descriptions in the content or template that caused them.
50
+3. **Leave visible correction notes.** For material changes, add an `errata` entry to the weekly article front matter with the correction date and a concise note. Minor typo/link fixes may be corrected without an errata note, but source, safety, ranking, or claim changes should be visible to readers.
51
+4. **Close the loop.** Reply on the GitHub issue with what changed, what was not changed, and why. If the concern reveals a process gap, update this methodology or the relevant pipeline documentation.
52
+
53
+Correction reports are not used to provide private support, remove criticism without evidence, or retroactively make every old article match the latest methodology. They are a path for readers to challenge evidence, improve safety, and make material updates visible.
54
+
55
## What we do not do
56
40
-We do not sell paid placements, accept sponsor influence over selection, or reserve ranking slots for partners. Editorial articles are AI-generated from collected signals; see the site footer disclosure and [About](/about/) page for that operating model. We do not retroactively rewrite past articles after publication. Until the dedicated errata process from issue #209 lands, corrections and concerns should be raised through [GitHub issues](https://github.com/jmservera/SquadScope/issues/new).
57
+We do not sell paid placements, accept sponsor influence over selection, or reserve ranking slots for partners. Editorial articles are AI-generated from collected signals; see the site footer disclosure and [About](/about/) page for that operating model. We do not silently retroactively rewrite past articles after publication. Corrections and concerns should be raised through [GitHub issues](https://github.com/jmservera/SquadScope/issues/new?labels=correction%2Creader-report).
58
59
## Future work
60
docs/growth/distribution-strategy.md
+2
-1
@@ -212,6 +212,8 @@ campaign the crawl has caught.
212
213
**Input:** `content/weekly/2026/W22.md` (published Monday 8:30 AM UTC)
214
215
+**Before promotion:** Read the public [Methodology and corrections policy](../../content/methodology/_index.md) and link the live methodology page (`https://jmservera.github.io/SquadScope/methodology/`) in launch/crosspost context when space allows. Do not promote an article as neutral or comprehensive; frame it as GitHub- and current-source-based analysis with known source, language, and platform limits.
216
+
217
**Step 1: Extract key angles** (5 min)
218
- Skim article for 3-5 "most quotable" sections
219
- Identify 1-2 thread hooks (what's surprising, what's missing)
@@ -553,4 +555,3 @@ Before GA4, log weekly:
555
- Evaluate whether newsletter should move off Buttondown (if >1K subscribers)
556
- Explore paid distribution options (if metrics justify)
557
- Build SquadScope brand presence on all key platforms
556
-
layouts/partials/article-footer.html
+14
@@ -2,6 +2,11 @@
2
<footer class="post-footer article-footer">
3
{{- $tags := $page.Language.Params.Taxonomies.tag | default "tags" -}}
4
{{- $categories := $page.Language.Params.Taxonomies.category | default "categories" -}}
5
+ {{- $week := $page.Params.week | default $page.Title -}}
6
+ {{- $articleURL := $page.Permalink -}}
7
+ {{- $issueTitle := printf "Correction report: %s" $week -}}
8
+ {{- $issueBody := printf "## Correction / source / safety concern\n\nArticle: %s\nWeek: %s\n\nConcern type: correction / source concern / safety concern\nSuggested labels for maintainers: correction, source concern, safety concern, or bias/framing concern\n\nWhat should be corrected or reviewed?\n\n\nSuggested source(s) or evidence:\n\n\nVisible correction note needed? yes/no\n" $articleURL $week -}}
9
+ {{- $reportURL := printf "https://github.com/jmservera/SquadScope/issues/new?title=%s&body=%s&labels=%s" ($issueTitle | urlquery) ($issueBody | urlquery) ("correction,reader-report" | urlquery) -}}
10
<div class="article-footer__taxonomies" aria-label="Report taxonomy">
11
<ul class="post-tags">
12
{{- range ($page.GetTerms $categories) }}
@@ -34,6 +39,15 @@
39
<a href="mailto:?subject={{ $page.Title | urlquery }}&body={{ $page.Permalink | urlquery }}">Share this report</a>
40
</div>
41
42
+ <section class="article-correction-path" aria-labelledby="article-correction-path-title">
43
+ <h2 id="article-correction-path-title" class="article-correction-path__title">Methodology and corrections</h2>
44
+ <p>
45
+ Read the <a href="{{ "methodology/" | absURL }}">methodology and correction policy</a>,
46
+ or <a href="{{ $reportURL | safeURL }}">report a correction, source concern, or safety concern</a>.
47
+ The report link prefills this article URL and week.
48
+ </p>
49
+ </section>
50
+
51
<p class="article-footer__updated">Last updated <time datetime="{{ $page.Lastmod.Format "2006-01-02T15:04:05Z07:00" }}">{{ $page.Lastmod.Format "Jan 2, 2006" }}</time></p>
52
53
{{- with $page.Params.errata }}
tests/test_site_policy_links.py
new
+40
@@ -0,0 +1,40 @@
1
+from pathlib import Path
2
+
3
+
4
+ROOT = Path(__file__).resolve().parents[1]
5
+
6
+
7
+def test_weekly_article_footer_has_prefilled_correction_report_link() -> None:
8
+ footer = (ROOT / "layouts/partials/article-footer.html").read_text(encoding="utf-8")
9
+
10
+ assert "Correction report: %s" in footer
11
+ assert "Article: %s" in footer
12
+ assert "Week: %s" in footer
13
+ assert "issues/new?title=%s&body=%s&labels=%s" in footer
14
+ assert "correction,reader-report" in footer
15
+ assert "Suggested labels for maintainers" in footer
16
+ assert "report a correction, source concern, or safety concern" in footer
17
+
18
+
19
+def test_methodology_page_documents_corrections_and_responsible_ai_limits() -> None:
20
+ methodology = (ROOT / "content/methodology/_index.md").read_text(encoding="utf-8")
21
+
22
+ assert "## Responsible-AI caveats and bias limits" in methodology
23
+ assert "**Source bias:**" in methodology
24
+ assert "**English-language source bias:**" in methodology
25
+ assert "**Platform bias:**" in methodology
26
+ assert "not be read as a neutral or complete map" in methodology
27
+ assert "## Corrections and reader reports" in methodology
28
+ assert "Leave visible correction notes" in methodology
29
+ assert "`errata` entry" in methodology
30
+
31
+
32
+def test_methodology_is_in_navigation_and_distribution_guidance() -> None:
33
+ hugo_config = (ROOT / "hugo.toml").read_text(encoding="utf-8")
34
+ distribution = (ROOT / "docs/growth/distribution-strategy.md").read_text(encoding="utf-8")
35
+
36
+ assert "identifier = 'methodology'" in hugo_config
37
+ assert "url = '/methodology/'" in hugo_config
38
+ assert "Methodology and corrections policy" in distribution
39
+ assert "https://jmservera.github.io/SquadScope/methodology/" in distribution
40
+ assert "Do not promote an article as neutral or comprehensive" in distribution