A production-oriented, daily US market briefing pipeline for one professional
investor. Its default official_free mode uses public US-government RSS for
discovery, temporarily reads bounded official HTML from allowlisted agency
hosts, applies deterministic analysis rules, validates a typed canonical report,
renders a standalone mobile HTML dashboard, commits it to GitHub, and deploys it
through GitHub Pages. It needs no OpenAI API key and incurs no model-API charge.
The permanent iPhone Shortcut target is latest.html. Public Pages retains the
newest successful report plus seven prior successful dated reports.
- Live report: latest.html
- Source repository: changfanghan0324/us-market-intelligence
Every market analysis explicitly states:
- What changed?
- Why does it matter?
- Who benefits?
- Who loses?
- How would professional investors react?
- What indicators should be monitored next?
These are validated schema fields, not optional prompt suggestions.
08:07 America/New_York primary schedule
+ 08:37 and 09:07 safe retry schedules
→ secure configuration preflight
→ bounded official .gov RSS discovery + allowlisted HTML reading
→ deterministic ranking and validation
→ standalone HTML + canonical record
→ dedicated reports-branch commit
→ GitHub Pages deployment
→ public latest.html report-ID verification
Reports are generated only in the ephemeral GitHub runner and stored in GitHub; the production workflow does not depend on a local computer or iPhone file.
The production configuration uses these no-key public sources:
- Federal Reserve press releases;
- SEC press releases;
- BLS latest numbers;
- Federal Reserve FEDS working papers;
- recent issuer 8-K and 6-K filings discovered through SEC full-text search.
RSS remains the news/research discovery boundary. For selected Federal Reserve, SEC, and BLS links, the collector temporarily fetches allowlisted official HTML, extracts a bounded agency content region in memory, and discards the raw response; the original page text is never stored in reports, records, artifacts, or logs. It does not scrape commercial sites, call an AI model, or download prices and consensus estimates. Actual feed entries always rank ahead; it never invents events to fill the layout. A bounded 14-calendar-day window is visibly disclosed and a run fails safely if it cannot produce three distinct genuine releases.
The six answers are deterministic scenario and monitoring statements, not personalized advice or claims about investor intent. Optional FEDS research may degrade transparently if its feed is unavailable, while Knowledge Refresh is a static educational explainer.
If one official market feed remains unavailable after two bounded attempts but
the other feeds still provide enough genuine content, the affected News/Macro
section and provider record are visibly marked degraded. Public copy names only
fixed feed labels; it never exposes raw exception text or internal warning codes.
- The default mode has no API secret and does not require
OPENAI_API_KEY. - The production environment does not install the optional OpenAI SDK; free mode uses only the core, hash-locked dependencies.
- The committed workflow does not inject an OpenAI secret. Enabling the optional adapter requires a separate reviewed workflow change and GitHub Secret; changing the config alone is intentionally insufficient.
- Network calls, response sizes, concurrency, and deadlines are bounded.
- Secrets, raw provider payloads, fetched official HTML, holdings, and account data are prohibited from reports and logs.
- The public renderer uses an explicit field projection and pre-publication scan.
- HTML contains embedded CSS, no JavaScript, and no external assets.
- Generated content is committed to a dedicated
reportsbranch with scoped workflow permissions.
Official RSS is a release-discovery source, not a licensed market-data feed. Current price, market cap, consensus EPS, and consensus revenue remain visibly unavailable unless an operator adds a provider with public display/redistribution rights.
News scores are calculated by code. The 30/20/20/15/15 earnings score remains a contract for a future evidence-complete adapter; the default filing-only path does not manufacture those inputs. Unknown facts stay unknown, and unconfirmed release times remain labeled as unconfirmed.
There is no authoritative, no-key complete upcoming-earnings calendar in the
official source set. For the next open session, official_free instead performs
a bounded search over the prior 90 days of SEC 8-K and 6-K filings and lists only
events whose issuer document explicitly confirms the target date. This is not a
complete market universe: a zero-result scan never means that no company reports.
The filing-only view provides schedule facts, not consensus estimates, market
prices, scored candidates, or price-direction predictions. A complete-universe
claim still requires a reviewed calendar adapter with suitable rights.
- Use the configured GitHub repository.
- Keep
research.provider: official_freeinconfig/config.yaml; no API key or billing setup is needed. - Select GitHub Actions as the Pages publishing source.
- Run Daily Market Intelligence manually once.
- Use the permanent latest report URL in the iPhone Shortcut.
See Setup for the exact steps and iPhone Shortcut for the one-tap configuration.
uv sync --frozen --extra dev
uv run --frozen --extra dev pytest
uv run --frozen --extra dev ruff check .Tests are offline and use synthetic/provider-mocked data. They make no live
network or OpenAI request. The production workflow pins uv and installs from the
hash-locked uv.lock file. Local work on the separate OpenAI adapter must keep
the extra selected on every invocation, for example uv run --frozen --extra openai market-intelligence --help.
- Final architecture
- Full Claude Code Opus review
- Claude Code Opus reconciliation
- Claude Opus free-mode review reconciliation
- Data licensing policy
- Operations and maintenance
- Future upgrades
Implementation began only after an actual Claude Code Opus review covering security, architecture, cost, and reliability returned a conditional proceed and the mandatory findings were reconciled.
GitHub scheduled workflows are best-effort. The workflow uses timezone-aware, non-top-of-hour attempts at 08:07, 08:37, and 09:07 New York time so a delayed, dropped, or failed first attempt has two independent fallbacks. A later attempt validates and safely redeploys an existing same-day report without calling the provider again. If a strict delivery deadline becomes contractual, invoke the same CLI from a scheduler with an SLA and retain GitHub Pages as the publication surface.
The free provider has no token or model-search usage to bill. Its remaining costs are ordinary GitHub Actions/Pages usage and network access, subject to GitHub's current plan limits and terms. If the optional OpenAI adapter is enabled, the usage ledger and bounded request limits apply as an additional cost-control layer.
This project is for personal research and education, not investment advice.