krisf
92373aa3c6
fix(entrypoint): arm cron worker via self-ping after boot
...
instrumentationHook is disabled in the standalone build, so node-cron only
arms on POST /api/worker/ping. Without a self-ping, a fresh container or
restart runs zero ingest passes (worker silently never armed) — exactly
what happened on the :8 deploy. Adds the same self-ping block as
technews/finance entrypoints (identical).
2026-08-18 11:22:12 -04:00
krisf
08b9deb3d5
fix(pipeline): dedupe+P2002; add red maple-leaf cover system; replace dead CBC feeds (Google News CN / NatPost Canada); worker dead-letter
2026-08-18 10:24:09 -04:00
krisf
44d3220c4d
UI: trim footer boilerplate, header tagline to 'Your Canadian News'
2026-08-16 08:39:24 -04:00
krisf
7a19afb63a
llm: forbid source/newsroom attribution in synthesized report
2026-08-16 05:09:56 -04:00
krisf
b5a25c1232
ui: remove source attribution + publisher rights notice
2026-08-16 05:01:26 -04:00
krisf
b79c439c7f
chore(gate): commit pre-push gate (secret -> build -> test, fail-closed)
...
- scripts/gate/gate.sh: 3-stage gate — 1) gitleaks, 2) build
(tsc on commit, full next build on push), 3) LLM parse contract
tests. Fail-closed: setup errors, timeouts, and findings all block.
- scripts/gate/hooks/{pre-commit,pre-push}: exec gate.sh commit|push.
- scripts/install/install-hooks.sh: idempotent installer (verifies repo
root, bootstraps pinned gitleaks 8.30.1 if absent, wires both hooks).
- scripts/install/bootstrap-gitleaks.sh: pinned per-user install,
x86_64/arm64, GitHub release download + SHA-less checksum pin.
- .gitleaks.toml: useDefault=true; single allowlist = .env.example
placeholder lines (secret= and change-me values) by path+regex.
Real secrets — even inside .env.example — still trip the gate
(empirically verified: OpenAI/AWS/Slack/GitHub tokens all caught).
- tests/llm-parse.test.ts: pins parse.ts contracts (strict 6-paragraph
body, headline/scalar/or array rejection, stopword rules, tag
fallback) — the choke point for LLM output parsing.
- package.json: 'test' script.
- README: 'Commit gate' section (install, stages, verified fail-closed
modes).
Verified before commit: clean tree PASSes all 3 stages; staged
realistic secret FAILs stage 1 (exit 1); broken type FAILs stage 2;
broken assertion FAILs stage 3; next build exit 0.
2026-08-16 00:27:41 -04:00
krisf
69f84e0bc6
fix(build): commit src/data/feeds.ts — blanket data/ gitignore was hiding committed source, breaking pristine builds
2026-08-15 23:19:37 -04:00
krisf
d1bf2962ff
final cut: remaining synthesis wording (package.json, Dockerfile env)
2026-08-15 22:52:24 -04:00
krisf
478ff07bc5
drop all synthesis wording + sources box; 3->6 paragraphs, deeper prompt, 1.6k tok
2026-08-15 22:41:35 -04:00
krisf
9ebc3bffab
fix: mobile hero overlay — stop Lead-briefing badge clipping
2026-08-15 22:07:56 -04:00
krisf
9210dc8f14
fix(mobile): hide inline header nav below md; add overflow-x:clip guard
...
Header NavLinks (Top Stories/Canada/National/All) always rendered and
overflowed the ~360-400px viewport, causing whole-page horizontal
scroll + wrapped/bleeding active pill. Now hidden on phones (the
horizontally-scrolling SectionPills row under the header remains the
mobile nav); inline nav returns at md (768px). Added overflow-x:clip on
html as a global NOOP-safe against any future sideways overflow.
2026-08-15 19:52:53 -04:00
krisf
cbea5e8fa4
deploy: Dockerfile, entrypoint, standalone output, dockerignore
2026-08-15 18:11:41 -04:00
krisf
e709de01d4
merge: fold in Gitea template init
2026-08-15 16:07:18 -04:00
krisf
1010f27f44
MapleBrief: production Canadian news aggregator
...
Next.js 14 + TypeScript + Tailwind + Prisma/SQLite.
- LLM synthesis abstraction (OpenAI/Anthropic/Ollama) + admin settings UI
- RSS ingestion pipeline (parser + cheerio content) + node-cron worker
- AdSense AdUnit placements (header/in-feed/in-article/sidebar)
- Sources analysis attribution, nofollow links, canonical/OG, sitemap/robots
- Admin auth (ADMIN_API_KEY, timingSafeEqual, fail-closed 401)
- Multi-cell lady-ga-ga marker, sitemap, robots, legal pages
- Comprehensive README (setup, LLM config, AdSense, migrations, deploy)
2026-08-15 16:07:07 -04:00
krisf
9e8e785b1e
Initial commit
2026-08-15 14:13:00 -04:00