# Mentor Feedback — GLD NAV Review 2026-06-22

**File reviewed:** `/home/rpi/Obsidian-Macro/03-research/event/gld-nav-20260622T1600-1782158400-review.md`
**Review date:** 2026-06-23
**Reviewer:** macro-mentor (auto-review)
**Diff:** new file (41 lines) — no prior reviewed SHA
**Status:** in-scope (03-research/)

---

## Summary verdict

The data plumbing works: frontmatter is parseable, yfinance pulls are clean, tables are well-formed, the Juneteenth-closure gap is correctly noted. The analytical content is too thin for `03-research/`. Per `process.md` §5, daily observations belong in `01-journal/`; per §3, GLD daily NAV is not a Tier 1 event. The file is currently a data log dressed as research. Either elevate it (add the missing variables, invalidation, trade link) or move it.

---

## Section 1 — Frontmatter (lines 1-9)

### What is working
- Timestamps are precise (both ISO and Unix). Source is identified (`yfinance daily closes`). Event-id and asset are explicit.
- Header is parseable; type/status/event-id/asset/session/generated/source is a reasonable schema for a per-event document.

### What to change
1. **`type: structural-review` is not in the template roster.** Templates define: `daily-journal`, `event-preview`, `weekly-note`, `thesis`, `execution-log`, `management-log`, `postmortem`, `monthly-letter`, `trade-folder`. Inventing a new type silently is exactly the process drift `anti-patterns.md` audit protocol is designed to catch. Either match an existing template or file a process changelog entry in `90-archive/process-changelog.md` defining the new type and its required fields.
2. **Three different timestamps in metadata, all inconsistent.**
   - Filename: `gld-nav-20260622T1600-1782158400` → the `T1600` segment is 16:00 UTC.
   - Trailing epoch `1782158400` = 2026-06-22 **20:00 UTC** (22:00 CEST), not 16:00.
   - Frontmatter `generated: 2026-06-22T23:03:03+02:00` = 23:03 CEST (21:03 UTC).
   - Reconcile: one timestamp per file, with one explicit timezone offset. Which one is canonical — the data snapshot time, the run completion time, or the publish time?
3. **`author: Dennis Elgegren` is missing.** Every other template (`daily-journal.md`, `event-preview.md`) requires this field. Either drop the field everywhere or include it everywhere — current inconsistency is an audit-trail risk per `risk-framework.md` §7 anonymity/personal-account hygiene.
4. **`event-id` convention is undocumented.** `process.md` §4.1 defines trade IDs (`YYYY-NNN-SYMBOL-DIR`) but says nothing about event IDs. The current scheme `gld-nav-YYYYMMDDTHHMM-EPOCH` is bespoke. Document it or simplify.
5. **File is in the wrong directory.** `process.md` §5: daily routine output goes in `01-journal/`, weekly NAV updates in `04-performance/nav/`. `process.md` §3 lists Tier 1 events (FOMC, US CPI, NFP, ECB, SNB, BoJ). GLD daily NAV is none of those — it's a daily observation. `03-research/event/` is for event-driven research; this is a data log.

### WHY each change adds value
- Matching a template removes the cross-document field ambiguity that breaks downstream tooling (OpenTimestamps, Darwinex exports, future automation).
- Reconciling timestamps eliminates the audit-trail question "when was this actually written?" — important for the immutability chain in `process.md` §7 / `risk-framework.md` §9.
- Adding `author` aligns with the rest of the vault and makes PGP-signed attribution per `risk-framework.md` §7 mechanically possible.
- Documenting the event-ID convention prevents silent schema drift.
- Correct directory placement keeps `03-research/` sparse — daily noise in research dilutes the signal-to-noise ratio for actual research review.

---

## Section 2 — Headline (line 13-14)

### What is working
- Juneteenth closure flagged. That's the correct attention to a calendar artifact that creates a non-comparable "day-over-day" (Thursday → Monday is a 3-session gap, not 1).
- Close and % change given.

### What to change
1. **Pure data point. No signal judgment.** `-0.65%` needs context: where is this print relative to GLD's recent daily ATR? Relative to its 20d MA? Relative to its YTD range? A price print without a "this matters / this doesn't" call is observation, not research.
2. **No regime tag.** Without "GLD is X% off its recent high / X% above its 200d MA / trading in a Y-day consolidation," the reader cannot calibrate whether -0.65% is noise or signal.

### WHY
- The whole point of `process.md` §6 published research is signal judgment — narrative + market pricing + technical trigger + explicit trade structure, in one piece. A price print alone doesn't earn its file in `03-research/`.

---

## Section 3 — Price action table (lines 16-22)

### What is working
- Clean markdown table, $ amount and % both shown for day-over-day.

### What to change
1. **Day-over-day row repeats the headline.** Either keep it in the headline OR the table, not both.
2. **No volume.** yfinance returns volume; for an ETF this is a relevant data point for "is the move conviction or thin-tape?"
3. **No technical levels.** 50d MA, prior swing low/high, the consolidation range the Implications section refers to — all missing. The reader cannot evaluate the implications without them.
4. **No comparison to expected daily move.** Even with `signal-spec.md` still DRAFT, the noise-vs-signal question ("is -0.65% within typical daily range or outside it?") is the threshold question.

### WHY
- Without volume and technical context, the table is a snapshot, not analysis. Anti-patterns.md #5 (confusing activity with progress) — writing up data that doesn't change a decision is the activity-side version of this anti-pattern.

---

## Section 4 — Cross-asset table + commentary (lines 24-33)

### What is working
- GLD vs spot gold (~31bps lag) flagged — that's a real microstructure observation, the kind flow traders care about.
- IAU included as a competitor-ETF cross-check.
- SLV (silver) included for the Au/Ag ratio signal — good call; ratio moves often lead the metals complex.
- 10Y included in the cross-asset table rather than buried elsewhere.

### What to change
1. **DXY is missing.** Per `process.md` §2, DXY is explicitly in the monitored universe and is gold's primary macro counterpart. A gold review without USD context is a hole — gold and DXY correlation has been the dominant explanatory variable in most of 2024-2026.
2. **Real yields are missing.** Per `process.md` §2, real yields are explicitly monitored. Gold prices real yields, not nominal yields. The file shows nominal 10Y only; the Rates backdrop then talks about "real yields" without showing them. This is the gap. If TIPS yields or 10Y-10Y-BE isn't available in the pull pipeline, that itself is a methodology gap worth filing.
3. **Speculative line is unsupported.** "GLD lagged spot gold by ~31bps — modest premium compression or light flow-driven selling into the close" offers two mechanisms, neither backed by data. The Implications section then admits "No flow data available from price action alone." So this line is narrative dressed as observation. Per `anti-patterns.md` #4 (narrative without pricing), don't propose mechanisms you can't verify; just note the observation.
4. **No Asia-session reference.** Gold is 24-hour. Asian session often leads; SGE premium or Asian spot fix would round out the global picture.
5. **The Au/Ag comment ("weakening the Au/Ag ratio signal") is unclear.** In which direction? Weakening how — the ratio compressed (silver outperformance fading) or expanded? Reader needs the prior-day ratio and today's ratio to evaluate.

### WHY
- DXY and real yields are the two variables gold actually prices. Without them, every causal claim about the GLD move is downstream speculation.
- Cutting the unsupported mechanism line keeps the file honest — the observation (31bps lag) stays, the speculation goes.

---

## Section 5 — Rates backdrop (lines 35-36)

### What is working
- 10Y flagged as the macro driver.

### What to change
1. **"The dominant macro driver of the session" is an unsupported claim.** A 6bp move in 10Y is not always the dominant driver of a metals session. Other assets may have moved more on a risk-adjusted basis. To claim dominance, rank the cross-asset moves (which had the biggest standardized move today?).
2. **"Higher real yields remain the structural headwind" — but real yields aren't shown on the page.** The data is nominal 10Y. The claim references a variable that isn't in the document. This is anti-patterns.md #4 (narrative without pricing) applied to a slightly different framing — narrative about the right variable, but the variable itself is missing.
3. **No breakeven inflation decomposition.** Adding 10y BE (or 5y5y) lets the 6bp 10Y move be split into "real rate component" vs "inflation expectations component." Without that split, you can't tell whether today's driver is Fed expectations, term premium, or inflation repricing — three different trades.

### WHY
- The "dominant driver" claim is a narrative pick. Showing the cross-asset move ranking makes it auditable.
- Decomposing nominal yields is exactly the discipline `process.md` §6 published-research format expects: "data vs market pricing." Showing only the headline number hides the mechanism.

---

## Section 6 — Implications (lines 38-41)

### What is working
- Honest about data limits: "NAV update is mechanical, not informational beyond the print." That's the right meta-observation — and it raises the question of why this file is in `03-research/` at all.
- Conditional framing: "if 10Y holds above 4.50%... if yields fade" is the right skeleton for an implications section.

### What to change
1. **No invalidation fact.** Per `process.md` §4.1 and `anti-patterns.md` #1, every view needs a fact-based kill switch, not a price-based one. "if 10Y holds above 4.50%" is a price — not a fact. What observable fact (Fed speaker, Treasury auction tail, hot CPI print, payrolls beat) would prove the consolidation thesis wrong? State the fact.
2. **No trade or explicit no-trade.** Per `process.md` §6 published-research format, every view states the trade or the discipline case for sitting out. The implications section gives a conditional view but no trade structure, no sizing, no thesis link. That's a view, not research.
3. **No market pricing check.** Per `anti-patterns.md` #4, before stating "yields fade → GLD converges with spot," you must state: what is the market currently pricing for yields? If Fed funds futures are pricing 75bp of cuts by year-end, your view needs to differ from that explicitly. Without the check, the implication is narrative.
4. **No timeframe on the conditional.** "if 10Y holds above 4.50%" — for one session? One week? Month-end? Different timeframes, different trades. State the window.
5. **No thesis/trade link.** If a related trade exists (`02-trades/<id>/thesis.md`), link it. If not, the implications section is unanchored — a view with no trade to express it.

### WHY
- Invalidation fact: this is the single highest-leverage audit question per `anti-patterns.md`. A view without an invalidation is a forecast; forecasts don't get sized. The whole trade lifecycle in `process.md` §4.1 is built around this.
- Trade link or explicit no-trade: published research without a trade is a forecast; per `process.md` §6, the differentiation is the integrated "narrative + pricing + technical trigger + structure" piece. The structure is missing here.
- Pricing check: the markets-are-forward-looking point in `anti-patterns.md` #4 is the most common way discretionary traders get run over. Skipping this is a process violation.
- Timeframe: vague conditionals produce vague trades. Tighten or remove.
- Thesis link: vault traceability per `process.md` §7 immutability layers. A view with no thesis to anchor it can't be hashed, can't be OpenTimestamps-anchored, can't be audit-trailed.

---

## Process improvements worth filing

If the user wants to formalize this kind of file (daily ETF NAV review with cross-asset context), the right move is:

1. **Add `_templates/daily-nav-review.md`** to the templates folder. Required fields: timestamp (single, with timezone), asset, snapshot variables (spot, ETF, ETF-competitor, DXY, real yields, breakeven, peer metal), invalidation fact, market pricing check, trade-or-no-trade statement. File this in `90-archive/process-changelog.md`.
2. **Pull the missing variables into the data pipeline.** DXY, TIPS/real yields, and 10y breakeven should be in the same yfinance pull as GLD. Three additional symbols. If they aren't there, the gap is methodological, not editorial.
3. **Move the daily NAV reviews out of `03-research/event/`.** Either into `01-journal/` (private daily log per `process.md` §5) or `04-performance/nav/` (weekly NAV snapshot per §5). `03-research/event/` should be reserved for Tier 1/2 events per `process.md` §3.

---

## Citation summary

| Source | Citation |
|---|---|
| `process.md` §3 | GLD daily NAV is not a Tier 1 event; ETF flows are weekly Tier 2 structural data. |
| `process.md` §4.1 | Trade thesis requires invalidation condition as a fact, not a price. |
| `process.md` §5 | Daily routine → `01-journal/`; weekly NAV update → `04-performance/nav/`. |
| `process.md` §6 | Published research format requires data vs market pricing; event preview requires trade or explicit no-trade. |
| `process.md` §7 | Immutability layers (IBKR Flex, OpenTimestamps, Git signed commits). |
| `risk-framework.md` §7 | Anonymity/personal-account hygiene; author field discipline. |
| `risk-framework.md` §9 | Audit trail layers — required for traceable research. |
| `anti-patterns.md` #1 | No invalidation — every view needs a fact-based kill switch. |
| `anti-patterns.md` #4 | Narrative without pricing — every thesis needs the market-pricing check. |
| `anti-patterns.md` #5 | Confusing activity with progress — data logs masquerading as research. |
