Author weekly analysis spec for structured editorial summaries (#28)

* docs: author weekly analysis spec for #9 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: address analysis spec review Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: align sample summary heading to spec contract The spec and prompt require `## Trending This Week` as the stable H2 heading, with the stars-gained caveat expressed in the prose rather than the heading text. Update the sample to match this contract. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Juan Manuel Servera committed May 18, 2026 at 12:58 UTC 7053f3342f9c6015c57bfc055cc91209b057083d
5 files changed +539 -13
.squad/agents/farnsworth/history.md
+2 -1
@@ -14,4 +14,5 @@
14
15 ## Learnings
16
17 -_No learnings recorded yet._
17 +- **2026-05-18T12:07:20.778+02:00:** The analyzer contract should be a superset of Amy’s weekly page frontmatter plus Leela’s `quality_score` gate, so one analyzed artifact can satisfy both editorial review and generator input.
18 +- **2026-05-18T12:07:20.778+02:00:** Keep the reader-facing weekly summary in five stable H2 sections, but require labeled `Signal`, `Noise`, and `Gaps` subsections so the editorial lens remains explicit and machine-checkable.
.squad/decisions/inbox/farnsworth-analysis-spec.md new
+29
@@ -0,0 +1,29 @@
1 +# Farnsworth Analysis Spec Decisions
2 +
3 +- **Date:** 2026-05-18T12:07:20.778+02:00
4 +- **Issue:** #9
5 +- **Scope:** Weekly analysis contract between crawler output and site generator
6 +
7 +## Proposed decisions
8 +
9 +1. **Analyzer output frontmatter is a superset contract.**
10 + - Required fields: `title`, `date`, `week`, `year`, `tags`, `categories`, `repos_featured`, `stars_tracked`, `top_repo`, `quality_score`, `summary`.
11 + - Why: this satisfies Amy’s weekly page needs and Leela’s reviewer gate in one artifact.
12 +
13 +2. **Reader-facing structure stays in five stable H2 sections.**
14 + - Required order: `Notable New Repositories`, `Trending This Week (Stars Gained)`, `Trend Analysis`, `What's Missing`, `Conclusion`.
15 + - Why: matches the approved weekly page shape and keeps generator parsing simple.
16 +
17 +3. **Signal / Noise / Gaps remain explicit as required subsections.**
18 + - `Trend Analysis` must include `### Signal` and `### Noise`.
19 + - `What's Missing` must include `### Gaps`.
20 + - Why: preserves the approved editorial lens without fighting the page-level section structure.
21 +
22 +4. **Trending must degrade honestly when momentum data is incomplete.**
23 + - If `stars_gained` is absent or null, the summary must say the section is directional rather than a true weekly momentum leaderboard.
24 + - Why: avoids overstating popularity as trend movement.
25 +
26 +5. **Analyzer input schema should be strict on core repo fields and tolerant on metadata.**
27 + - Required reads: week slug, crawl timestamp, new/trending repo arrays, and top topics.
28 + - Optional diagnostics: `partial_failures`, `filter_summary`, `snapshot_path`.
29 + - Why: supports current crawler output while leaving room for metadata evolution.
data/analyzed/2026-W21-summary.md
+23 -12
@@ -1,32 +1,43 @@
1 ---
2 title: "Week 21, 2026 Analysis"
3 -date: 2026-05-18T10:59:10.800+02:00
3 +date: 2026-05-18T12:07:20.778+02:00
4 week: "2026-W21"
5 year: 2026
6 -categories: [weekly]
6 tags: [ai, agents, developer-tooling, security, open-source]
8 -quality_score: 78
9 -summary: "Manual dry run of 2026-W21 shows agent tooling dominating new launches, while the trending dataset still needs historical snapshots to measure real weekly momentum."
10 -source_data: "data/raw/2026-W21.json"
11 -manual: true
7 +categories: [weekly]
8 +repos_featured: 424
9 +stars_tracked: 20204141
10 +top_repo: "vercel-labs/zero"
11 +quality_score: 76
12 +summary: "Week 21 shows real demand for agent infrastructure, but the trend data still lacks the baseline needed to separate momentum from popularity."
13 ---
14
14 -## Notable New Repos
15 +## Notable New Repositories
16
16 -The cleanest signal in the 209 newly collected repositories is a cluster of agent-focused developer tooling. **vercel-labs/zero** stands out as the biggest launch with a concise product story, while **DenisSergeevitch/agents-best-practices**, **Kappaemme-git/codex-complexity-optimizer**, **gi-dellav/zerostack**, and **openclaw/clawpatch** all point in the same direction: teams want sharper workflows for coding agents, lighter execution runtimes, and safer automation. Outside that lane, **facebookresearch/vggt-omega** adds a credible research signal in multimodal vision, and **chrisbanes/skills** shows that reusable skill packs are becoming a recognizable packaging format.
17 +The strongest new-repo signal is not raw volume but coherence. **vercel-labs/zero** anchors the week because it reads like a serious attempt to simplify agent-facing infrastructure rather than another thin wrapper. Around it, **DenisSergeevitch/agents-best-practices**, **Kappaemme-git/codex-complexity-optimizer**, **gi-dellav/zerostack**, and **openclaw/clawpatch** all point in the same direction: teams want safer automation, lighter execution layers, and better operating discipline for coding agents. That cluster matters more than any single launch because it suggests the market is already moving from “agents are interesting” to “agents need tooling that survives contact with real work.”
18 +
19 +Outside that lane, **facebookresearch/vggt-omega** adds a more credible research signal than most of the week’s AI launches, and **chrisbanes/skills** hints that reusable skill packs may become a durable packaging pattern. The key takeaway is that the best new repos are the ones reducing workflow friction, not the ones making the loudest promises.
20
21 ## Trending This Week
22
20 -The trending dataset is led by giant incumbents rather than breakout winners: **freeCodeCamp/freeCodeCamp**, **public-apis/public-apis**, **facebook/react**, **n8n-io/n8n**, **ollama/ollama**, **huggingface/transformers**, **langgenius/dify**, **firecrawl/firecrawl**, and **anthropics/claude-code**. That still tells a useful story. The strongest sustained attention is around AI workflow platforms, coding agents, and developer productivity infrastructure. The caveat is important: this week has no prior star snapshot, so the list reflects highly starred repositories that were active during the crawl window, not a true stars-gained leaderboard.
23 +The trending set is still useful, but this week it is not a true stars-gained leaderboard. Every sampled `trending_repos` entry lacks a usable `stars_gained` value, so the list behaves more like “large repositories that were active during the crawl window” than a clean momentum table. Even with that caveat, the concentration around **freeCodeCamp/freeCodeCamp**, **facebook/react**, **n8n-io/n8n**, **ollama/ollama**, **huggingface/transformers**, **langgenius/dify**, **firecrawl/firecrawl**, and **anthropics/claude-code** shows that AI workflow platforms, developer productivity infrastructure, and agent-adjacent tooling remain where attention is pooling.
24
25 ## Trend Analysis
26
24 -AI and agentic tooling clearly dominate the week. Roughly 85 of the 209 new repositories match AI or agent-oriented keywords, and the top shared topics across the full dataset are **python**, **ai**, **llm**, **typescript**, **nodejs**, and **javascript**. Security is the second loudest theme, but much of that signal is exploit-heavy rather than defensive product work. At the same time, the crawler is still letting too much noise through: more than half of the new repositories have no declared language, about 34 new entries look like game-mod or cheat utilities, and several high-ranking items are vulnerability exploits or bypass tools. The data is useful enough for a human-written summary, but not yet clean enough for fully trusted autonomous publishing.
27 +### Signal
28 +
29 +The durable signal is the shift from general AI enthusiasm toward operational tooling. The top shared topics — **python**, **ai**, **llm**, **typescript**, **nodejs**, and **javascript** — reinforce that the center of gravity is still developer-facing AI, but the better projects are focused on workflow reliability, packaging, and execution discipline. This is a healthier pattern than pure demo-driven hype because it implies the ecosystem is starting to care about how agent systems are run, maintained, and trusted.
30 +
31 +### Noise
32 +
33 +The weak signal is the amount of off-mission and exploit-heavy material that still clears the crawler. Security appears often, but too much of that volume is bypass, exploit, or cheat-oriented rather than defensive engineering. There is also obvious repetition in the agent category: many launches gesture at automation without much evidence of differentiation. That means the week is loud, but not all of that loudness deserves equal editorial weight.
34
35 ## What's Missing
36
28 -Three gaps block full automation. First, the trending set has no `stars_gained` values this week because `data/snapshots/` does not yet contain a historical baseline. Second, the crawler needs stronger filtering so obvious spam, cheat tooling, and exploit repositories do not compete with legitimate developer products. Third, the manual generator step is still manual: monthly/yearly rollups, search indexing, and publish-time validation are not being refreshed from analyzed output yet.
37 +### Gaps
38 +
39 +The biggest missing piece is trustworthy momentum data. Without historical star snapshots, the analyzer cannot distinguish what is newly accelerating from what is simply already famous. The second gap is stronger quality filtering: exploit repositories, cheat tooling, and other off-mission projects still distort the weekly picture. The third is ecosystem balance. There is plenty of heat around AI builders, but much less visible energy around defensive security tooling, testing infrastructure for agents, and pragmatic maintenance tools that help teams run these systems safely at scale.
40
41 ## Conclusion
42
32 -This dry run proves the pipeline can already tell a coherent story from real crawler output, but it also exposes the work still needed before the process can run unattended. The content model is strong enough for Hugo, the weekly page shape is viable, and the biggest remaining risks are data hygiene, true trend calculation, and formalizing the generator contract between `data/analyzed/` and `content/`.
43 +Week 21 matters because it shows where the GitHub conversation is maturing: away from generic AI excitement and toward tooling that makes agent workflows usable. But it also shows why the analyzer contract has to be strict. Until the pipeline has real trend baselines and better filtering, the right editorial stance is confident about the signal, skeptical about the noise, and explicit about the gaps.
docs/analysis-spec.md new
+329
@@ -0,0 +1,329 @@
1 +# Weekly Analysis Specification
2 +
3 +This document defines the analyzer contract between `data/raw/YYYY-WNN.json` and `data/analyzed/YYYY-WNN-summary.md`.
4 +
5 +## Purpose
6 +
7 +The analyzer turns a weekly GitHub crawl into a structured editorial summary that is:
8 +
9 +- consistent enough for CI automation,
10 +- opinionated enough to be worth reading,
11 +- strict enough for downstream site generation, and
12 +- traceable enough for reviewer-gate validation.
13 +
14 +The analyzer is a read-only consumer of `data/raw/`. It may interpret, rank, and summarize the crawl, but it must not rewrite the input artifact.
15 +
16 +## Editorial Lens
17 +
18 +SquadScope analysis uses a three-part editorial lens:
19 +
20 +- **Signal** — projects or shifts that matter because they solve real problems, represent credible technical movement, or reveal durable ecosystem direction.
21 +- **Noise** — activity that is loud but weak: marketing-heavy launches, copycat agents, exploit/bypass churn, or trend-chasing with little substance.
22 +- **Gaps** — meaningful absences: categories, problem spaces, or technical needs that should be showing more energy but are not.
23 +
24 +The reader-facing markdown keeps the five approved weekly sections, but the analysis itself must explicitly surface **Signal**, **Noise**, and **Gaps** as labeled subsections.
25 +
26 +## Input Contract
27 +
28 +### File naming
29 +
30 +- **Location:** `data/raw/`
31 +- **Filename:** `YYYY-WNN.json`
32 +- **Example:** `data/raw/2026-W21.json`
33 +
34 +### Analyzer read scope
35 +
36 +The analyzer reads these fields:
37 +
38 +- `week`
39 +- `crawled_at`
40 +- `new_repos[]`
41 +- `trending_repos[]`
42 +- `signals.top_topics[]`
43 +- `metadata.partial_failures` *(optional diagnostic input; emitted by `scripts/crawl.py` today, but analyzers must tolerate absence)*
44 +- `metadata.filter_summary` *(optional diagnostic input; emitted by `scripts/crawl.py` today, but analyzers must tolerate absence)*
45 +- `metadata.snapshot_path` *(optional diagnostic input; emitted by `scripts/crawl.py` today, but analyzers must tolerate absence)*
46 +
47 +Unknown fields must be ignored. The current crawler emits these diagnostic metadata fields in its own artifacts, but analyzers must not fail when they are missing from backfilled or forward-compatible payloads.
48 +
49 +### JSON schema
50 +
51 +```json
52 +{
53 + "$schema": "https://json-schema.org/draft/2020-12/schema",
54 + "title": "SquadScope Weekly Crawl Payload",
55 + "type": "object",
56 + "additionalProperties": true,
57 + "required": [
58 + "week",
59 + "crawled_at",
60 + "new_repos",
61 + "trending_repos",
62 + "signals",
63 + "metadata"
64 + ],
65 + "properties": {
66 + "week": {
67 + "type": "string",
68 + "pattern": "^[0-9]{4}-W[0-9]{2}$"
69 + },
70 + "crawled_at": {
71 + "type": "string",
72 + "format": "date-time"
73 + },
74 + "new_repos": {
75 + "type": "array",
76 + "items": { "$ref": "#/$defs/repo" }
77 + },
78 + "trending_repos": {
79 + "type": "array",
80 + "items": { "$ref": "#/$defs/trendingRepo" }
81 + },
82 + "signals": {
83 + "type": "object",
84 + "additionalProperties": true,
85 + "required": ["top_topics"],
86 + "properties": {
87 + "top_topics": {
88 + "type": "array",
89 + "items": {
90 + "type": "object",
91 + "additionalProperties": false,
92 + "required": ["topic", "count"],
93 + "properties": {
94 + "topic": { "type": "string" },
95 + "count": { "type": "integer", "minimum": 0 }
96 + }
97 + }
98 + }
99 + }
100 + },
101 + "metadata": {
102 + "type": "object",
103 + "additionalProperties": true,
104 + "properties": {
105 + "api_calls_used": { "type": "integer", "minimum": 0 },
106 + "cache_hits": { "type": "integer", "minimum": 0 },
107 + "stale_cache_hits": { "type": "integer", "minimum": 0 },
108 + "rate_limit_limit": { "type": ["integer", "null"], "minimum": 0 },
109 + "rate_limit_remaining": { "type": ["integer", "null"], "minimum": 0 },
110 + "rate_limit_reset": { "type": ["integer", "null"], "minimum": 0 },
111 + "rate_limit_resource": { "type": ["string", "null"] },
112 + "partial_failures": {
113 + "type": "array",
114 + "items": { "type": "string" }
115 + },
116 + "snapshot_path": { "type": "string" },
117 + "filter_summary": {
118 + "type": "object",
119 + "additionalProperties": {
120 + "type": "object",
121 + "additionalProperties": { "type": "integer", "minimum": 0 }
122 + }
123 + }
124 + }
125 + }
126 + },
127 + "$defs": {
128 + "repo": {
129 + "type": "object",
130 + "additionalProperties": true,
131 + "required": [
132 + "name",
133 + "owner",
134 + "full_name",
135 + "description",
136 + "language",
137 + "stars",
138 + "forks",
139 + "created_at",
140 + "topics",
141 + "license",
142 + "url"
143 + ],
144 + "properties": {
145 + "name": { "type": "string" },
146 + "owner": { "type": "string" },
147 + "full_name": { "type": "string" },
148 + "description": { "type": ["string", "null"] },
149 + "language": { "type": ["string", "null"] },
150 + "stars": { "type": "integer", "minimum": 0 },
151 + "forks": { "type": "integer", "minimum": 0 },
152 + "created_at": { "type": "string", "format": "date-time" },
153 + "topics": {
154 + "type": "array",
155 + "items": { "type": "string" }
156 + },
157 + "license": { "type": ["string", "null"] },
158 + "url": { "type": "string", "format": "uri" }
159 + }
160 + },
161 + "trendingRepo": {
162 + "allOf": [
163 + { "$ref": "#/$defs/repo" },
164 + {
165 + "type": "object",
166 + "properties": {
167 + "stars_gained": { "type": ["integer", "null"], "minimum": 0 }
168 + }
169 + }
170 + ]
171 + }
172 + }
173 +}
174 +```
175 +
176 +### Input interpretation rules
177 +
178 +1. **New repos** are candidates for editorial novelty.
179 +2. **Trending repos** are candidates for momentum, but if `stars_gained` is absent or null, the analyzer must say that momentum is not yet fully measurable.
180 +3. **Top topics** are directional evidence, not conclusions by themselves.
181 +4. **Metadata diagnostics** can justify caveats about crawl quality, filtering, or missing baselines, but must not dominate the summary.
182 +
183 +## Output Contract
184 +
185 +### File naming
186 +
187 +- **Location:** `data/analyzed/`
188 +- **Filename:** `YYYY-WNN-summary.md`
189 +- **Example:** `data/analyzed/2026-W21-summary.md`
190 +
191 +### Required frontmatter
192 +
193 +The analyzer output must begin with YAML frontmatter containing these fields.
194 +
195 +| Field | Type | Required | Meaning |
196 +|---|---|---:|---|
197 +| `title` | string | yes | Reader-facing weekly title. Format: `Week NN, YYYY Analysis`. |
198 +| `date` | string | yes | Analysis run timestamp in ISO 8601. |
199 +| `week` | string | yes | Week slug from the raw payload (`YYYY-WNN`). |
200 +| `year` | integer | yes | Numeric year for downstream validation and archive logic. |
201 +| `tags` | array[string] | yes | 3-8 topical tags summarizing the week. |
202 +| `categories` | array[string] | yes | Must include `weekly`. |
203 +| `repos_featured` | integer | yes | Total repos considered in the editorial pass. Typically `len(new_repos) + len(trending_repos)`. |
204 +| `stars_tracked` | integer | yes | Sum of `stars` across all repos considered. |
205 +| `top_repo` | string | yes | The repo that anchors the week’s narrative, not necessarily the highest-star repo. |
206 +| `quality_score` | integer | yes | Reviewer-gate score from 0-100. Must be `>= 60` to publish. |
207 +| `summary` | string | yes | One-sentence editorial thesis for the week. |
208 +
209 +No extra frontmatter keys should be emitted unless a later decision extends this contract.
210 +
211 +### Required body structure
212 +
213 +The body must follow this exact top-level section order:
214 +
215 +```md
216 +## Notable New Repositories
217 +
218 +## Trending This Week
219 +
220 +## Trend Analysis
221 +### Signal
222 +### Noise
223 +
224 +## What's Missing
225 +### Gaps
226 +
227 +## Conclusion
228 +```
229 +
230 +### Section guidance
231 +
232 +#### 1. Notable New Repositories
233 +- **Purpose:** Curate the week’s most credible new launches.
234 +- **Include:** 3-7 repos, grouped into a coherent story rather than a bullet dump.
235 +- **Tone:** Selective and judgmental.
236 +- **Length:** ~120-220 words.
237 +- **Avoid:** Exhaustive listings or copy/pasted repo descriptions.
238 +
239 +#### 2. Trending This Week
240 +- **Purpose:** Explain where attention moved.
241 +- **Include:** The most relevant momentum winners, plus a caveat if `stars_gained` is unavailable.
242 +- **Tone:** Analytical, not celebratory.
243 +- **Length:** ~100-180 words.
244 +- **Avoid:** Treating raw popularity as momentum when deltas are missing.
245 +
246 +#### 3. Trend Analysis
247 +- **Purpose:** Explain the bigger technical story.
248 +- **Required subsections:**
249 + - `### Signal` — what looks durable or strategically important.
250 + - `### Noise` — what looks inflated, repetitive, or low-substance.
251 +- **Length:** ~150-260 words total.
252 +- **Avoid:** Repeating section 1 and section 2 without synthesis.
253 +
254 +#### 4. What's Missing
255 +- **Purpose:** Surface absent or underweighted themes.
256 +- **Required subsection:** `### Gaps`.
257 +- **Include:** 2-4 concrete blind spots or underserved categories.
258 +- **Length:** ~80-160 words.
259 +- **Avoid:** Generic filler like “more innovation is needed.”
260 +
261 +#### 5. Conclusion
262 +- **Purpose:** End with a clear editorial takeaway.
263 +- **Include:** Why the week matters and what to watch next.
264 +- **Length:** ~50-110 words.
265 +- **Avoid:** Introducing brand-new evidence.
266 +
267 +## Analysis Dimensions
268 +
269 +Every weekly analysis must apply these dimensions explicitly.
270 +
271 +### Importance Assessment
272 +Ask whether a repo or theme solves a real problem, reduces friction, opens a new workflow, or signals credible adoption. Prefer practical utility over novelty theater.
273 +
274 +### Trend Detection
275 +Look for repeated patterns across topics, repo types, and—when available—previous weekly summaries. A single loud repo is not a trend; clustered movement is.
276 +
277 +### Hype Detection
278 +Separate genuine substance from branding, wrappers, thinly differentiated agent launches, or exploit-driven attention. If the repo sounds bigger than it is, say so.
279 +
280 +### Gap Analysis
281 +Identify what should be showing up but is not: missing infrastructure, underrepresented defensive/security work, absent tooling for known pain points, or stagnant categories.
282 +
283 +### Context
284 +Compare the current week to the prior week when a prior summary exists. Note continuity, acceleration, reversal, or broadening of a theme. If no prior summary exists, say so briefly and avoid pretending longitudinal certainty.
285 +
286 +## Quality Criteria
287 +
288 +### Good analysis
289 +- Synthesizes, ranks, and judges instead of listing.
290 +- Connects individual repos into ecosystem-level patterns.
291 +- Names uncertainty honestly when data quality is limited.
292 +- Uses evidence from the payload without sounding like the payload.
293 +- Makes the `What's Missing` section useful and specific.
294 +- Leaves Amy’s generator with all frontmatter needed for site publication.
295 +
296 +### Bad analysis
297 +- Reads like release notes or a changelog.
298 +- Repeats repo descriptions without editorial value.
299 +- Confuses total stars with weekly momentum.
300 +- Refuses to criticize obvious hype or noise.
301 +- Omits gaps, caveats, or trend continuity.
302 +- Produces frontmatter that cannot drive the weekly page template.
303 +
304 +## Reviewer-Gate Expectations
305 +
306 +A weekly analysis is publishable only if all of the following are true:
307 +
308 +- `quality_score >= 60`
309 +- all required frontmatter fields are present,
310 +- all five required H2 sections are present in order,
311 +- `Signal`, `Noise`, and `Gaps` subsections are present,
312 +- body word count is at least 200,
313 +- the prose contains no raw JSON, tool logs, or placeholder text.
314 +
315 +## Generator Handoff Rules
316 +
317 +The generator may assume:
318 +
319 +- the summary frontmatter already contains the weekly page fields Amy’s Hugo templates expect,
320 +- `summary` is safe to surface in list views,
321 +- `top_repo` is a deliberate editorial choice,
322 +- body headings are stable and machine-detectable,
323 +- the analyzed summary and published weekly page both use `## Trending This Week` as the stable H2 heading, with any stars-gained caveat expressed in the prose rather than the heading text.
324 +
325 +The analyzer may assume:
326 +
327 +- `data/raw/` is authoritative input,
328 +- prior-week continuity is optional but preferred,
329 +- missing `stars_gained` must produce a caveat, not a silent omission.
prompts/analyze-weekly.md new
+156
@@ -0,0 +1,156 @@
1 +# Weekly Analysis Prompt Template
2 +
3 +You are Farnsworth, the analyst for SquadScope.
4 +
5 +Your job is to turn one weekly crawler artifact into a structured editorial summary for publication.
6 +
7 +## Inputs
8 +
9 +- Current datetime: `{{CURRENT_DATETIME}}`
10 +- Raw weekly JSON path: `{{RAW_JSON_PATH}}`
11 +- Output path: `{{OUTPUT_PATH}}`
12 +- Previous summary path: `{{PREVIOUS_SUMMARY_PATH_OR_NONE}}`
13 +
14 +### Raw weekly JSON
15 +
16 +```json
17 +{{RAW_JSON_CONTENT}}
18 +```
19 +
20 +### Previous weekly summary
21 +
22 +Use this only if it is provided. If it is missing, unavailable, or empty, say so briefly in the analysis where relevant and do not invent continuity.
23 +
24 +```md
25 +{{PREVIOUS_SUMMARY_CONTENT_OR_EMPTY}}
26 +```
27 +
28 +## Objective
29 +
30 +Write the full contents of `{{OUTPUT_PATH}}` as markdown with YAML frontmatter. The file must conform to the Output Contract in `docs/analysis-spec.md` exactly.
31 +
32 +## Editorial stance
33 +
34 +Be critical, selective, and opinionated.
35 +
36 +- Do **not** just list repositories.
37 +- Do **not** mistake popularity for momentum.
38 +- Do **not** praise obvious hype without evidence.
39 +- Do **call out** noise, weak substance, exploit-heavy churn, and missing categories.
40 +- Do **explain why** the week matters.
41 +
42 +## Analysis dimensions to apply
43 +
44 +1. **Importance Assessment** — identify what solves real problems or signals durable technical movement.
45 +2. **Trend Detection** — connect multiple repos or topics into patterns; compare against the prior week when available.
46 +3. **Hype Detection** — separate substantial projects from wrappers, clones, marketing-heavy launches, or low-signal attention.
47 +4. **Gap Analysis** — explicitly identify what is missing or underrepresented.
48 +5. **Context** — explain whether this week continues, sharpens, or breaks from recent movement.
49 +
50 +## Hard rules
51 +
52 +1. Use the raw JSON as the primary evidence source.
53 +2. Ignore unknown JSON fields.
54 +3. If `trending_repos[*].stars_gained` is mostly missing or null, explicitly say the trending section is directionally useful but not a true momentum leaderboard yet.
55 +4. Use `signals.top_topics` as supporting evidence, not as a substitute for judgment.
56 +5. Frontmatter must include exactly these keys:
57 + - `title`
58 + - `date`
59 + - `week`
60 + - `year`
61 + - `tags`
62 + - `categories`
63 + - `repos_featured`
64 + - `stars_tracked`
65 + - `top_repo`
66 + - `quality_score`
67 + - `summary`
68 +6. `date` must be `{{CURRENT_DATETIME}}`.
69 +7. `tags` must contain 3-8 topical items.
70 +8. `categories` must include `weekly`.
71 +9. `repos_featured` should equal the total number of repos considered in the weekly editorial pass.
72 +10. `stars_tracked` should equal the total stars across those repos.
73 +11. `top_repo` should be the repo that best anchors the editorial narrative, not automatically the most-starred repo.
74 +12. `quality_score` must be an honest 0-100 self-assessment; publishable work is `>= 60`.
75 +13. Include all required sections in this exact order:
76 +
77 +```md
78 +## Notable New Repositories
79 +
80 +## Trending This Week
81 +
82 +## Trend Analysis
83 +### Signal
84 +### Noise
85 +
86 +## What's Missing
87 +### Gaps
88 +
89 +## Conclusion
90 +```
91 +
92 +14. Keep the section scope aligned with the spec:
93 + - `## Notable New Repositories`: ~120-220 words, curating 3-7 repos.
94 + - `## Trending This Week`: ~100-180 words; explain where attention moved and add the stars-gained caveat when data is missing.
95 + - `## Trend Analysis`: ~150-260 words total across `### Signal` and `### Noise`.
96 + - `## What's Missing`: ~80-160 words with 2-4 concrete blind spots under `### Gaps`.
97 + - `## Conclusion`: ~50-110 words focused on why the week matters and what to watch next.
98 +15. The body must be at least 200 words.
99 +16. Do not include raw JSON, notes to self, placeholders, or tool transcripts.
100 +17. Output only the finished markdown file content.
101 +
102 +## Working method
103 +
104 +1. Identify the strongest new-repo signals.
105 +2. Evaluate the trending set for real momentum versus incumbent popularity.
106 +3. Cluster themes across repos and topics.
107 +4. Name one or more overhyped or low-signal patterns.
108 +5. Identify concrete gaps or absences.
109 +6. Compare with the previous week if a previous summary was provided.
110 +7. Produce a concise, readable editorial summary that a technical reader would actually trust.
111 +
112 +## Output template
113 +
114 +```md
115 +---
116 +title: "Week NN, YYYY Analysis"
117 +date: {{CURRENT_DATETIME}}
118 +week: "YYYY-WNN"
119 +year: YYYY
120 +tags: [tag-1, tag-2, tag-3]
121 +categories: [weekly]
122 +repos_featured: 0
123 +stars_tracked: 0
124 +top_repo: "owner/repo"
125 +quality_score: 0
126 +summary: "One-sentence editorial thesis."
127 +---
128 +
129 +## Notable New Repositories
130 +
131 +Write 1-2 paragraphs that curate the most credible new launches.
132 +
133 +## Trending This Week
134 +
135 +Write 1 paragraph about where attention moved. If star deltas are missing, say so clearly.
136 +
137 +## Trend Analysis
138 +
139 +### Signal
140 +
141 +Write 1 paragraph on the durable patterns.
142 +
143 +### Noise
144 +
145 +Write 1 paragraph on the inflated, weak, or off-mission patterns.
146 +
147 +## What's Missing
148 +
149 +### Gaps
150 +
151 +Write 1 paragraph on meaningful absences or underserved categories.
152 +
153 +## Conclusion
154 +
155 +Write a short closing takeaway about what the week means and what to watch next.
156 +```