Spaces:
Sleeping
Sleeping
Commit History
-
feat: The Brief renders as the published research noteβ
The Brief was a stack of ~20 cards. It is now one document, reproduced from the note published on 2026-09-02: masthead, ten sections in a fixed order, sticky contents bar, sticky data rail, sourced footer. Same palette, same typography, same placements. The reproduction is asserted, not asserted-to-be. tests/test_note_fidelity.py compares against tests/fixtures/published_note.html and passes only if the stylesheet matches declaration for declaration (117 rules, no additions) and each of the three figures is byte-identical -- coordinates, order, attributes. Two encodings are allowed to differ and both are pinned by that test: the .rt-note selector prefix, and xmlns on every <svg>. The palette is the app's now, not the document's. Every hardcoded colour across 19 modules -- 330 of them -- was remapped onto the note's thirteen tokens, config.toml was repointed, and Inter gave way to the note's three families. A light document inside a dark shell would have been two designs. What the fiβ¦93f9cc0
-
fix: close the numpy import race that took the live Space downβ
The deployed app died at load with "partially initialized module 'numpy' has no attribute 'isscalar' (most likely due to a circular import)", raised from inject_global_css() -> _register_plotly_dark_template(). Two threads reaching numpy at once. The reranker warms up on a background thread -- the optimisation added so a cold start does not show a blank page -- and importing torch pulls numpy in behind it. Assigning pio.templates.default makes plotly deep-copy and re-validate the template, and that validator calls np.isscalar. On a Hugging Face cold container the warmup was still importing when a rerun re-entered the validator, and Python handed it a half-built module. Not a regression from the guidance work: theme.py has not changed since the rename, and the race arrived with the cold-start optimisation itself. It surfaces on the Space and not locally because the Space is slow enough to widen the window. Fixed at the source -- numpy is now imported to completion on the main thread β¦7af34a9
-
chore: rename the project to Readthroughβ
Amplegest is an existing Paris asset manager, founded 2007, EUR 5.2bn under management, with a European equity fund range β the same buyers this tool is built for. Shipping under that name carried a trademark exposure and read, to the intended audience, as either a competitor's product or a mistake. Readthrough is the buy-side's own term for the implication a disclosed fact carries for the numbers, which is exactly what this produces: it reads the filing, reports what changed, and quantifies the effect only where the company quantified it. The codebase already spoke the word β the brief's lead panel is keyed read_through_label. Renames the wordmark, page title, intro copy in four languages, the plotly template, the SEC and prospection user agents, and the docs. Nothing behind the name changes. Also ignores .tmp_* scratch runtimes, which have no business in a commit. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>4d22778
-
feat: dark mode, market and quarter context on The Brief, faster cold startβ
UI - Migrate the whole app to a dark palette driven by dashboard/theme.py tokens rather than an overlay, including a registered Plotly template so charts theme globally. Streamlit base set to dark in config.toml. - The Brief now opens with what a memo about a listed company must show: a market band (price and move, market cap, 52-week range with position marker, dividend yield) and the quarter's reported figures (revenue, EPS, gross and operating margin, FCF with deltas). Rows come from the same masked view Financials uses, so a hidden figure stays hidden. - Surface what_changed on The Brief itself; it was only reachable from another screen although it is the first thing the brief promises. - Warn when most facts are unverified instead of showing a thin brief with no explanation. - Landing page explaining each destination, with saved briefs as entry points, for visitors arriving with no ticker. - Company Primer: prose sections rendered as cards rather than dataframes,β¦3cd8872
-
feat: multi-provider LLM support, prominent chat, design pass, and new analyticsβ
- Add agent/llm.py provider factory (Anthropic/OpenAI) with a sidebar model picker so visitors can paste their own API key instead of relying solely on the server's; thread the resulting config through generation, chat, and translation. - Promote Chat to primary nav (was buried under a secondary "Evidence tool" heading) with suggested-question chips and a "sources searched" line. - Fix a pre-existing bug where every nav/CTA color accent silently no-oped (Streamlit exposes st.button(key=...) as a `st-key-{key}` wrapper class, not a `key` attribute) and tighten the palette to three families (emerald brand, violet AI, semantic bull/bear). - Add a "Sources analyzed" provenance card, quarter/annual basis split on the financials grid, and cross-category signal dedup. - Add valuation + peer comparison, next-catalysts, brief-vs-brief delta, and one-page PDF export. - Rename the product from Primer to Amplegest across the app, docs, and the Hugging Face Space (old URL redireβ¦7880373
-
feat(theme): tinted canvas + visual tokensβ
- Add FS_SECTION_LABEL token (0.78rem) for section headers - Tint main canvas to #fafaf9 with white card overlays - Change sidebar to white background for contrast - Add background and padding to bordered containers - Add .primer-section-card class for HTML-rendered sections - Change sticky bar background to match canvas tint - Change chat messages to white background for visibility Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>00eb30b
-
chore: checkpoint sidebar nav + i18n work-in-progress before Decision Stack redesignβ
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>e6496c0
-
feat: add Chat tab β bounded Q&A agent over stored filings and transcriptsβ
New dashboard/chat.py renders st.chat_message/chat_input UI per ticker. agent/chat_agent.py drives a 5-round agentic loop using search_filing, search_transcript, get_financial_metrics and get_analyst_expectations (no Tavily); temperature=0, citations enforced, data-availability preamble prevents hallucinated fiscal periods. Sources expander shows raw tool outputs for every assistant response. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>de15094 -
feat: wire Exposure Radar into app β nav, sidebar portfolio input, brief persistence hookβ
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>959dd66 -
fix: split line-height selector off form controls; annotate SPACE_6β
- line-height: 1.6 now only applies to text containers (html/body/ .stApp/.main/sidebar), not button/input/select/textarea where it could add unwanted vertical space inside Streamlit-styled controls - SPACE_6 = 28px annotated as intentional section-break jump (not a 4px-linear typo) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>c60e11b -
feat(theme): add typographic/spacing scales and update global CSS (Phase 1a)β
Adds FS_PAGEβFS_EYEBROW (6 font-size tokens) and SPACE_1βSPACE_6 (6 spacing tokens) as a shared source of truth for downstream components. Updates inject_global_css: narrows content max-width to 1080px, adds .primer-prose (700px text width) and .primer-sticky-bar utility classes, sets body line-height 1.6, and softens sidebar inactive label to #4b5563 / 0.84rem. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>3d69c69 -
refactor: visual system normalization β violetβIA only, glyph unification, token hygiene (Lot 4)β
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>1843630 -
feat: add Quality & Tone deep-dive section (Lot 2)β
New dashboard/quality_tone.py renders Tone & Sentiment panel, full Earnings Quality grid (concerning-first sort), Analytical Tensions, Risk & Disclosure Changes (caution/positive/neutral grouping), and Capital Allocation spotlight. Wired into NAV_SECTIONS at index 5 and app.py routing; CSS nth-child selectors updated for FORWARD group label. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>abd0b25
-
fix: nav group label alignment + impact badge bubble dotsβ
Replace HIGH/MED/LOW text on impact badge with filled dot indicators (βββ / βββ / βββ) to avoid confusion with source reliability labels. Fix sidebar nav group headers misaligned with radio circles by switching ::before from display:block to flex:0 0 100% with flex-wrap on parent. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>fd1e2da -
fix: verdict layout, N/A market pulse, impact badge colorsβ
- agent/tools.py: get_analyst_expectations now emits exact schema field names (consensus_rev_est_bn, revision_30d_pct, d1/d5_price_reaction_pct) so the LLM copies values verbatim instead of renaming β eliminates silent null drops via Pydantic extra="ignore" - agent/prompts.py: MarketExpectations instruction now explicitly lists each field name and forbids renaming - dashboard/verdict.py: - Market Pulse chips hidden when value is None (no more "N/A" display) - AI Deeper Band moved directly after AI Synthesis (all AI interpretation grouped before sourced facts) - Bull/Bear rendered as paired rows (st.columns per pair) so cards align horizontally regardless of count asymmetry - dashboard/theme.py: IMPACT_COLOR/BG/BORDER replaced by per-level slate tokens (HIGH=slate-900, MED=slate-500, LOW=outline slate-300) - dashboard/components.py: impact_badge() rewritten β compact tier labels (HIGH/MED/LOW) with severity colors, drops dots and "Impact" word Co-Authored-By: β¦d42057a -
feat: add impact badge to all sourced factsβ
Each fact now carries a third badge (βββ/βββ/βββ in teal) indicating materiality to the investment thesis β HIGH, MEDIUM, or LOW β alongside the existing reliability and source badges. - schemas.py: Optional impact field on SourcedFact, CategorizedRisk, ManagementCommentaryTopic, GuidancePoint (+ reliability added to GuidancePoint which lacked it) - prompts.py: impact rubric + field in every fact dict of the JSON template so the synthesis LLM assigns it consistently - theme.py: IMPACT_COLOR/BG/BORDER tokens in teal (distinct from reliability green/amber/gray and AI purple) - components.py: impact_badge(), updated fact_card, tension_card, quality_signal_chip - verdict/risks/mda/catalysts/earnings_call: impact_badge wired into every fact rendering site Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>21359be
-
style: remove alignment spaces from AI color tokens
bbf6900 -
feat: add AI interpretation color tokens to theme
e58b701 -
deploy: Primer app for HF Spaces β clean orphan historyβ
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>35676b4