main
md 136 lines 11 KB
Rendered Raw
1 # Fry — History
2
3 ## Core Context
4 - Owns pipeline validation across crawling, analysis, and publication.
5 - Uses test coverage to keep workflow changes honest.
6
7 ## Learnings
8 - 2026-06-07T21:42:28.011+00:00: Podcaster handoff QA passed local mock dry-run and full tests without exposing secrets; Actions has Podcaster endpoint/key configured by presence only, but the current workflow has no safe live Podcaster dry-run path because dry-run/candidate-only skip `podcaster-handoff` and normal/force-replace can mutate production content.
9 - 2026-06-07T21:42:28.011+00:00: Issue #302 handoff readiness landed in PR #314: the `podcaster-handoff` job now declares `needs: [analyze, generate, deploy]` so it waits for the Pages deploy, the payload carries publish run ID (`--publish-run-id`) and publish mode (`--publish-mode`), and the job runs with `continue-on-error: true` so Podcaster errors no longer fail the weekly workflow. Remaining note: the handoff is still an in-workflow job rather than a separate post-success workflow.
10 - 2026-06-05T15:36:19.379+00:00: The weekly crawl pipeline needs a terminal data-only no-AI analysis fallback after Copilot and GitHub Models fail, because model-access errors such as `no_access` are real reliability bugs, not transient deploy noise.
11 - The PaperMod theme in this repo needs Hugo `v0.146.0+`, so build validation must use a sufficiently new Hugo binary.
12 - End-to-end checks matter more than isolated unit confidence when artifacts move across crawl, analyze, and publish stages.
13 - Raw crawl output can be publishable with curation, but trend filters still need skepticism about exploit noise and weak momentum data.
14 - 2026-06-01: Issue #217 came from the analysis stage: Copilot retries could fail the tightened gate with generic week-title output or missing files, so the prompt now injects concrete week/year values, the workflow falls back to GitHub Models after Copilot gate failures, and `scripts/analyze_fallback.py` now works when invoked exactly as CI runs it.
15 - 2026-06-01: Issue #220 came from the generate stage: `generate_content.py` emits an absolute `page_path`, but the publish-branch commit step treated it as `content/weekly/...`, so the restore `cp` doubled the path and failed. The crawl workflow also had no failure-issue job, so generate/deploy failures were silent unless someone checked Actions manually.
16
17 ## Round 2026-06-01T12:19
18
19 ### Issue #217: Quality Gates
20 - PR #218 opened with all tests passing
21 - Fallback mechanism now includes GitHub Models support
22 - Copilot prompt validation hardened
23
24 ## Round 2026-06-01T12:41
25
26 ### PR #218 Merged
27 - Review comment resolved: removed outer quotes from YAML title hint
28 - Added regression test
29 - 542 tests passing
30 - Commit 9d15b18
31 - Merged (squash)
32 - Issue #217 closed
33
34 ## Round 2026-06-01T15:40
35
36 ### Issue #38: Anticipatory Tests
37 - Branch `squad/38-hindsight-tests` pushed
38 - Generated comprehensive test suite for hindsight validation
39 - Covers prediction registration, scorecard generation, metrics output
40 - Ready for integration with Farnsworth implementation
41
42 ## Round 1 (2026-06-05)
43
44 - Triaged issues #232, #230, #188
45 - PR #235: quality-gate fallback hardening (Copilot → GitHub Models path)
46 - Decision: data-only fallback when all AI sources fail
47 - Reusable skill: notify-failure job for pipeline failure visibility
48 - Outcomes: #232 has PR ready, #230 closed as stale, #188 rerouted to Leela
49
50 ## PR #236 QA (2026-06-05)
51
52 - Config-driven RSS expansion should be verified at the stage boundary: crawler output shape, correlation input resolution, press-context fallback, and rebuild hydration all need coverage.
53 - Bounded in-process RSS fan-out is acceptable for the current five-source enrichment set when full tests and a live smoke confirm stable artifact production.
54
55 ## Round 2 (2026-06-05)
56
57 - QA review of PR #236 RSS enrichment feature complete
58 - 554 unit tests passed
59 - Live 5-source RSS smoke test: 54 articles, 5 sources, no feed errors
60 - QA verdict: **approve** (no follow-up QA work required)
61 - Formal approval blocked by GitHub own-PR rules (self-authored by Fry PR author)
62 - Posted QA rationale to PR #236
63 - Awaiting security review (Hermes) and lead approval (Leela) before merge
64
65 ## PR #235 Copilot review follow-up (2026-06-05)
66
67 - Copilot fallback warnings should describe the observed pipeline state, not just retry exhaustion: the same branch can mean 0 Copilot attempts because the CLI is unavailable or failed attempts that never yielded a publishable summary.
68
69 ## PR #235 Copilot review resolution (2026-06-05)
70
71 - Resolved Copilot review thread PRRT_kwDOSgq4hM6HaPhr
72 - Updated fallback warning: "No publishable Copilot summary was produced; falling back to GitHub Models API."
73 - Added pipeline test assertion to prevent regression
74 - 9 tests passing
75 - commit 7409b05 pushed; thread resolved
76
77
78 ## Crawler reliability analysis (2026-06-05)
79
80 - Multi-source RSS is not yet the crawl bottleneck; GitHub API crawl still dominates wall time, while five external RSS sources completed in about one second after dependency setup.
81 - Next reliability iteration should keep GitHub crawl/cache as one core job and matrix only optional external news sources, merging per-source artifacts before analysis for isolation, retry granularity, and reproducible handoff.
82
83 ## Crawler reliability architecture assessment (2026-06-05T16:26:00Z)
84
85 - Reviewed old (26753498571) vs. new (27026348186) crawl jobs; GitHub repo crawl is the actual bottleneck (~4m47s–5m58s).
86 - In-process model is operationally simple/fast but offers poor per-source failure isolation; retry requires full crawl rerun.
87 - Recommendation: hybrid staged topology — keep GitHub crawl monolithic; add matrix for external RSS with fail-fast: false, per-source artifacts, and deterministic merge before analysis.
88 - Acceptance criteria: shared crawl context (week, since, until, source config), per-source artifacts (success or error JSON), merge job on `if: always()`, explicit optional-source degradation, backward-compatible rebuild mode.
89 - Tests to add: merge helper validation (schema, dedupe, sorting, error handling), per-source failure handling, fallback paths, reproducibility gates, citation preservation.
90 - Metrics: per-source (name, host, duration, article counts, errors) and aggregate (source_count, failed_source_count, total articles, artifact size).
91 - Decision recorded in .squad/decisions.md.
92
93 ## Issue #238 notify triage (2026-06-05)
94
95 - Run 27026348186 completed crawl, analyze, generate, and deploy successfully; only `notify` failed.
96 - Root cause: `gh release create week-2026-W23` is not idempotent when the weekly release tag already exists, so rerunning/publishing the same week produced HTTP 422 `Release.tag_name already exists`.
97 - QA fix: make notify update an existing weekly release with `gh release edit` instead of failing, while preserving release creation for new weeks.
98
99 ## Matrix + map/reduce PRD QA input (2026-06-05T18:15:23Z)
100
101 - Matrix crawl should be gated by deterministic shared run context, per-leg artifacts, fan-in checksums, optional-vs-required failure policy, and explicit rate-limit budgets; GitHub search fan-out is riskier than RSS fan-out because search quota is already the tight limit.
102 - Map/reduce analysis is promising for context reduction only if mapper outputs are schema-validated, reducer output preserves citations and contradictions, and the final markdown still passes the existing analysis gate with current fallback paths retained.
103
104 ## Analysis decomposition QA recommendation (2026-06-05T20:57:09Z)
105
106 - Signal-type hierarchical map/reduce is the lowest-risk analysis decomposition MVP because it matches current raw payload boundaries, is fixture-testable, and can run sidecar-first without overwriting the existing Copilot -> GitHub Models -> no-AI publish path.
107 - Map/reduce must not become publishable until mapper/reducer schemas, citation bindings, rejected-claim/contradiction sidecars, final `analysis_gate.py` compliance, fallback preservation, and A/B quality metrics pass.
108
109 ## Issue #257 overwrite-protection test groundwork (2026-06-05T21:16:49Z)
110
111 - Added deterministic no-network regression coverage around publish eligibility manifests and promotion guard behavior.
112 - Good canonical weekly summary/content must remain unchanged when candidates are failed, degraded, no-AI, stale, missing-manifest, or malformed-manifest.
113 - Safe rerun promotion is copy-stable and must not append or duplicate article body content; ineligible candidates should remain in staging with promotion diagnostics for debugging.
114
115 ## Issue #291: Copilot Pricing Validation (2026-06-06)
116
117 - Validated centralized pricing implementation in `scripts/model_pricing.py` for correctness and consistency.
118 - Workflow safety review: `.github/workflows/copilot-pricing-review.yml` safe for production.
119 - Full test suite passed (554 tests); no breaking changes detected.
120 - Pricing validation will support future cost-aware pipeline decisions and analysis budget optimization.
121 ## Issue #287 — Analysis Gate Preflight Hardening (2026-06-06T21:23:50.664Z)
122
123 - ✅ APPROVED: Bender's evidence inventory and gate failure classification implementation
124 - ✅ Validated: Evidence schema, citation link integrity, gate failure handling across all cases
125 - ✅ No regressions: pytest full pass (673 passed, 2 subtests)
126 - PR #288 validated and approved; ready for Coordinator merge workflow
127 - Orchestration log recorded at `.squad/orchestration-log/20260606T212350Z-fry.md`
128
129 ## Podcaster handoff QA validation (2026-06-07T21:42:28.011+00:00)
130
131 - Validated SquadScope-side Podcaster handoff locally without reading or printing `PODCASTER_API_KEY`; local shell did not expose Podcaster endpoint/key, while Actions has both `PODCASTER_ENDPOINT` variable and `PODCASTER_API_KEY` secret configured by presence check only.
132 - Commands: `TMPDIR=$PWD/.copilot/local-tmp python3 -m pytest tests/test_podcaster_handoff.py tests/test_pipeline.py -q` passed 20 tests; `TMPDIR=$PWD/.copilot/local-tmp python3 -m pytest -q` passed 702 tests plus 2 subtests.
133 - Mock dry-run exercised `scripts/podcaster_handoff.py --podcaster-dry-run` against a localhost HTTP server with a placeholder key: response accepted, auth header present, stdout did not disclose the key, and payload included `week`, `article_url`, `article_sha256`, `source_artifacts`, and `dry_run: true`.
134 - Workflow audit: `.github/workflows/crawl-and-publish.yml` only runs `podcaster-handoff` for non-`dry-run`/non-`candidate-only` runs, so `gh workflow run crawl-and-publish.yml -f run_mode=dry-run` is safe for the article pipeline but cannot validate the real Podcaster secret/endpoint handoff.
135 - QA blocker for first live Podcaster dry-run: the configured secret is Actions-only and there is no dedicated non-publishing Podcaster dry-run workflow/job. Do not dispatch a normal run solely to test Podcaster because it can publish or replace production content.
136 - Issue #302 acceptance gaps resolved in PR #314: the handoff job now declares `needs: [analyze, generate, deploy]` so it waits for `deploy`, passes publish run ID and publish mode in the payload, and runs with `continue-on-error: true` so a Podcaster failure cannot fail the weekly workflow. Remaining design note: it is still an in-workflow job rather than a separate post-success workflow.