Commit Graph
16 Commits
Author SHA1 Message Date
jsahnandClaude Fable 5 f5fa7ec70f Add a Monday-morning weekly recap briefing
No US session closes into Monday KST, so Mondays (default 07:00, cron
in the daemon with restart catch-up) now publish a weekly review built
entirely from stored data: the quotes table collapsed into week-over-
week changes and the week's daily briefing headlines as the narrative.
The recap is a BriefingResult kind="weekly" reusing MarketPayload, so
the store, verification pass, all delivery channels (Blogger title
"미국 주간 리뷰 <monday>") and the dashboard (주간 리뷰 badge) work
unchanged. Manual runs via `run-once --weekly [--date <monday>]`.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-12 23:52:31 +09:00
jsahnandClaude Fable 5 1e6272da74 Fix table assertion after inline-style change
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 14:21:07 +09:00
jsahnandClaude Fable 5 3ee37bfa49 Give Blogger tables inline borders
Blogger themes ship no table styling, so the quote tables rendered as
borderless text. Inline styles survive every theme and the mobile view.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 14:20:41 +09:00
jsahnandClaude Fable 5 830e4e0522 Fix date framing in briefings and make Blogger posts idempotent
The 9/1 briefing called the US 8/31 session "9월 첫 거래일" - the LLM
was anchoring on the KRX date. Both prompts now pin every temporal
phrase (weekday, first/last trading day, month boundaries) to the US
session date, and the verifier treats a mismatch as a major issue.
BloggerDeliverer now updates the existing post for the same KRX date
instead of creating a duplicate on resends.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 14:13:01 +09:00
jsahnandClaude Fable 5 b75bf0b887 Surface blog-list errors in blogger-auth instead of an empty list
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 13:39:40 +09:00
jsahnandClaude Fable 5 5232631b44 Allow a fixed loopback port in blogger-auth
Supports web-application OAuth clients with a pre-registered
http://127.0.0.1:<port> redirect URI; desktop clients keep the random
port default.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 12:19:54 +09:00
jsahnandClaude Fable 5 12d7b47f46 Add a Blogger delivery channel with one-time OAuth setup
BloggerDeliverer posts each briefing (markdown -> HTML, H1 becomes the
post title with the report headline) via the Blogger API v3 using a
long-lived refresh token; `us2kr blogger-auth` runs the loopback OAuth
flow once and prints the BLOGGER_* lines for .env. Enabled only when
all four BLOGGER_* settings are present.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 12:04:49 +09:00
jsahnandClaude Fable 5 fecc767a5c Remove the verification badge from the dashboard
Verification now runs silently; the verdict lives only in the result
JSON.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 10:55:28 +09:00
jsahnandClaude Fable 5 325ea6622a Drop the verification memo from the dashboard
Keep the pass/issue-count badge; the full issue list stays in the
result JSON for diagnostics.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 10:50:28 +09:00
jsahnandClaude Fable 5 ed48f4c96b Add an LLM fact-check pass over the generated briefing
After summarisation the report is verified against the collected
payload (numbers, directions, unsupported claims) by a second LLM call
with a Verification JSON schema. Major issues trigger one revision and
a re-check; minor-only verdicts are normalized to ok. Failures never
block delivery. The verdict is stored in the result JSON and shown on
the dashboard (badge + 검증 메모). Disable with US2KR_VERIFY_ENABLED.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 10:37:39 +09:00
jsahnandClaude Fable 5 449b6d8ca3 Publish the dashboard on 0.0.0.0 so other devices can reach it
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 01:06:52 +09:00
jsahnandClaude Fable 5 ab16eaf5a7 Stop displaying the summary model name
Drop the "요약 모델" footer from rendered briefings and the model badge
from the dashboard (degraded briefings keep a "요약 없음" chip). The
model is still recorded in the DB/result JSON for diagnostics.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 01:04:47 +09:00
jsahnandClaude Fable 5 a482a0a3e3 Add Apple container deployment for daemon + dashboard
install-apple-container.sh builds and (re)starts both containers
(dashboard mounts reports/ read-only, port 8090); --boot installs a
LaunchAgent since Apple container has no restart policy. README covers
the new deploy path, SearXNG settings, and the dashboard.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 00:59:07 +09:00
jsahnandClaude Fable 5 f7b8d895c3 Add TypeScript web dashboard for browsing archived briefings
Zero-runtime-dependency Node 24 server + esbuild-bundled client.
Reads reports/*.json only (never the daemon's SQLite/WAL): summary
card, dual Seoul/New York clocks, holiday-gap rows in the briefing
list, per-symbol close chart with table view, error log.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 00:58:51 +09:00
jsahnandClaude Fable 5 920d9358a0 Add SearXNG news collector merged into the briefing pipeline
Optional meta-search source (SEARXNG_BASE_URL): per-query isolation,
time_range=day, merged and deduplicated with the RSS feeds. Briefings
still publish on RSS alone if the instance is down.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 00:58:35 +09:00
jsahn 8bc43b3ce4 Initial commit 2026-08-31 14:33:53 +09:00