1
+# SquadScope QA Report
2
+
3
+_Date:_ 2026-05-18
4
+_Issue:_ #24 — Final QA readiness review and reskill-cycle simulation
5
+_Agent:_ Fry
6
+
7
+## Test results summary
8
+
9
+- `PYTHONPATH=. pytest -q` → **38 passed** in 0.50s.
10
+- `python3 -m py_compile` succeeded for the pipeline scripts, including `scripts/reskill.py` and `scripts/track_quality.py`.
11
+- `python3 scripts/track_quality.py` produced a valid markdown trend report.
12
+- **Reskill cycle simulation**: Prompt rendering tested (`--print-prompt` flag validates placeholder resolution), but full reskill cycle execution (calling GitHub Models API and generating `.squad/reskill/2026-W21.md` report) remains incomplete. This is **required** for #24 acceptance criterion "A dry-run or simulation of the first reskill cycle is completed and reviewed."
13
+
14
+## Hugo build verification
15
+
16
+- Verified Hugo `v0.161.1` using `.tools/hugo-0.161.1/hugo`.
17
+- `hugo --minify` completed successfully.
18
+- Build emitted two theme/template deprecation warnings from PaperMod/Hugo integration:
19
+ - `.Language.LanguageDirection` → use `.Language.Direction`
20
+ - `.Language.LanguageCode` → use `.Language.Locale`
21
+
22
+## Workflow audit findings
23
+
24
+### `.github/workflows/crawl-and-publish.yml`
25
+
26
+- Job dependency chain is coherent: `crawl` → `analyze` → `generate` → `deploy`, with `notify` depending on published artifacts and `reskill-check` gating `reskill`.
27
+- Top-level permissions are broadly sufficient, and job-level overrides for analysis/deploy are present.
28
+- Concurrency control exists (`weekly-crawl` at workflow level, `pages` in deploy).
29
+- Secrets/vars references look valid for the intended design (`COPILOT_GH_TOKEN`, `GITHUB_TOKEN`, optional `WEBHOOK_URL`).
30
+
31
+**Blocking finding:** the `deploy` job only runs `hugo --minify`. On a clean build, that produces `public/search/index.html` and RSS output, but **does not produce `public/pagefind/` assets**. The search page template expects `pagefind/pagefind-ui.js`, so scheduled/manual publish runs can ship a broken search experience unless Pagefind is built explicitly in this workflow.
32
+
33
+**Readiness note:** the `reskill` job is still a placeholder logger. It does not invoke `scripts/reskill.py`, does not write `.squad/reskill/YYYY-WNN.md`, and does not use the quality trend/reskill prompt path that the repository now contains.
34
+
35
+### `.github/workflows/deploy-site.yml`
36
+
37
+- `build` → `deploy` dependency is correct.
38
+- Permissions and Pages deployment setup are sufficient.
39
+- Concurrency control is present (`pages`).
40
+- This workflow **does** build Pagefind after Hugo, which matches the search page contract.
41
+
42
+## Pipeline contract verification
43
+
44
+### Crawl → Analyze
45
+
46
+- `data/raw/2026-W21.json` is valid JSON and matches the expected top-level contract: `week`, `crawled_at`, `new_repos`, `trending_repos`, `signals`, `metadata`.
47
+- Sample counts: `209` new repos, `215` trending repos.
48
+- `docs/analysis-spec.md` and `prompts/analyze-weekly.md` are aligned on:
49
+ - required frontmatter keys,
50
+ - required section order,
51
+ - required `Signal` / `Noise` / `Gaps` subsections,
52
+ - the rule that missing `stars_gained` must be called out explicitly.
53
+- `data/analyzed/2026-W21-summary.md` satisfies the documented structure and includes `quality_score: 76`.
54
+
55
+### Analyze → Generate
56
+
57
+- `scripts/generate_content.py` successfully reads the analyzed summary and can regenerate the weekly page.
58
+- **Content drift finding:** the committed `content/weekly/2026/W21.md` is still the older manual dry-run page, not the current generator output from `data/analyzed/2026-W21-summary.md`.
59
+
60
+### Rollups
61
+
62
+- `scripts/generate_rollups.py` runs successfully and can regenerate monthly/yearly pages.
63
+- **Metric mismatch finding:** regenerated monthly frontmatter computed `total_repos_featured: 15`, while the weekly summary reports `repos_featured: 424`. The current implementation is effectively counting unique linked repos, not the editorial pass size implied by the field name.
64
+- Current committed monthly/yearly content exists and builds, but future rollup generations need review before production use.
65
+
66
+### Reskill readiness
67
+
68
+- `scripts/reskill.py`, `scripts/track_quality.py`, and `prompts/reskill.md` all exist and are syntactically valid.
69
+- Reskill prompt rendering successfully reads squad wisdom/skills/history-derived state and resolves placeholders.
70
+- `.squad/run-counter.txt` is currently `0`, so automatic reskill will not trigger until successful crawl runs increment the counter and reach a positive multiple of 5.
71
+
72
+## Content verification results
73
+
74
+- Weekly page exists: `content/weekly/2026/W21.md`
75
+- Monthly rollup exists: `content/monthly/2026/05.md`
76
+- Yearly rollup exists: `content/yearly/2026.md`
77
+- Search page exists and is configured: `content/search/_index.md` + `layouts/search/list.html`
78
+- RSS feed is generated by Hugo (`public/index.xml` observed after build)
79
+- Current committed rollup content uses Hugo-aware `relref` links.
80
+
81
+**Forward-looking note:** `scripts/generate_rollups.py` currently constructs literal `/weekly/...` and `/monthly/...` paths for new entries, so future generated rollup entries can regress away from Hugo-aware links even though the committed content currently uses `relref`.
82
+
83
+## Known issues / limitations
84
+
85
+### Blocking issues (must resolve before release)
86
+
87
+1. **Search asset pipeline incomplete** _(Owner: Fry)_
88
+ `crawl-and-publish.yml` deploys search pages without building fresh Pagefind assets on a clean runner. The search page template expects `pagefind/pagefind-ui.js`, so scheduled/manual publish runs can ship a broken search experience.
89
+
90
+2. **Reskill workflow not integrated** _(Owner: Fry)_
91
+ The `reskill` job in `crawl-and-publish.yml` is still a placeholder logger. It does not invoke `scripts/reskill.py`, does not write `.squad/reskill/YYYY-WNN.md`, and does not use the quality trend/reskill prompt path. Additionally, the first reskill-cycle simulation (required for #24 acceptance criterion) has not been run and reviewed.
92
+
93
+3. **Generated content drift** _(Owner: Fry)_
94
+ The committed `content/weekly/2026/W21.md` is stale relative to the current generator output from `data/analyzed/2026-W21-summary.md`. Future pipeline runs may produce inconsistencies.
95
+
96
+### Non-blocking follow-ups (post-launch)
97
+
98
+4. Rollup generation currently undercounts `total_repos_featured` and may emit hardcoded internal paths on new entries.
99
+5. Hugo build passes, but theme deprecation warnings should be cleaned up before a future Hugo upgrade removes those APIs.
100
+
101
+## Readiness verdict
102
+
103
+**FAIL**
104
+
105
+The codebase is close: tests are green, the analyzer contract is well defined, and the core scripts/builds run. But the production pipeline still has blocking readiness gaps in search deployment, reskill automation wiring, and generated-content consistency. I would not call v1 release-ready until those are fixed and re-verified.