Goal-linked investing, as a plugin

Investments

oak-domain-investments · PyPI

Daily market briefings, stock research, investment theses, goals, watchlists, and holdings in one workspace.

Business domain: Investments. The application features below apply to this domain.

Source: 0.70.0rc10; activation separate
Package
timber · grove · acorn · sky
Plugs into
daily digest · research · theses · goals · holdings · macro · forecasts
Capabilities
18 curated themes, checked against the market
Macro board
Local UI assembled and tested; activation stays off
October 31 additions
none
Core edits

Investments is OakQuant's first business domain delivered as a plugin. One installed package adds investing to four layers at once: data models and services in the substrate, HTTP routes in the engine, agent tools in the front door, and widgets in the experience. The daily Financial Digest brings shared research to the site and to confirmed email subscribers. Tools, Ideas, Financial Digest, and Macro sit in one Investments workspace. It also turns a watchlist into a goal-linked plan: track a symbol, set a recurring contribution, project the expected value over time, link real brokerage holdings to a goal, and let a scheduler roll growth into goal progress.

What’s inside

Daily Financial Digest

A shared 20-stock briefing for exchange trading days: ten benchmark-weighted S&P 500 titans and ten news-led names, with an opening summary, reasons, source links, and next-month price charts.

Investment theses

Keep your own explanation of an investment idea and link your thoughts to the automatically written daily view. Tools, Ideas, Financial Digest, and Macro share one Investments workspace.

Newsletter subscriptions

Choose a domain and topic, verify your email, and receive the digest. Delivery checks consent, and newsletter-data export and erasure use verified requests.

Goal-linked watchlist

Track symbols against a goal, or keep an unlinked personal list. A home gadget aggregates every goal's watchlist plus the unlinked one.

Accumulation plans

A watchlist item can carry "invest this amount every period". The plan drives a projected growth curve.

Projection modal

Overlays the expected growth at plan time, the actual tracked value, and a live re-projection, so the gap between plan and reality is the story.

Growth scheduler

A daily job values plans and linked positions, snapshots them, and rolls the latest value into the goal's current value and progress.

Holdings linkage

A real brokerage holding from Plaid can be allocated to a goal as a position, kept distinct from the holding it came from.

Agent tools

The agent can read a watchlist, read a goal's investments, and add a symbol, all through the same domain service.

Personalized goal images

Add a photo of yourself to your account and a goal's inspiration images can picture you achieving it. The goal flow opts into a generic, consent-gated reference-photo capability that conditions image generation on your likeness.

Macro board

Reads world news across a curated taxonomy of macro themes, tariffs, conflict, rates, energy, drought, measures how loud each one is, then CHECKS it against the instruments that would move if it were real. A theme is only "confirmed" when the tape agrees.

Priced vs unpriced

Every theme is classified against the market: aligned, contradicted, early, quiet, or UNPRICED, meaning loud coverage the market has not moved on yet. That last state is the one a price-only model cannot see, and it is recorded, not just displayed.

Macro memory

The board is captured on a schedule and kept, so the platform can ask what themes have led over time, and can score its own past calls: for the themes it called unpriced, did the market subsequently move?

Adaptive forecasting

Price, fundamental, news, earnings and macro signals feed one shared attribute vector. Outcomes are scored as they mature and the engine reweights toward whatever actually proved accurate, nothing is hand-tuned to a view.

Scope: Investments only

This page describes the financial application. Its stock signals, brokerage holdings, forecasts, market evidence and scientist comparison view are specific to Investments. They are not automatically enabled in other domains.

Your daily workspace

Home is the daily entry point. Investments groups Tools, Ideas, Financial Digest, and Macro. Ideas opens personal theses, not a community publication. Goals, Portfolio, Activity, Calendar, and Rustle remain focused destinations; availability is checked against your organization, permissions, and subscription.

October 31 local work: assembled, disabled

The inspected Investments source is 0.70.0rc10. Its version does not establish installation or activation in your account. The assembled local UI now connects Home catch-up, Calendar preferences, approved community discussions, research, shared goals, connections and the existing Acorn drawer. Synthetic API journeys exercise the Rustle flows at 360px and 390px in light and dark themes. Guide rendering also checks 1280px. These are local checks, not an authenticated local stack, deployed acceptance, model-quality result or permission to send mail.

The source activation inventory remains off, including proactive delivery, community publication, judgment calls, roundup generation and automatic publication, payments and typed-calendar readiness. Config files do not prove that their pages have been seeded or that runtime flags match the files. This guide does not change any flag, schedule, price or entitlement.

Use Home as the daily entry and the existing Tools menu for Rustle. In an authorized local test, Rustle has these focused views:

  • /rustle?view=communities: community directory and saved sponsored-post choice.
  • /rustle?community=<id>: approved posts, your pending submissions and explicitly scoped Acorn drafts. An unavailable community never falls back to your inbox.
  • /rustle?view=research: your private decision journal, watchlists and offered shared goals. No community selection is required for personal research.
  • /rustle?view=connections: profile privacy, connection requests and accepted conversations. Direct messages need their own enabled policy and capability.
  • /rustle?view=roundups: followed sector previews and the latest available preview. Missing approved sources keep pilot generation held; publication and automatic publication stay off. No Saturday email is implied.

These views are capability-gated. With the current switches off, an explicit unavailable view is the expected result, not a reason to open a private fallback. The staged dynamic pages remain /page/community_requests, /page/communities and staff-only /page/community_request_review; Calendar remains /calendar. The Home config replaces the existing page at /, not a second dashboard. Config seeding and runtime verification are separate local deployment gates.

Community mode reads only authorized approved content. Acorn uses the same drawer with three fixed community intents and no personal chat transcript, session, financial profile or freeform private query. A labeled draft reaches the matching composer only after “Use draft in community composer”; replacing unsent text needs another confirmation. “Submit for review” creates a pending revision, not a public reply. Human review of the exact revision remains the publication boundary.

An idea can be promoted through the existing canonical investment-thesis form. The resulting thesis stays private; the community sees only that promotion took place. Its title, evidence and preview are excluded from the community. A journal entry or watchlist requires an explicit destination and review before community sharing. Shared-goal invitations show only deliberately shared fields and bind acceptance to the current generation and snapshot. Each accepted participant saves a separate reminder choice; balances, holdings and private notes are excluded.

Newsletter confirmation, proactive master/category/channel/item consent, community following and permission for direct messages remain separate. An item choice with master off sends nothing. Current access, cancellation and event state are checked again before dispatch. Leaving or revocation invalidates restricted access. No personalized section belongs in a public edition cache.

Sponsored posts retain sponsor and compensation labels. The directory control saves the plan default, hide or show choice; it neither buys a placement nor activates a payment. Sponsored material cannot displace deadlines on Home or become a sponsored reminder. Legal, staffing, terms and live activation remain separate gates. The product guide's local test checklist gives the exact actions and expected receipts without requiring a real provider call.

Historical band result, not live performance

A user-supplied 20-stock test reported 92.6% daily coverage and 90.8% month-end coverage inside nominal 95% bands, respectively 2.4 and 4.2 percentage points below target. The approved artifact, run date/code version, sample dates, universe selection, numerators/denominators, missing-data coverage, band construction, pointwise/simultaneous definition, and held-out status were not supplied with these figures. Twenty stocks is not the effective sample size. Overlapping horizons and dependence across stocks/time require dependence-aware uncertainty; no independent-binomial interval or significance claim follows from these rates. They do not establish live coverage, directional accuracy, returns, or challenger promotion. Recalibration needs a separate held-out experiment that also measures band width. This local work does not change production bands or selection policy.

Shared intelligence, then shared data

Cambium provides the generic prediction, scoring, trust and blend contracts. Timber provides the model, persistence and service registry substrate. The Investments plugin supplies financial features, return targets, market-provider adapters, forecast implementations and evidence records. Grove serves the scoped workflows and APIs; Sky renders the domain's configured screens. Canopy establishes identity, and the serving API checks permissions.

The existing financial cascade compares price-based ridge regression, ridge regression with news-cluster features, and a small neural network. The financial forecast ensemble also contains exponential smoothing, momentum and mean reversion. These implementations live in the Investments package, not Cambium's generic core or Timber's shared runtime.

Scientist workbench: pre-production release candidate

The current development adds per-issue model comparisons, model and combination toggles, historical error as known before issue time, realized errors when labels arrive, and experimental evidence-gated combinations. Scientist access requires the explicit role; ordinary administrator access does not grant it. Shared market-engine records and private tenant evidence have distinct scopes.

Training-window and model-version fields are shown only when recorded. Legacy records with missing lineage stay labeled as missing. Exploratory combinations are not recorded forward predictions and do not replace the production default. The available local code and tests do not establish a predictive advantage.

The candidate adds a daily shadow tournament: ridge regression, a small neural network, and recency-weighted gradient-boosted stumps, each with 63, 252 and 756 calendar-day training windows. The 1, 5 and 20 calendar-day forecast horizons have separate scoreboards. Every fitted, insufficient-data or failed attempt is kept in the run diagnostics. No LLM is used by the tournament.

The overview charts capability and paired competitiveness over time, then opens an individual forecast. Personal execution history groups repeated symbols, lets a user overlay issued dates, and can rebase the chart to a chosen issue's recorded price. Scientists can also inspect raw model members. Outcomes appear only after they are observed and recorded; unavailable outcomes stay pending.

Forward mean, median, recent-winner, smart-blend and sustained-selector policies are recorded separately from hypothetical workbench combinations. Smart blends qualify historical skill and balance model-family or correlated-residual groups; they do not exclude a useful dissenter for being far from the median. Model agreement is not a calibrated confidence interval.

Shadow outcomes cannot change production trust or the displayed production default. Financial overlap-aware evaluation remains in the Investments adapters and shared evaluation package. Generic competition contracts are documented in Cambium; shared learners and execution storage are documented in Timber.

One package, four layers

Investments is the proof that a whole business capability can plug into OakQuant without touching the core. The package advertises one entry point per layer. Timber discovers its models and services, grove mounts its routes, acorn registers its tools, and sky resolves its widgets through the registry. Install it and investing appears across the platform. Leave it out and nothing breaks.

From a watchlist to a plan

A watchlist starts as the symbols you track. The domain extends each item with an accumulation plan: an amount, a frequency, and a contribution per period. From that plan and a per-category expected return, it projects a value curve with profit, so tracking a stock becomes a concrete plan to invest in it.

It tracks reality, and learns

A daily scheduler values every plan and every linked position, writes a snapshot, and rolls the latest value into the goal's current value and progress, so goal attainment moves on its own. The projection modal then shows three lines: the original expected growth, the actual tracked value, and a live re-projection from the latest data. The live projection can change as observed outcomes feed back through the prediction engine. That feedback does not, by itself, prove an investment edge.

Holdings stay honest

Brokerage truth and goal allocation are kept separate. A Plaid holding is what you actually own. A position is what you have allocated to a goal. Allocating a holding to a goal creates a linked position and adds the symbol to the goal's watchlist, without changing the underlying holding.

Your goal, with you in it

A goal's inspiration images can picture the person whose goal it is. This is a generic platform capability, not an investing one: a user adds a photo of themselves to their account, the substrate stores it and conditions image generation on it, and the goal flow simply opts in, resolving that reference and asking for images that preserve the person's likeness. Because the capability is generic, the investments package owns only the opt-in, not the photo, the storage, or the generation. It is consent-gated and self-only: storing a face is sensitive, so consent is required, deletion is permanent, and picturing other, identifiable people is deliberately left for a later product decision.

Reading the world, and checking it against the market

The macro board asks what is actually moving the world right now. It collects world-scoped news, buckets it into a curated taxonomy of macro themes, tariffs and trade, conflict, central-bank policy, energy, drought, commodity shortage, and measures how loud each theme is relative to the rest of the board. Then it does the part that matters: for each theme it looks up the tradeable instruments that would move if the story were real, and checks whether they did, scaled by each instrument's own volatility.

That produces a state per theme rather than a score: aligned (the coverage and the tape agree), contradicted (heavy coverage, proxies moving the other way), early (proxies moving on thin coverage), quiet, or unpriced, loud coverage the market has not taken a view on yet. Unpriced is the interesting one, because it is the state a price-only model is blind to by construction.

The board is user-independent by design: it is a statement about the world, not about your portfolio, so it is computed once on a schedule and serves every reader. Only the exposure analysis, which of your holdings sit in the affected sectors, is personal.

A memory, and a scoreboard it cannot dodge

Each capture is kept. That accumulating history answers which themes have led the board and for how long, and it makes the board accountable to its own output: for every theme it called unpriced, did the proxies subsequently move? That is a falsifiable claim the platform makes about itself, and it is reported with the number of matured calls beside it, because a rate without a denominator is not a result.

The same captures feed the forecasting engine as bounded macro attributes on the same vector the price, fundamental, news and earnings signals use. Nothing there hard-codes a view; the engine scores its predictions against realised outcomes and reweights toward whatever proved accurate.

Daily research, one shared edition

The Financial Digest selects 20 stocks: ten S&P 500 companies by benchmark-fund weight, plus ten names chosen using current news and relevance signals. News attention, price direction, and confidence stay separate. Research, charts, and verified context reuse daily caches, so opening the page or delivering another copy does not rerun the research. Scheduled publication follows the exchange calendar and holds incomplete editions.

The email starts with a summary and selected company charts, then offers the full 20-stock report. A company mentioned in Worth knowing is included in A closer look without replacing or repeating the original features. Readers can keep their own linked investment theses.

Newsletter signup is topic-specific and requires email confirmation. Delivery rechecks consent. Unsubscribing and erasing newsletter records are separate operations, and privacy requests verify the address first. A site-account request has its own scope.

What we are building towards

We are honest about the stage this is at. The forecasting engine records predictions, scores them as they mature, and learns from the result, but the volume of matured, independent outcomes needed to demonstrate a durable edge is far larger than any live system accumulates quickly. We do not claim a predictive edge we have not measured, and the platform is built so that a null result is visible rather than hidden.

The programme underway is deliberately ordered so that each step can be judged:

  1. Measurement first. Overlapping forecast windows make naive accuracy statistics look far more certain than they are. The evaluation harness already provides effective sample size, date-block bootstrap, purged and embargoed walk-forward validation, and baseline comparisons through oak-forecast and its Investments adapter. The existence of these tools does not establish predictive improvement.
  2. Depth of memory. Reconstructing years of point-in-time history, data as it was knowable at the time, with no survivorship bias and no restated fundamentals leaking backwards, so models are trained and judged on decades rather than months.
  3. Temporal structure. Not just what the macro board says today, but how it is changing: velocity, acceleration, and the moment a theme becomes unpriced, which is the event rather than the level.
  4. Stronger model classes, chosen for the shape of the data, with sequence models over the accumulated macro memory.
  5. Knowing when it does not know. Calibrated uncertainty intervals with coverage guarantees, and the ability to abstain, a forecast made only on the days the evidence supports one is worth more than a forecast made every day.

That last point is the design principle for all of it. The goal is not a system that always has an answer; it is a system whose answers you can trust because it tells you, honestly, how much it knows.

Plugs into