ETF / REIT / InvIT Onboarding Pipeline (global-trend machinery)
The single source of truth for finding and grading global-trend funds, REITs and InvITs, and publishing
them to the 🌍 Global & Passive Base tab. Follow the stages in order. This is the fund mirror of
[[stock-onboarding-pipeline]]: the SAME board (binding Munger/Buffett CIO · 31 perspectives · 14 canon ·
8 desks · WC) evaluates ETFs/REITs the same way it evaluates stocks — verdict → conviction → margin of
safety. The design source of truth is /Users/Dhiraj/.claude/plans/build-a-plan-to-iterative-creek.md.
The retrieval plumbing is identical to the stock pipeline — all vault consultation goes through
data/scripts/32_consult_brain.py (scoped, cited, structured), now carrying the four NEW fund models
passive-etf | commodity-etf | reit | invit. ETF/REIT mechanical fund-quality reuses the MF methodology
(extracted/mf/_mf_methodology.md + _mf_rubric.md); REIT/InvIT dossiers reuse the ALTIUS template
(vault/research/dossiers/ALTIUS.md).
North star
The 🌍 tab is a forward BUY-LIST of durable global-trend exposures in search of a small set of
CORE holds you keep for life — NOT a one-off cleanup of what's already held, and not a sprawling
basket of every thematic ETF. The point is to buy good ETFs, keep good ETFs, and compound wealth via
durable global megatrends — the fund-side parallel of the stock FOREVER/COMPOUND hunt. Bogle/Buffett's
default (broad, lowest-cost index held for life) is the anchor; thematic trends are capped satellites you
buy only when the underlying index is at a sane valuation. Finding that a trend is real but expensive
right now → WATCH, don't buy is an acceptable, expected result. Patience on the entry is the edge.
The framework — evaluate ETFs / REITs LIKE stocks
Map the stock machinery's three sort keys onto funds so the board reasons identically:
| Stock key |
ETF analog |
REIT / InvIT analog |
| Moat (durable advantage) |
Trend durability (is the exposure a 10-yr structural tailwind, not a fad?) × wrapper quality (lowest TER · tightest tracking error · deepest AUM/liquidity · right structure · best tax bucket) |
Asset/lease durability · tenant diversification · sponsor quality · contracted-revenue runway (WALE) |
| Conviction 1–5 |
trend-strength × wrapper-quality (a broad low-cost index defaults HIGH; a narrow thematic ETF needs higher proof to earn the same band) |
adapted ALTIUS-style filters — InvIT/REIT conviction CAP 2 (yield instrument, not a compounder) |
| Margin of safety |
index valuation vs its OWN history (CAPE / PE percentile) — don't pile into an expensive index; wait for the trend at a sane price |
sustainable (return-ON-capital) distribution yield vs the ~9–10% required yield (ALTIUS method) |
Verdict tiers (re-cut to mirror the stock 5-tier — so they read the same):
- CORE (≈ FOREVER): the broad, lowest-cost index you hold for life regardless of price (Bogle/Buffett default — broad-world, Nifty-500-style India core). The anchor. This is the only tier where price is not a gate.
- COMPOUND-TREND (≈ COMPOUND): a high-conviction durable global megatrend (AI/compute · US innovation · India structural growth · energy transition · EM …) via the best India-accessible wrapper, at a fair index valuation — buy and hold for years.
- WATCH: great trend + great wrapper, but the underlying index is expensive now → wait for the entry (the MoS gate is unmet).
- AVOID: a bad wrapper (high TER / poor structure / bad tax bucket / wide tracking error) OR a fad / fading trend.
- TOO_HARD: trend durability is genuinely unknowable, or there is no clean India-accessible wrapper for it.
Rank key = verdict → conviction → MoS (exactly the stock key). Here MoS = how far the index trades below
its own fair/historical value (ETF) or how far the sustainable yield clears required (REIT/InvIT). This is
what lets the board "look at ETFs the same way as stocks." TOO_HARD is quarantined OFF the buy-list.
HARD RULES (never violate)
- The binding CIO is the arbiter.
data/scripts/32_consult_brain.py --corpus binding (Munger/Buffett vault)
gates trend-durability, conviction, verdict and MoS at Stages A/B/C. The new perspectives & canon (Bogle,
Malkiel/Ellis, Damodaran-REITs, Dalio, Marks) are down-weighted advisory context surfaced via
--corpus blended — they SHARPEN the call but NEVER reverse a --corpus binding verdict.
- The vault is BINDING, not decoration.
cites_principles may contain ONLY slugs the brain actually
returns (principles[].slug / citation). No fabricated citations. If principles comes back empty/thin →
ABSTAIN + flag, never pad. (29_vault_chat.py stays available for free-form cited Q&A / ad-hoc grilling.)
- Never fabricate a trend, a TER, a tracking error, an index valuation, a DPU, or a yield. Every number
is fetched (INDmoney / WebFetch / BSE filing) or it is flagged as unknown. A guessed number is worse than a
missing one. (See [[feedback-paywall-enumeration-honesty]] / the never-fabricate rule in memory.)
- Evaluate funds LIKE stocks — three sort keys, five verdict tiers, rank = verdict → conviction → MoS.
A fund is not exempt from the discipline because it is "passive." A narrow thematic ETF must EARN its
conviction band against trend-durability × wrapper-quality, exactly as a stock earns its moat grade.
- Trend durability is the moat, and it is a HARD GATE before price. Order of analysis:
is-the-trend-durable → is-the-wrapper-best-in-class → ONLY THEN index valuation. A fad trend, or a great
trend wrapped in a costly/badly-structured/badly-taxed vehicle, cannot earn high conviction regardless of
how cheap the index looks.
- Conviction = JUDGMENT, not a formula (Munger: avoid false precision). Gates: fad/fading trend → AVOID;
no clean wrapper → TOO_HARD; InvIT/REIT → conviction CAP 2 (a yield instrument cannot be a compounder,
so its ceiling is WATCH — never COMPOUND-TREND or CORE). A broad lowest-cost index defaults to high
conviction (low cost IS the durable edge); a narrow thematic needs higher proof for the same band.
- Margin of safety is THE gate. ETF → index valuation vs its own history (CAPE/PE percentile); a durable
trend at a stretched index → WATCH, not buy. REIT/InvIT → the sustainable (return-ON-capital) yield vs the
~9–10% required yield (ALTIUS method — strip return-OF-capital out of the headline DPU before judging).
The ONLY tier exempt from the MoS gate is CORE (Bogle's "buy the haystack, hold for life regardless of price").
- For passive ETFs, low cost IS the moat —
moat-analysis does NOT apply. Do not run the business-moat
taxonomy on a passive index fund; its edge is structural (cost + breadth + tracking), graded by the wrapper-quality
read and the MF cost/overlap gates. moat-analysis applies ONLY to the trend-durability judgment (Stage A)
and to REIT asset/tenancy durability — never to "the index fund's moat."
- InvIT/REIT = yield instrument, dossier on the ALTIUS template. Full dossier at
vault/research/dossiers/<CODE>.md (brain_model: reit or invit): 6-filter walk (Filter 2 = asset +
contracted tenancy, Filter 3 = distribution coverage + return-OF vs return-ON split, Filter 5 =
distribution-yield vs required, NOT a growth DCF), FFO/AFFO · LTV · occupancy · WALE, distribution-yield MoS,
numeric buy-below + trim/sell triggers, kill criteria, 5-tier verdict. Live price via BSE code for InvITs
(GOOGLEFINANCE NSE will not resolve — see ALTIUS).
- NEVER edit the LOCKED Action Dashboard. The stock dashboard ([[feedback-sheet-is-locked]]) is canonical
and untouched by this pipeline. ETFs/REITs publish ONLY to the 🌍 Global & Passive Base tab. Back up the
🌍 tab before any write; if a helper disagrees with the live tab, FIX THE HELPER, never the sheet.
- Sell ₹ + Upside are written for every NON-CORE verdict — never blank them (mirrors the stock rule).
WATCH / AVOID / TOO_HARD each carry a numeric Sell/trim target AND an Upside% (honestly negative when the
price is above fair value). ONLY CORE / COMPOUND-TREND show "∞ hold". For REIT/InvIT the trim target is the
price at which the yield compresses materially below required (ALTIUS: trim above ~₹185, sell above ~₹200).
- 5-tier verdict exactly one per vehicle: CORE / COMPOUND-TREND / WATCH / AVOID / TOO_HARD.
CONSULTING THE BRAIN (data/scripts/32_consult_brain.py — the ONE retrieval entrypoint)
set -a && source /Users/Dhiraj/dev/invest/.env && set +a && /Users/Dhiraj/dev/invest/.venv/bin/python \
/Users/Dhiraj/dev/invest/data/scripts/32_consult_brain.py \
--company "<trend or fund name>" \
--model <passive-etf|commodity-etf|reit|invit> \
--step <circle|conviction|intrinsic-value|margin-of-safety|opportunity-cost|verdict|inversion|capital-allocation|sizing> \
[--corpus <binding|blended>] [--entities <peer-slugs,comma-sep>] [--k 8] \
--json-out extracted/grilling/<CODE>_<step>.json
- NEW models (Phase 2, the only change to
32_consult_brain.py — 4 dicts: MODELS, MODEL_PHRASE, MOAT_HINT, MGMT_HINT):
passive-etf — broad/thematic index funds. MOAT_HINT = trend durability × wrapper quality (cost/tracking/liquidity/structure/tax); MGMT_HINT = tracking discipline + AMC/issuer reliability.
commodity-etf — gold/silver/commodity wrappers. MOAT_HINT = hedge/diversification role + storage/structure quality; valuation lens = real-asset / cycle, not earnings.
reit — real-estate trusts (e.g. Embassy). MOAT_HINT = asset + lease durability, tenant diversification, sponsor; MGMT_HINT = sponsor quality + capital allocation (dividend/M&A).
invit — infra trusts (e.g. ALTIUS/Embassy-style annuities). Same as reit but conviction CAP 2; MOAT_HINT = contracted-tenancy annuity + WALE; MGMT_HINT = sponsor + leverage discipline.
- What it does (unchanged): derives 2-3 model-aware retrieval questions, routes internally (specific model
or entities → ScopedLanceDBBackend, 0 Azure calls;
general + no entities → hybrid + GPT rerank — never
stacked), RRF-merges + dedupes, hygiene-filters to mentors' atomics/raws + canon/perspectives + _synthesis
(hubs/MOCs/_system/dossiers/positions excluded; every path verified on disk). Assets carry brain_model: <slug>.
- How to read the output:
principles: [{claim, path, slug, citation, mentor, note_type, source_note, …}].
claim = the principle to apply; citation/slug = the ONLY tokens permitted in cites_principles;
source_note = traceability to the raw transcript/letter/lecture. Empty principles → vault is thin here →
ABSTAIN + flag, never pad.
- Corpus discipline:
--corpus binding (Munger/Buffett ONLY) for every conviction/verdict/MoS/inversion
gate — this is the arbiter. --corpus blended to ALSO surface the new world-canon (Bogle, Malkiel/Ellis,
Damodaran-REITs, Dalio, Marks) + desk-synthesis atomics for trend-durability and wrapper context — advisory,
down-weighted, never reverses a binding verdict.
- Step → lens map (binding): circle→circle (is this a trend/structure you understand?) · conviction→
moat(=trend-durability)+management(=wrapper/sponsor)+owner-earnings(=coverage for REITs) · intrinsic-value→
index-fair-value / REIT distributable-DCF · margin-of-safety→index-valuation-vs-history / yield-vs-required ·
opportunity-cost→opportunity-cost (vs the CORE index and the equity book) · verdict→trend+wrapper+opp-cost ·
inversion→fad-trend? + flawed-wrapper? + bubble-index? (disconfirming) · capital-allocation→REIT dividend/M&A
discipline · sizing→kelly + conviction-cap + concentration (passive core disciplined, thematic capped).
FINANCE-DESK SPECIALISTS (additive advisory layer — they inform; the binding CIO at A/B/C decides)
Dispatch these sharpened desk skills to SHARPEN the analysis. They are an additive, --corpus blended-informed
advisory layer (blended surfaces desk-synthesis atomics + the new world-canon ALONGSIDE binding); the
perspectives they surface are down-weighted and NEVER reverse a --corpus binding verdict. The
Munger/Buffett CIO stays THE arbiter. No new desk seats — the existing 8 desks gain ETF/REIT competence.
| Skill |
Attaches at |
ETF role |
REIT / InvIT role |
moat-analysis |
A (& B) |
trend-durability judgment ONLY (NOT a passive ETF's "moat" — low cost is the moat, rule 8) |
REIT asset / lease / tenancy durability |
valuation-dcf-longrunway |
B |
n/a (index uses CAPE/PE-vs-history, not a DCF) |
REIT distributable-DCF (FFO/AFFO over a long runway; the ALTIUS 12%-hurdle DCF) |
bank-valuation |
B |
n/a |
REIT leverage / justified-P-BV (LTV discipline, the levered-trust read) |
forensic-accounting-redflags |
B |
ETF structure integrity (synthetic vs physical replication, securities-lending, issuer/counterparty risk) → CLEAN/CAUTION/RED |
REIT sponsor + related-party + distribution-quality integrity (return-OF vs return-ON honesty) |
capital-allocation-judge |
B |
n/a (passive — no capital allocation) |
REIT dividend / M&A discipline (Outsiders scorecard on the sponsor; e.g. debt-reduction IPO) |
portfolio-sizing |
D |
Max-size (passive core = disciplined anchor; thematic = capped satellite) |
Max-size as an income sleeve, not a concentrated bet |
decision-journal |
D |
thesis + kill-criteria + trend re-decision cadence |
thesis + kill-criteria (yield-break, rate-shock, tenant impairment) |
primary-research-sentiment |
A & B |
live trend sentiment (Reddit/X/news) — disconfirmation-seeking |
tenant/sponsor/sector DD harvest |
Also available: creating-financial-models (the DCF engine for REIT distributable-DCF and index fair-value),
idea-researcher + deep-research (global-trend discovery & temporal "what's happening now" layering),
grill-with-docs / grill-me (stress-test a trend conviction before it earns COMPOUND-TREND).
MODEL / EFFORT TIERING (max-effort, not ultracode)
- Stage A trend-durability scoring (the wealth engine): Sonnet workflow, vault-bound, one rigorous pass
per trend; escalate a contested CORE/COMPOUND-TREND trend to Opus for the durability call.
- Stage B grading over the full set: Sonnet workflow (judgment, vault-bound, structured output) — the
analyst-desk fan-out + MF-methodology's 8 fund subagents run in parallel.
- Stage C inversion (adversarial — fad? flawed wrapper? bubble index?): Opus/Fable (few agents, high stakes).
- Data fetch (TER/tracking/NAV/AUM/DPU/index-valuation) + 🌍 tab publish: mechanical (Bash / MCP) — no model reasoning.
STAGE A — Global-trend map (the discovery front-end / wealth engine)
Before grading any single fund, decide which durable trends are worth owning at all. This is the front-end
that has no equivalent in a "cleanup" — it parallels the stock FOREVER/COMPOUND hunt.
- Enumerate durable megatrends worth owning: broad-world · India structural growth · US innovation ·
AI / compute · energy transition · EM · gold/silver hedge sleeve. Write them to
extracted/research/global_trend_map.md (the trend-map artifact).
- Score each trend's DURABILITY with the binding CIO + the new perspectives:
32_consult_brain.py --company "<trend>" --model passive-etf --step circle (do I understand the structural
driver?) then --step conviction (is this a 10-yr tailwind or a fad?). Pull Dalio/Marks/Bogle/megatrend
voices via --corpus blended; cite ONLY returned slugs. A trend whose durability is unknowable → TOO_HARD,
off the map. Optionally enrich with idea-researcher / deep-research for live, dated sentiment.
- Map each KEPT trend to its best India-accessible wrapper: the lowest TER, tightest tracking error,
deepest AUM/liquidity, best tax bucket vehicle (use
mcp__indmoney__get_indian_stocks_details for the
listed ETF + WebFetch mfdata.in/valueresearch for TER & tracking error; lookup_ind_keys first to resolve).
If there is no clean India-accessible wrapper, the trend is still graded but flagged TOO_HARD-to-execute
(the route may open later — US/LRS execution is kernel-deferred, out of scope to BUY, in scope to GRADE).
Barrier: a ranked, cited trend map exists; every kept trend has a named best-wrapper candidate (or a
TOO_HARD-to-execute flag).
STAGE B — Grade (like stocks), branching by asset type at Stage 0
For each candidate wrapper, branch by asset type:
B-ETF — passive / thematic / commodity ETF
The mechanical fund-quality layer reuses the MF methodology (extracted/mf/_mf_methodology.md) and the
6-factor rubric (extracted/mf/_mf_rubric.md):
- Fund facts (mechanical): TER, tracking error, AUM/liquidity, structure (physical vs synthetic),
tax bucket, issuer. Source: INDmoney
get_indian_stocks_details (nav/aum/ltp) + get_mf_funds_details
where applicable + WebFetch (mfdata.in / valueresearch for TER & tracking error).
- MF-methodology subagents (parallel): Book Recon · Fund Facts · Holdings Quality · Overlap Mapper ·
Category Benchmarker · Cost & SIP Auditor · Debt Sleeve · Global Sleeve — the same 8 fund subagents,
producing the wrapper-quality evidence.
- Apply the MF portfolio gates (the known structural checks): Overlap (effective overlap >40% →
downgrade weaker one band — this reproduces the held-book overlaps: 4 commodity ETFs → consolidate to
UTI Gold + ABSL Silver; Mirae FANG+ vs S&P-500-Top-50 overlap → retire the duplicate lot) ·
Concentration (single fund >25% of the passive sleeve) · Cap-bucket / sector-tilt (e.g.
PSU-Bank-BeES) · Global (intl FOF + US ETFs >15% NW → consolidate to the lower-cost ETF).
- Conviction (trend × wrapper): the binding
32_consult_brain.py --model passive-etf --step conviction
read, applied as JUDGMENT. Broad lowest-cost index → high; narrow thematic → must prove durability for the
same band. Bad wrapper (high TER / poor structure / bad tax / wide tracking) → caps conviction or → AVOID.
- MoS (index valuation vs its OWN history): CAPE / PE percentile of the underlying index (WebFetch the
index CAPE/PE;
--step margin-of-safety). A durable trend at a stretched index → WATCH. Cheap-vs-history
- durable + best wrapper → COMPOUND-TREND (or CORE if it is the broad anchor).
- Verdict + Sell/Upside: one 5-tier verdict; numeric Sell/Upside for every non-CORE row (rule 11).
forensic-accounting-redflags checks ETF structure integrity (synthetic/securities-lending/counterparty).
B-REIT / B-InvIT — full ALTIUS-template dossier
Write vault/research/dossiers/<CODE>.md to ALTIUS depth (read vault/research/dossiers/ALTIUS.md as the
template; frontmatter note_type: dossier, brain_model: reit or invit):
- 6-filter walk-through, yield-instrument-adapted: Filter 1 Circle · Filter 2 Moat = asset quality +
contracted tenancy/escalators (WALE) · Filter 3 Owner-earnings = distribution coverage + return-OF vs
return-ON-capital split (the heart — strip return-OF-capital out of the headline DPU) · Filter 4
Management = sponsor quality + capital allocation (
capital-allocation-judge) · Filter 5 MoS =
distribution-yield vs required (~9–10%), NOT a growth DCF · Filter 6 Opportunity cost.
- The metrics: FFO / AFFO · LTV (vs SEBI ceiling) · occupancy · WALE · NAV premium/discount · DPU split
(return-ON ₹ + return-OF ₹) · headline yield vs sustainable (income-only) yield vs required.
- Valuation = distribution-yield MoS (+ a
valuation-dcf-longrunway distributable-DCF cross-check at a
strict hurdle, the ALTIUS 12% read; bank-valuation for leverage / justified-P-BV). Buy-below = the price
where the SUSTAINABLE income-only yield clears required; trim/sell = where the yield compresses below required.
- Conviction CAP 2 (rule 6 — yield instrument, ceiling = WATCH). Kill criteria (tenant/MSA impairment,
rate shock, distribution-coverage break, leverage creep).
forensic-accounting-redflags on sponsor +
distribution-quality. 5-tier verdict (in practice WATCH or AVOID for a REIT/InvIT — never COMPOUND-TREND/CORE).
- Data: BSE filings for DPU (live price via BSE code — GOOGLEFINANCE NSE will not resolve for InvITs).
Barrier: every candidate has a verdict + conviction + MoS; REIT/InvIT dossiers mirror ALTIUS depth.
STAGE C — Inversion (Opus, adversarial)
For every CORE / COMPOUND-TREND candidate, a skeptic pulls disconfirming vault principles
(32_consult_brain.py --company "<trend/fund>" --model <model> --step inversion) and argues the strongest
case AGAINST: is the trend a fad / already fading? (the megatrend that everyone already owns) ·
is the wrapper structurally flawed? (synthetic replication, securities-lending counterparty, a tax trap,
chronic tracking drift, thin AUM that could close) · is the index in a bubble? (CAPE in its top decile —
a durable trend bought at a euphoric index is still a bad buy). Survive all three axes → keep the tier; else
demote (default = demote). decision-journal records the pre-mortem + kill-criteria. Desk perspectives inform
but never lift a fund into CORE/COMPOUND-TREND — the --corpus binding gate decides.
STAGE D — Buy-list + sizing (mechanical-ish)
portfolio-sizing sets Max-size (--step sizing --corpus blended): the passive base stays a
disciplined CORE (the anchor, sized for life); thematic = capped satellites (Kelly-fraction /
half-Kelly, conviction-scaled ceilings, concentration discipline — few bets, hold the good ones, don't
over-trim winners). REIT/InvIT sized as an income sleeve, not a concentrated bet.
decision-journal records the thesis + kill-criteria per kept fund (what we believe, the bet size,
what would change our mind, the trend re-decision cadence).
- Rank the WHOLE set (verdict → conviction → MoS); TOO_HARD quarantined off the buy-list. Produce the
ranked, cited buy-list (is there a CORE/COMPOUND-TREND worth buying NOW at a sane valuation, vs WATCH the
expensive ones).
STAGE E — Publish to the 🌍 Global & Passive Base tab (mechanical, no rework)
⚠️ READ BEFORE TOUCHING THE SHEET — the LOCKED Action Dashboard is NEVER touched ([[feedback-sheet-is-locked]]).
ETFs/REITs publish ONLY to the 🌍 tab. The 🌍 tab is RE-ARCHITECTED from scratch per the plan (the old
CORE-PASSIVE/ACCUMULATE 11-col sketch is a data point, NOT a template). BACK UP the 🌍 tab first; same
auto-coloring / locked-format discipline as the stock dashboard; if a helper disagrees with the live tab,
FIX THE HELPER, never the sheet, and never bypass a helper with raw writes for new/reordered rows.
Re-architected 🌍 tab schema (reads like the stock dashboard — a decision cockpit):
Rank · Vehicle · Trend/Exposure · Verdict · Conviction · Buy-zone (index-value) · Live NAV/price · Upside · TER · Tracking-error · Tax-bucket · Liquidity/AUM · Held? · Max-size · Why (1-line) · Sources
with a REIT / InvIT block carrying: Yield · Sustainable-yield (income-only) · NAV premium/discount · LTV · Occupancy.
- Rank key = lexicographic (verdict_tier [CORE < COMPOUND-TREND < WATCH < AVOID < TOO_HARD], −conviction, −MoS).
No other tiebreakers. TOO_HARD quarantined off the buy-list rows.
- Values: conviction (capped 2 for REIT/InvIT), buy-zone = index-fair-value entry (ETF) or the
sustainable-yield-clears-required price (REIT), verdict = the 5-tier. CORE / COMPOUND-TREND → "∞ hold";
WATCH / AVOID / TOO_HARD → numeric Sell/trim + Upside% (rule 11 — never blank a non-CORE Upside).
Why = the one-line thesis from the dossier / fund brief (never an Obsidian [!info] callout).
- Publish runbook: (1) BACK UP the 🌍 tab (values + grid) to a revert point. (2) Build/extend the
fund/REIT publish helper (parallels the stock
multi_insert_* / sync_dashboard_extras.js helpers — reads
the full grid, re-stamps Rank, carries any hyperlinks byte-for-byte, regenerates row-relative formulas,
colors by verdict). Always --dry-run first. (3) Lock formatting if the layout changed.
- Reindex: new REIT/InvIT dossiers →
.venv/bin/python data/scripts/26_build_lancedb_index.py --vault vault --db vault/.lancedb (auto-reloads the warm daemon; confirm /health). Remember the HEAD-WINDOW rule — a
dossier correction must edit the head snapshot + one-line thesis, not just a tail append (only the ~4,000-char
head vector is embedded).
- Update memory ([[reference-paise-se-paisa-sheet]] / the global-trend note) with the new 🌍 order + which
trends are CORE/COMPOUND-TREND-worth-buying-now vs WATCH-the-expensive, and the held-book consolidations.
KEY REGISTRY
- Publish target: the 🌍 Global & Passive Base tab (re-architected) on the Paise se Paisa sheet
(fileId
1N87younF990u-YGMOAiT8q6X-EtZ3jVovlWCF44orEY). The Action Dashboard is LOCKED and untouched.
- Brain models (Phase 2,
data/scripts/32_consult_brain.py): passive-etf · commodity-etf · reit ·
invit — added to the 4 dicts (MODELS, MODEL_PHRASE, MOAT_HINT, MGMT_HINT); assets carry
brain_model: <slug>. Retrieval auto-applies (no STEP/corpus/weight changes).
- Templates: REIT/InvIT dossier =
vault/research/dossiers/ALTIUS.md (6-filter, DPU return-ON/return-OF
split, distribution-yield MoS, buy-below/sell triggers, kill criteria, conviction cap 2). ETF fund-quality =
extracted/mf/_mf_methodology.md (8 subagents + 4 gates + Buffett 5-filter) + extracted/mf/_mf_rubric.md
(6-factor M1–M6 rubric + verdict bands + overlap rules).
- Scripts: brain consult
data/scripts/32_consult_brain.py (the BINDING gate — scoped+cited);
free-form vault RAG 29_vault_chat.py (ad-hoc only); index 26_build_lancedb_index.py; DCF engine via
creating-financial-models / valuation-dcf-longrunway.
- Data sources: INDmoney (
networth_holdings, get_indian_stocks_details nav/aum/ltp/sector,
get_mf_funds_details, networth_allocation_breakdown, lookup_ind_keys) · WebSearch/WebFetch (TER &
tracking error from mfdata.in / valueresearch; index CAPE/PE) · BSE filings (REIT/InvIT DPU; live price by
BSE code) · optionally reddit / youtube MCP for live trend sentiment via idea-researcher.
- Artifacts: trend map
extracted/research/global_trend_map.md; brain consults
extracted/grilling/<CODE>_<step>.json; REIT/InvIT dossiers vault/research/dossiers/<CODE>.md.
- VERDICT TIERS: CORE (≈FOREVER, the broad lowest-cost anchor, price-exempt) · COMPOUND-TREND (≈COMPOUND,
durable trend at a fair index valuation) · WATCH (great trend+wrapper, expensive index → wait) · AVOID (bad
wrapper OR fad/fading trend) · TOO_HARD (durability unknowable OR no clean wrapper). Rank = verdict →
conviction → MoS.
- CONVICTION (1–5, judgment within gates): broad lowest-cost index → high (low cost is the moat); narrow
thematic → must prove trend-durability × wrapper-quality for the same band. Gates: fad/fading trend → AVOID;
no clean wrapper → TOO_HARD; REIT/InvIT → CAP 2. MoS gate exempt only for CORE.
- OUT OF SCOPE: US-via-dollar/LRS execution (kernel-deferred — a trend may still be GRADED for when the
route opens, just not BUYABLE); new desk SEATS (the 8 desks gain ETF/REIT competence, no new seats); active
mutual-fund onboarding (a separate book); any trade; any edit to the LOCKED Action Dashboard.
1---2name: etf-reit-onboarding3description: Systematically FIND, GRADE and BUY great ETFs / REITs / InvITs that ride durable global trends — evaluating funds LIKE stocks (verdict → conviction → margin-of-safety) and holding the good ones for life. The fund mirror of the stock onboarding pipeline. Use when the user says "add an ETF/REIT/InvIT", "grade this fund", "build a global-trend buy-list", "passive sleeve", "evaluate a fund like a stock", "should I buy <ETF>", "is this trend worth owning", or wants to extend / re-rank the global-trend exposure list. Workspace: /Users/Dhiraj/dev/invest. Publish target is the 🌍 Global & Passive Base tab (re-architected per the plan) — the LOCKED Action Dashboard is NEVER touched. Charlie Munger & Warren Buffett (the Obsidian vault) are the binding CIO; the vault gates trend-durability/conviction/verdict/MoS — it is not narrative decoration.4---56# ETF / REIT / InvIT Onboarding Pipeline (global-trend machinery)78The single source of truth for finding and grading global-trend funds, REITs and InvITs, and publishing9them to the **🌍 Global & Passive Base** tab. Follow the stages in order. This is the **fund mirror** of10[[stock-onboarding-pipeline]]: the SAME board (binding Munger/Buffett CIO · 31 perspectives · 14 canon ·118 desks · WC) evaluates ETFs/REITs the **same way it evaluates stocks** — verdict → conviction → margin of12safety. The design source of truth is `/Users/Dhiraj/.claude/plans/build-a-plan-to-iterative-creek.md`.1314The retrieval plumbing is identical to the stock pipeline — all vault consultation goes through15`data/scripts/32_consult_brain.py` (scoped, cited, structured), now carrying the four NEW fund models16`passive-etf | commodity-etf | reit | invit`. ETF/REIT mechanical fund-quality reuses the MF methodology17(`extracted/mf/_mf_methodology.md` + `_mf_rubric.md`); REIT/InvIT dossiers reuse the ALTIUS template18(`vault/research/dossiers/ALTIUS.md`).1920## North star21The 🌍 tab is a **forward BUY-LIST of durable global-trend exposures** in search of a small set of22**CORE holds you keep for life** — NOT a one-off cleanup of what's already held, and **not a sprawling23basket of every thematic ETF**. The point is to **buy good ETFs, keep good ETFs, and compound wealth via24durable global megatrends** — the fund-side parallel of the stock FOREVER/COMPOUND hunt. Bogle/Buffett's25default (broad, lowest-cost index held for life) is the anchor; thematic trends are capped satellites you26buy only when the underlying index is at a sane valuation. Finding that a trend is real but **expensive27right now → WATCH, don't buy** is an acceptable, expected result. Patience on the entry is the edge.2829## The framework — evaluate ETFs / REITs LIKE stocks30Map the stock machinery's three sort keys onto funds so the board reasons identically:3132| Stock key | ETF analog | REIT / InvIT analog |33|---|---|---|34| **Moat** (durable advantage) | **Trend durability** (is the exposure a 10-yr structural tailwind, not a fad?) × **wrapper quality** (lowest TER · tightest tracking error · deepest AUM/liquidity · right structure · best tax bucket) | Asset/lease durability · tenant diversification · sponsor quality · contracted-revenue runway (WALE) |35| **Conviction 1–5** | trend-strength × wrapper-quality (a broad low-cost index defaults HIGH; a narrow thematic ETF needs higher proof to earn the same band) | adapted ALTIUS-style filters — **InvIT/REIT conviction CAP 2** (yield instrument, not a compounder) |36| **Margin of safety** | **index valuation vs its OWN history** (CAPE / PE percentile) — don't pile into an expensive index; wait for the trend at a sane price | **sustainable (return-ON-capital) distribution yield vs the ~9–10% required yield** (ALTIUS method) |3738**Verdict tiers (re-cut to mirror the stock 5-tier — so they read the same):**39- **CORE (≈ FOREVER):** the broad, lowest-cost index you hold for life regardless of price (Bogle/Buffett default — broad-world, Nifty-500-style India core). The anchor. This is the only tier where price is not a gate.40- **COMPOUND-TREND (≈ COMPOUND):** a high-conviction *durable* global megatrend (AI/compute · US innovation · India structural growth · energy transition · EM …) via the best India-accessible wrapper, **at a fair index valuation** — buy and hold for years.41- **WATCH:** great trend + great wrapper, but the underlying index is **expensive now** → wait for the entry (the MoS gate is unmet).42- **AVOID:** a **bad wrapper** (high TER / poor structure / bad tax bucket / wide tracking error) **OR** a fad / fading trend.43- **TOO_HARD:** trend durability is genuinely unknowable, **or** there is no clean India-accessible wrapper for it.4445**Rank key = verdict → conviction → MoS** (exactly the stock key). Here MoS = how far the index trades below46its own fair/historical value (ETF) or how far the sustainable yield clears required (REIT/InvIT). This is47what lets the board "look at ETFs the same way as stocks." TOO_HARD is quarantined OFF the buy-list.4849## HARD RULES (never violate)501. **The binding CIO is the arbiter.** `data/scripts/32_consult_brain.py --corpus binding` (Munger/Buffett vault)51 gates trend-durability, conviction, verdict and MoS at Stages A/B/C. The new perspectives & canon (Bogle,52 Malkiel/Ellis, Damodaran-REITs, Dalio, Marks) are **down-weighted advisory context** surfaced via53 `--corpus blended` — they SHARPEN the call but **NEVER reverse a `--corpus binding` verdict.**542. **The vault is BINDING, not decoration.** `cites_principles` may contain ONLY slugs the brain actually55 returns (`principles[].slug` / `citation`). No fabricated citations. If `principles` comes back empty/thin →56 ABSTAIN + flag, never pad. (`29_vault_chat.py` stays available for free-form cited Q&A / ad-hoc grilling.)573. **Never fabricate** a trend, a TER, a tracking error, an index valuation, a DPU, or a yield. Every number58 is fetched (INDmoney / WebFetch / BSE filing) or it is flagged as unknown. A guessed number is worse than a59 missing one. (See [[feedback-paywall-enumeration-honesty]] / the never-fabricate rule in memory.)604. **Evaluate funds LIKE stocks** — three sort keys, five verdict tiers, rank = verdict → conviction → MoS.61 A fund is not exempt from the discipline because it is "passive." A narrow thematic ETF must EARN its62 conviction band against trend-durability × wrapper-quality, exactly as a stock earns its moat grade.635. **Trend durability is the moat, and it is a HARD GATE before price.** Order of analysis:64 is-the-trend-durable → is-the-wrapper-best-in-class → ONLY THEN index valuation. A fad trend, or a great65 trend wrapped in a costly/badly-structured/badly-taxed vehicle, cannot earn high conviction regardless of66 how cheap the index looks.676. **Conviction = JUDGMENT, not a formula** (Munger: avoid false precision). Gates: fad/fading trend → AVOID;68 no clean wrapper → TOO_HARD; **InvIT/REIT → conviction CAP 2** (a yield instrument cannot be a compounder,69 so its ceiling is WATCH — never COMPOUND-TREND or CORE). A broad lowest-cost index defaults to high70 conviction (low cost IS the durable edge); a narrow thematic needs higher proof for the same band.717. **Margin of safety is THE gate.** ETF → index valuation vs its own history (CAPE/PE percentile); a durable72 trend at a stretched index → WATCH, not buy. REIT/InvIT → the **sustainable (return-ON-capital) yield vs the73 ~9–10% required yield** (ALTIUS method — strip return-OF-capital out of the headline DPU before judging).74 The ONLY tier exempt from the MoS gate is CORE (Bogle's "buy the haystack, hold for life regardless of price").758. **For passive ETFs, low cost IS the moat — `moat-analysis` does NOT apply.** Do not run the business-moat76 taxonomy on a passive index fund; its edge is structural (cost + breadth + tracking), graded by the wrapper-quality77 read and the MF cost/overlap gates. `moat-analysis` applies ONLY to the **trend-durability** judgment (Stage A)78 and to REIT asset/tenancy durability — never to "the index fund's moat."799. **InvIT/REIT = yield instrument, dossier on the ALTIUS template.** Full dossier at80 `vault/research/dossiers/<CODE>.md` (`brain_model: reit` or `invit`): 6-filter walk (Filter 2 = asset +81 contracted tenancy, Filter 3 = distribution coverage + return-OF vs return-ON split, Filter 5 =82 distribution-yield vs required, NOT a growth DCF), FFO/AFFO · LTV · occupancy · WALE, distribution-yield MoS,83 numeric buy-below + trim/sell triggers, kill criteria, 5-tier verdict. Live price via BSE code for InvITs84 (GOOGLEFINANCE NSE will not resolve — see ALTIUS).8510. **NEVER edit the LOCKED Action Dashboard.** The stock dashboard ([[feedback-sheet-is-locked]]) is canonical86 and untouched by this pipeline. ETFs/REITs publish ONLY to the **🌍 Global & Passive Base** tab. Back up the87 🌍 tab before any write; if a helper disagrees with the live tab, FIX THE HELPER, never the sheet.8811. **Sell ₹ + Upside are written for every NON-CORE verdict — never blank them** (mirrors the stock rule).89 WATCH / AVOID / TOO_HARD each carry a numeric Sell/trim target AND an Upside% (honestly negative when the90 price is above fair value). ONLY CORE / COMPOUND-TREND show "∞ hold". For REIT/InvIT the trim target is the91 price at which the yield compresses materially below required (ALTIUS: trim above ~₹185, sell above ~₹200).9212. **5-tier verdict** exactly one per vehicle: CORE / COMPOUND-TREND / WATCH / AVOID / TOO_HARD.9394## CONSULTING THE BRAIN (`data/scripts/32_consult_brain.py` — the ONE retrieval entrypoint)95```bash96set -a && source /Users/Dhiraj/dev/invest/.env && set +a && /Users/Dhiraj/dev/invest/.venv/bin/python \97 /Users/Dhiraj/dev/invest/data/scripts/32_consult_brain.py \98 --company "<trend or fund name>" \99 --model <passive-etf|commodity-etf|reit|invit> \100 --step <circle|conviction|intrinsic-value|margin-of-safety|opportunity-cost|verdict|inversion|capital-allocation|sizing> \101 [--corpus <binding|blended>] [--entities <peer-slugs,comma-sep>] [--k 8] \102 --json-out extracted/grilling/<CODE>_<step>.json103```104- **NEW models (Phase 2, the only change to `32_consult_brain.py` — 4 dicts: `MODELS`, `MODEL_PHRASE`, `MOAT_HINT`, `MGMT_HINT`):**105 - `passive-etf` — broad/thematic index funds. MOAT_HINT = trend durability × wrapper quality (cost/tracking/liquidity/structure/tax); MGMT_HINT = tracking discipline + AMC/issuer reliability.106 - `commodity-etf` — gold/silver/commodity wrappers. MOAT_HINT = hedge/diversification role + storage/structure quality; valuation lens = real-asset / cycle, not earnings.107 - `reit` — real-estate trusts (e.g. Embassy). MOAT_HINT = asset + lease durability, tenant diversification, sponsor; MGMT_HINT = sponsor quality + capital allocation (dividend/M&A).108 - `invit` — infra trusts (e.g. ALTIUS/Embassy-style annuities). Same as `reit` but **conviction CAP 2**; MOAT_HINT = contracted-tenancy annuity + WALE; MGMT_HINT = sponsor + leverage discipline.109- **What it does (unchanged):** derives 2-3 model-aware retrieval questions, routes internally (specific model110 or entities → ScopedLanceDBBackend, **0 Azure calls**; `general` + no entities → hybrid + GPT rerank — never111 stacked), RRF-merges + dedupes, hygiene-filters to mentors' atomics/raws + canon/perspectives + `_synthesis`112 (hubs/MOCs/`_system`/dossiers/positions excluded; every path verified on disk). Assets carry `brain_model: <slug>`.113- **How to read the output:** `principles: [{claim, path, slug, citation, mentor, note_type, source_note, …}]`.114 `claim` = the principle to apply; `citation`/`slug` = the ONLY tokens permitted in `cites_principles`;115 `source_note` = traceability to the raw transcript/letter/lecture. Empty `principles` → vault is thin here →116 ABSTAIN + flag, never pad.117- **Corpus discipline:** `--corpus binding` (Munger/Buffett ONLY) for every conviction/verdict/MoS/inversion118 gate — this is the arbiter. `--corpus blended` to ALSO surface the new world-canon (Bogle, Malkiel/Ellis,119 Damodaran-REITs, Dalio, Marks) + desk-synthesis atomics for trend-durability and wrapper context — advisory,120 down-weighted, **never reverses a binding verdict.**121- **Step → lens map (binding):** circle→circle (is this a trend/structure you understand?) · conviction→122 moat(=trend-durability)+management(=wrapper/sponsor)+owner-earnings(=coverage for REITs) · intrinsic-value→123 index-fair-value / REIT distributable-DCF · margin-of-safety→index-valuation-vs-history / yield-vs-required ·124 opportunity-cost→opportunity-cost (vs the CORE index and the equity book) · verdict→trend+wrapper+opp-cost ·125 inversion→fad-trend? + flawed-wrapper? + bubble-index? (disconfirming) · capital-allocation→REIT dividend/M&A126 discipline · sizing→kelly + conviction-cap + concentration (passive core disciplined, thematic capped).127128## FINANCE-DESK SPECIALISTS (additive advisory layer — they inform; the binding CIO at A/B/C decides)129Dispatch these sharpened desk skills to SHARPEN the analysis. They are an additive, `--corpus blended`-informed130advisory layer (blended surfaces desk-synthesis atomics + the new world-canon ALONGSIDE binding); the131perspectives they surface are down-weighted and **NEVER reverse a `--corpus binding` verdict.** The132Munger/Buffett CIO stays THE arbiter. **No new desk seats — the existing 8 desks gain ETF/REIT competence.**133134| Skill | Attaches at | ETF role | REIT / InvIT role |135|---|---|---|---|136| `moat-analysis` | A (& B) | **trend-durability** judgment ONLY (NOT a passive ETF's "moat" — low cost is the moat, rule 8) | REIT asset / lease / tenancy durability |137| `valuation-dcf-longrunway` | B | n/a (index uses CAPE/PE-vs-history, not a DCF) | **REIT distributable-DCF** (FFO/AFFO over a long runway; the ALTIUS 12%-hurdle DCF) |138| `bank-valuation` | B | n/a | **REIT leverage / justified-P-BV** (LTV discipline, the levered-trust read) |139| `forensic-accounting-redflags` | B | **ETF structure** integrity (synthetic vs physical replication, securities-lending, issuer/counterparty risk) → CLEAN/CAUTION/RED | **REIT sponsor** + related-party + distribution-quality integrity (return-OF vs return-ON honesty) |140| `capital-allocation-judge` | B | n/a (passive — no capital allocation) | **REIT dividend / M&A** discipline (Outsiders scorecard on the sponsor; e.g. debt-reduction IPO) |141| `portfolio-sizing` | D | Max-size (passive core = disciplined anchor; thematic = capped satellite) | Max-size as an income sleeve, not a concentrated bet |142| `decision-journal` | D | thesis + kill-criteria + trend re-decision cadence | thesis + kill-criteria (yield-break, rate-shock, tenant impairment) |143| `primary-research-sentiment` | A & B | live trend sentiment (Reddit/X/news) — disconfirmation-seeking | tenant/sponsor/sector DD harvest |144145Also available: `creating-financial-models` (the DCF engine for REIT distributable-DCF and index fair-value),146`idea-researcher` + `deep-research` (global-trend discovery & temporal "what's happening now" layering),147`grill-with-docs` / `grill-me` (stress-test a trend conviction before it earns COMPOUND-TREND).148149## MODEL / EFFORT TIERING (max-effort, not ultracode)150- **Stage A trend-durability scoring** (the wealth engine): **Sonnet** workflow, vault-bound, one rigorous pass151 per trend; escalate a contested CORE/COMPOUND-TREND trend to **Opus** for the durability call.152- **Stage B grading** over the full set: **Sonnet** workflow (judgment, vault-bound, structured output) — the153 analyst-desk fan-out + MF-methodology's 8 fund subagents run in parallel.154- **Stage C inversion** (adversarial — fad? flawed wrapper? bubble index?): **Opus/Fable** (few agents, high stakes).155- **Data fetch (TER/tracking/NAV/AUM/DPU/index-valuation) + 🌍 tab publish: mechanical** (Bash / MCP) — no model reasoning.156157## STAGE A — Global-trend map (the discovery front-end / wealth engine)158*Before grading any single fund, decide which durable trends are worth owning at all.* This is the front-end159that has no equivalent in a "cleanup" — it parallels the stock FOREVER/COMPOUND hunt.1601. **Enumerate durable megatrends** worth owning: broad-world · India structural growth · US innovation ·161 AI / compute · energy transition · EM · gold/silver hedge sleeve. Write them to162 `extracted/research/global_trend_map.md` (the trend-map artifact).1632. **Score each trend's DURABILITY** with the binding CIO + the new perspectives:164 `32_consult_brain.py --company "<trend>" --model passive-etf --step circle` (do I understand the structural165 driver?) then `--step conviction` (is this a 10-yr tailwind or a fad?). Pull Dalio/Marks/Bogle/megatrend166 voices via `--corpus blended`; cite ONLY returned slugs. A trend whose durability is unknowable → TOO_HARD,167 off the map. Optionally enrich with `idea-researcher` / `deep-research` for live, dated sentiment.1683. **Map each KEPT trend to its best India-accessible wrapper:** the lowest TER, tightest tracking error,169 deepest AUM/liquidity, best tax bucket vehicle (use `mcp__indmoney__get_indian_stocks_details` for the170 listed ETF + WebFetch mfdata.in/valueresearch for TER & tracking error; `lookup_ind_keys` first to resolve).171 If there is no clean India-accessible wrapper, the trend is still graded but flagged TOO_HARD-to-execute172 (the route may open later — US/LRS execution is kernel-deferred, out of scope to BUY, in scope to GRADE).173**Barrier:** a ranked, cited trend map exists; every kept trend has a named best-wrapper candidate (or a174TOO_HARD-to-execute flag).175176## STAGE B — Grade (like stocks), branching by asset type at Stage 0177For each candidate wrapper, **branch by asset type:**178179### B-ETF — passive / thematic / commodity ETF180The mechanical fund-quality layer reuses the **MF methodology** (`extracted/mf/_mf_methodology.md`) and the181**6-factor rubric** (`extracted/mf/_mf_rubric.md`):1821. **Fund facts (mechanical):** TER, tracking error, AUM/liquidity, structure (physical vs synthetic),183 tax bucket, issuer. Source: INDmoney `get_indian_stocks_details` (nav/aum/ltp) + `get_mf_funds_details`184 where applicable + WebFetch (mfdata.in / valueresearch for TER & tracking error).1852. **MF-methodology subagents (parallel):** Book Recon · Fund Facts · Holdings Quality · **Overlap Mapper** ·186 Category Benchmarker · **Cost & SIP Auditor** · Debt Sleeve · **Global Sleeve** — the same 8 fund subagents,187 producing the wrapper-quality evidence.1883. **Apply the MF portfolio gates** (the known structural checks): **Overlap** (effective overlap >40% →189 downgrade weaker one band — this reproduces the held-book overlaps: 4 commodity ETFs → consolidate to190 UTI Gold + ABSL Silver; Mirae FANG+ vs S&P-500-Top-50 overlap → retire the duplicate lot) ·191 **Concentration** (single fund >25% of the passive sleeve) · **Cap-bucket** / sector-tilt (e.g.192 PSU-Bank-BeES) · **Global** (intl FOF + US ETFs >15% NW → consolidate to the lower-cost ETF).1934. **Conviction (trend × wrapper):** the binding `32_consult_brain.py --model passive-etf --step conviction`194 read, applied as JUDGMENT. Broad lowest-cost index → high; narrow thematic → must prove durability for the195 same band. Bad wrapper (high TER / poor structure / bad tax / wide tracking) → caps conviction or → AVOID.1965. **MoS (index valuation vs its OWN history):** CAPE / PE percentile of the underlying index (WebFetch the197 index CAPE/PE; `--step margin-of-safety`). A durable trend at a stretched index → WATCH. Cheap-vs-history198 + durable + best wrapper → COMPOUND-TREND (or CORE if it is the broad anchor).1996. **Verdict + Sell/Upside:** one 5-tier verdict; numeric Sell/Upside for every non-CORE row (rule 11).200 `forensic-accounting-redflags` checks ETF structure integrity (synthetic/securities-lending/counterparty).201202### B-REIT / B-InvIT — full ALTIUS-template dossier203Write `vault/research/dossiers/<CODE>.md` to ALTIUS depth (read `vault/research/dossiers/ALTIUS.md` as the204template; frontmatter `note_type: dossier`, `brain_model: reit` or `invit`):2051. **6-filter walk-through, yield-instrument-adapted:** Filter 1 Circle · Filter 2 Moat = **asset quality +206 contracted tenancy/escalators** (WALE) · Filter 3 Owner-earnings = **distribution coverage + return-OF vs207 return-ON-capital split** (the heart — strip return-OF-capital out of the headline DPU) · Filter 4208 Management = **sponsor quality** + capital allocation (`capital-allocation-judge`) · Filter 5 MoS =209 **distribution-yield vs required (~9–10%), NOT a growth DCF** · Filter 6 Opportunity cost.2102. **The metrics:** FFO / AFFO · LTV (vs SEBI ceiling) · occupancy · WALE · NAV premium/discount · DPU split211 (return-ON ₹ + return-OF ₹) · headline yield vs sustainable (income-only) yield vs required.2123. **Valuation = distribution-yield MoS** (+ a `valuation-dcf-longrunway` distributable-DCF cross-check at a213 strict hurdle, the ALTIUS 12% read; `bank-valuation` for leverage / justified-P-BV). Buy-below = the price214 where the SUSTAINABLE income-only yield clears required; trim/sell = where the yield compresses below required.2154. **Conviction CAP 2** (rule 6 — yield instrument, ceiling = WATCH). Kill criteria (tenant/MSA impairment,216 rate shock, distribution-coverage break, leverage creep). `forensic-accounting-redflags` on sponsor +217 distribution-quality. 5-tier verdict (in practice WATCH or AVOID for a REIT/InvIT — never COMPOUND-TREND/CORE).2185. Data: BSE filings for DPU (live price via BSE code — GOOGLEFINANCE NSE will not resolve for InvITs).219**Barrier:** every candidate has a verdict + conviction + MoS; REIT/InvIT dossiers mirror ALTIUS depth.220221## STAGE C — Inversion (Opus, adversarial)222For every **CORE / COMPOUND-TREND candidate**, a skeptic pulls **disconfirming** vault principles223(`32_consult_brain.py --company "<trend/fund>" --model <model> --step inversion`) and argues the strongest224case AGAINST: **is the trend a fad / already fading?** (the megatrend that everyone already owns) ·225**is the wrapper structurally flawed?** (synthetic replication, securities-lending counterparty, a tax trap,226chronic tracking drift, thin AUM that could close) · **is the index in a bubble?** (CAPE in its top decile —227a durable trend bought at a euphoric index is still a bad buy). Survive all three axes → keep the tier; else228demote (default = demote). `decision-journal` records the pre-mortem + kill-criteria. Desk perspectives inform229but never lift a fund into CORE/COMPOUND-TREND — the `--corpus binding` gate decides.230231## STAGE D — Buy-list + sizing (mechanical-ish)2321. **`portfolio-sizing` sets Max-size** (`--step sizing --corpus blended`): the **passive base stays a233 disciplined CORE** (the anchor, sized for life); **thematic = capped satellites** (Kelly-fraction /234 half-Kelly, conviction-scaled ceilings, concentration discipline — few bets, hold the good ones, don't235 over-trim winners). REIT/InvIT sized as an income sleeve, not a concentrated bet.2362. **`decision-journal` records the thesis + kill-criteria** per kept fund (what we believe, the bet size,237 what would change our mind, the trend re-decision cadence).2383. **Rank the WHOLE set** (verdict → conviction → MoS); TOO_HARD quarantined off the buy-list. Produce the239 ranked, cited buy-list (is there a CORE/COMPOUND-TREND worth buying NOW at a sane valuation, vs WATCH the240 expensive ones).241242## STAGE E — Publish to the 🌍 Global & Passive Base tab (mechanical, no rework)243**⚠️ READ BEFORE TOUCHING THE SHEET — the LOCKED Action Dashboard is NEVER touched ([[feedback-sheet-is-locked]]).244ETFs/REITs publish ONLY to the 🌍 tab. The 🌍 tab is RE-ARCHITECTED from scratch per the plan (the old245CORE-PASSIVE/ACCUMULATE 11-col sketch is a data point, NOT a template). BACK UP the 🌍 tab first; same246auto-coloring / locked-format discipline as the stock dashboard; if a helper disagrees with the live tab,247FIX THE HELPER, never the sheet, and never bypass a helper with raw writes for new/reordered rows.**248249**Re-architected 🌍 tab schema (reads like the stock dashboard — a decision cockpit):**250`Rank · Vehicle · Trend/Exposure · Verdict · Conviction · Buy-zone (index-value) · Live NAV/price · Upside ·251TER · Tracking-error · Tax-bucket · Liquidity/AUM · Held? · Max-size · Why (1-line) · Sources`252with a **REIT / InvIT block** carrying: `Yield · Sustainable-yield (income-only) · NAV premium/discount ·253LTV · Occupancy`.254- **Rank key = lexicographic (verdict_tier [CORE < COMPOUND-TREND < WATCH < AVOID < TOO_HARD], −conviction, −MoS).**255 No other tiebreakers. TOO_HARD quarantined off the buy-list rows.256- **Values:** conviction (capped 2 for REIT/InvIT), buy-zone = index-fair-value entry (ETF) or the257 sustainable-yield-clears-required price (REIT), verdict = the 5-tier. CORE / COMPOUND-TREND → "∞ hold";258 WATCH / AVOID / TOO_HARD → numeric Sell/trim + Upside% (rule 11 — never blank a non-CORE Upside).259 `Why` = the one-line thesis from the dossier / fund brief (never an Obsidian `[!info]` callout).260- **Publish runbook:** (1) BACK UP the 🌍 tab (values + grid) to a revert point. (2) Build/extend the261 fund/REIT publish helper (parallels the stock `multi_insert_*` / `sync_dashboard_extras.js` helpers — reads262 the full grid, re-stamps Rank, carries any hyperlinks byte-for-byte, regenerates row-relative formulas,263 colors by verdict). **Always `--dry-run` first.** (3) Lock formatting if the layout changed.264- **Reindex:** new REIT/InvIT dossiers → `.venv/bin/python data/scripts/26_build_lancedb_index.py --vault vault265 --db vault/.lancedb` (auto-reloads the warm daemon; confirm `/health`). Remember the HEAD-WINDOW rule — a266 dossier correction must edit the head snapshot + one-line thesis, not just a tail append (only the ~4,000-char267 head vector is embedded).268- Update memory ([[reference-paise-se-paisa-sheet]] / the global-trend note) with the new 🌍 order + which269 trends are CORE/COMPOUND-TREND-worth-buying-now vs WATCH-the-expensive, and the held-book consolidations.270271## KEY REGISTRY272- **Publish target:** the **🌍 Global & Passive Base** tab (re-architected) on the Paise se Paisa sheet273 (fileId `1N87younF990u-YGMOAiT8q6X-EtZ3jVovlWCF44orEY`). The **Action Dashboard is LOCKED and untouched.**274- **Brain models (Phase 2, `data/scripts/32_consult_brain.py`):** `passive-etf` · `commodity-etf` · `reit` ·275 `invit` — added to the 4 dicts (`MODELS`, `MODEL_PHRASE`, `MOAT_HINT`, `MGMT_HINT`); assets carry276 `brain_model: <slug>`. Retrieval auto-applies (no STEP/corpus/weight changes).277- **Templates:** REIT/InvIT dossier = `vault/research/dossiers/ALTIUS.md` (6-filter, DPU return-ON/return-OF278 split, distribution-yield MoS, buy-below/sell triggers, kill criteria, conviction cap 2). ETF fund-quality =279 `extracted/mf/_mf_methodology.md` (8 subagents + 4 gates + Buffett 5-filter) + `extracted/mf/_mf_rubric.md`280 (6-factor M1–M6 rubric + verdict bands + overlap rules).281- **Scripts:** brain consult `data/scripts/32_consult_brain.py` (the BINDING gate — scoped+cited);282 free-form vault RAG `29_vault_chat.py` (ad-hoc only); index `26_build_lancedb_index.py`; DCF engine via283 `creating-financial-models` / `valuation-dcf-longrunway`.284- **Data sources:** **INDmoney** (`networth_holdings`, `get_indian_stocks_details` nav/aum/ltp/sector,285 `get_mf_funds_details`, `networth_allocation_breakdown`, `lookup_ind_keys`) · **WebSearch/WebFetch** (TER &286 tracking error from mfdata.in / valueresearch; index CAPE/PE) · **BSE filings** (REIT/InvIT DPU; live price by287 BSE code) · optionally **reddit / youtube MCP** for live trend sentiment via `idea-researcher`.288- **Artifacts:** trend map `extracted/research/global_trend_map.md`; brain consults289 `extracted/grilling/<CODE>_<step>.json`; REIT/InvIT dossiers `vault/research/dossiers/<CODE>.md`.290- **VERDICT TIERS:** CORE (≈FOREVER, the broad lowest-cost anchor, price-exempt) · COMPOUND-TREND (≈COMPOUND,291 durable trend at a fair index valuation) · WATCH (great trend+wrapper, expensive index → wait) · AVOID (bad292 wrapper OR fad/fading trend) · TOO_HARD (durability unknowable OR no clean wrapper). Rank = verdict →293 conviction → MoS.294- **CONVICTION (1–5, judgment within gates):** broad lowest-cost index → high (low cost is the moat); narrow295 thematic → must prove trend-durability × wrapper-quality for the same band. Gates: fad/fading trend → AVOID;296 no clean wrapper → TOO_HARD; **REIT/InvIT → CAP 2.** MoS gate exempt only for CORE.297- **OUT OF SCOPE:** US-via-dollar/LRS execution (kernel-deferred — a trend may still be GRADED for when the298 route opens, just not BUYABLE); new desk SEATS (the 8 desks gain ETF/REIT competence, no new seats); active299 mutual-fund onboarding (a separate book); any trade; any edit to the LOCKED Action Dashboard.