Thesis Bundle Standard — the canonical structure of every published thesis
Every thesis lives in a folder. The folder is the unit. What's in the folder, what each file contains, what's required vs optional, and how refreshes are preserved — all standardized here. This file is the spec the agent and the frontend both rely on.
Folder hierarchy
09-Theses/
└── <TICKER>/ ← ticker folder, the entity
├── <TICKER>.md ← landing file, stable wiki target
├── first-read-YYYY-MM-DD.md ← triage artifact(s), one per first-read pass
├── <TICKER> - <MMMYYYY>/ ← thesis instance, an event on that entity
│ ├── <TICKER>-thesis.md
│ ├── <TICKER>-shadow-matrix.md
│ ├── <TICKER>-consensus-gap.md
│ ├── <TICKER>-calibration.md
│ ├── dashboard.html
│ ├── model.xlsx
│ └── revisions/
│ └── <date>-<short-name>.md
└── <TICKER> - <MMMYYYY-later>/ ← future re-thesis, if business reality changes
└── ...
A ticker folder may contain first-reads only (in pipeline / triage state), thesis instances only (escalated via legacy path or surfaced outside the scan), or both (the common case as a name progresses from triage to deep work). See first-read-standard for the first-read artifact spec.
Three levels and a landing file:
Ticker folder (
PLTR/) — the entity. One per company AlphaSteve has ever covered. All thesis instances for that company live here, ordered by date.Landing file (
PLTR/PLTR.md) — the stable wiki target. Every[PLTR](/theses/PLTR)reference across the vault resolves here. The landing file is a thin pointer: ticker name, current verdict snapshot (central value, trigger, methodology), and a list of bundle artifacts. The substantive analysis lives in the dated instance folder; the landing file is updated whenever a refresh changes the headline numbers.Thesis instance folder (
PLTR - MAY2026/) — an event on the entity. Created at first publication of a thesis on this name. The folder name is set at creation and does not change on refresh. The instance represents AlphaSteve's view on the name during that period.Artifacts (inside the instance folder, with
<TICKER>-prefixes) — the standardized bundle.
Why the ticker-prefix naming
Filenames are self-identifying: PLTR-thesis.md is unambiguous in any context (search results, grep output, Obsidian backlinks), whereas a bare thesis.md requires you to look at the path to know what it's about. The convention also enables clean wiki-link disambiguation: [PLTR-thesis](/theses/PLTR) resolves to a specific file; [PLTR](/theses/PLTR) resolves to the stable landing.
When to create a new ticker folder
The first time AlphaSteve covers a name. The ticker folder is created with the first thesis instance inside it.
When to create a new thesis instance (new dated folder under the same ticker)
When the agent dramatically re-conceives the name on a fundamentally new business reality. Triggers for a new instance:
- Material change in what the business does (major M&A, divestiture, business-model pivot)
- Material change in the competitive landscape that invalidates the prior structural assessment
- A multi-year time gap where the prior thesis has gone fully stale and is being re-done from scratch
- The agent's coverage is being formally re-initiated after a long pause
A new instance is rare and explicit — it is not the response to a price move, a refreshed valuation, or a methodology change. Those go into revisions/ within the current instance.
When to update the current instance in place
Refreshes go inside the current instance:
- Valuation update (new central value, new trigger) — refresh
thesis.md, snapshot prior torevisions/ - Quarterly checkpoint — append to
calibration.md - Consensus refresh — update
consensus-gap.md - Shadow matrix update — update
shadow-matrix.md - Methodology recalibration applied — refresh
thesis.mdwith the new method, snapshot prior torevisions/
The instance is the agent's standing view; refreshes are how that view stays current.
Canonical bundle
Every thesis folder contains these files. Required vs optional is specified.
| File | Purpose | Required? |
|---|---|---|
<TICKER>-thesis.md |
The investment thesis — current state only, no accumulated refresh layers | Always |
<TICKER>-shadow-matrix.md |
The four-methodology matrix per shadow-valuation-matrix | Always |
<TICKER>-consensus-gap.md |
Consensus map, gap decomposition, steelman per consensus-benchmarking | When |gap| ≥ 25% to consensus mean |
<TICKER>-calibration.md |
Per-thesis calibration tracker; quarterly check-ins append to log | Always |
dashboard.html |
Visual one-page summary, standalone HTML | Optional |
model.xlsx |
Valuation model spreadsheet | Required for buy and pass-with-trigger verdicts; optional for pass and avoid |
revisions/ |
Sub-folder preserving every material refresh | Created on first refresh |
revisions/<date>-<short-name>.md |
Snapshot of the prior thesis state and the refresh delta | One per refresh |
No other files belong in the instance folder. No README, no notes-to-self, no scratch material. The bundle is the publication.
The dashboard.html and model.xlsx files do NOT carry the ticker prefix — their names are conventional and their type is unambiguous from the extension.
Standardized frontmatter on thesis.md
---
tags:
- thesis
ticker: PLTR
name: Palantir Technologies
sector: Information Technology
gics_industry: Software & Services
verdict: pass-with-trigger # buy / pass-with-trigger / pass / avoid
verdict_date: 2026-05-24
first_published: 2026-05-23
last_refresh: 2026-05-24
methodology: greenwald-modified # pure-klarman / greenwald-modified / buffett-modern / mauboussin-compounder
central_value: 85.00
range_low: 70.00
range_high: 100.00
re_engagement_trigger: 60.00 # the price at which a position would be initiated
position_size_pct: 0
pipeline_stage: watchlist # workbench / watchlist / portfolio / closed
moat_quality: narrow-contested # exceptional / wide / narrow / narrow-contested / none
gating_tests_passed: 3 # 0, 1, 2, or 3 — Greenwald gating tests for EPV-plus-growth
artifacts:
- thesis.md
- shadow-matrix.md
- consensus-gap.md
- calibration.md
- dashboard.html
- model.xlsx
---
Optional fields when applicable: buy_date, exit_date, exit_price, position_size_pct (when > 0).
thesis.md — what goes in it
The thesis file follows investment-thesis-template structure. Critically: it reflects the current state. If the verdict, central value, methodology, or any load-bearing input has been refreshed, the thesis file shows the new state. The old state moves to revisions/.
The thesis file may have a brief refresh note at the very top — one paragraph — pointing readers to the relevant revision file:
Refreshed YYYY-MM-DD — [one-line reason, e.g., "Greenwald-modified recalibration"]. Prior version: YYYY-MM-DD-short-name. (Obsidian resolves bare filenames; do not include the
revisions/path prefix.)
That is the only mention of refresh history in thesis.md. The body itself reads as a clean current statement. Readers wanting the audit trail open the revisions/ folder.
shadow-matrix.md — what goes in it
The four-methodology matrix and its commentary per shadow-valuation-matrix. Lives in its own file so the matrix's growth over time across the kit is easy to navigate. Frontmatter is minimal:
---
tags:
- shadow-matrix
ticker: PLTR
matrix_date: 2026-05-24
---
consensus-gap.md — what goes in it
The consensus map, gap decomposition, and steelman per consensus-benchmarking. Required only when the gap to consensus mean is ≥25% in either direction. Lives in its own file because it's substantive (often 1,500-2,500 words) and updated independently from the thesis itself on checkpoint refreshes.
---
tags:
- thesis
- calibration
- consensus-gap
ticker: PLTR
thesis_date: 2026-05-23
consensus_pulled: 2026-05-24
---
calibration.md — what goes in it
Per-thesis calibration tracker per _calibration-template. Records the published thesis snapshot and appends at each calibration checkpoint (quarterly, 12-month, 24-month, anniversary).
---
tags:
- calibration
ticker: PLTR
---
revisions/ — refresh history
When a thesis is materially refreshed (new central value, new methodology, new verdict, or any change in load-bearing inputs), the current state of thesis.md is snapshotted into revisions/<date>-<short-name>.md before the new content is written. This is the audit trail.
The first revision file in revisions/ is typically:
<date-of-refresh>-<reason>.md— e.g.,2026-05-24-greenwald-refresh.md
Each revision file has frontmatter:
---
tags:
- thesis
- revision
ticker: PLTR
revision_date: 2026-05-24
revision_reason: Greenwald-modified doctrine recalibration
prior_central_value: 52.00
prior_trigger: 29.00
prior_methodology: pure-klarman-EPV-only
new_central_value: 85.00
new_trigger: 60.00
new_methodology: greenwald-modified
---
The revision body has two sections:
- The delta — what changed and why, in 200-500 words. This is the document a future reader uses to understand the kit's evolution.
- Prior state preserved — the snapshot of
thesis.mdbefore the refresh, included in full so the historical thesis is recoverable.
Refresh protocol
When refreshing a thesis:
- Read the current
thesis.md - Determine what specifically is changing (central value, trigger, verdict, methodology, sector view, etc.)
- Create
revisions/<date>-<short-name>.mdwith the delta + the current thesis.md body preserved in full - Update
thesis.mdto reflect the new current state — body is the new view, frontmatter updated, refresh note at the top points to the new revision file - Update
calibration.mdwith a note about the refresh - Update
shadow-matrix.mdif methodology or inputs changed - Update
consensus-gap.mdif gap to consensus moved materially or refresh affects the decomposition
The refresh is not complete until all artifacts in the bundle are consistent. The frontmatter last_refresh on thesis.md is the source of truth for "when was this last touched."
Frontend mapping
| URL | What it renders |
|---|---|
/theses |
Index: one card per ticker, showing the latest thesis instance |
/theses/<TICKER> |
The latest thesis instance for the ticker, with a "Coverage history" section if more than one instance exists |
/theses/<TICKER>/<MMMYYYY> |
A specific dated thesis instance (canonical URL for non-latest instances; also works for the latest) |
/theses/<TICKER>/<MMMYYYY>/revisions/<date>-<short-name> |
A specific revision within an instance |
Each instance page renders as a tabbed view:
| Tab | Source file |
|---|---|
| Thesis | thesis.md (current state of this instance) |
| Matrix | shadow-matrix.md |
| Consensus | consensus-gap.md (only shown if file exists) |
| Calibration | calibration.md |
| Revisions | List of revisions/*.md with delta summaries |
| Downloads | Links to dashboard.html and model.xlsx |
The header surfaces frontmatter: ticker, name, verdict badge, central value, trigger, methodology badge, last refresh date. When viewing an older instance, the header notes "This is the
The /theses index renders one card per ticker. Card content reflects the latest instance. When multiple instances exist, the card carries a small indicator like "3 thesis instances."
What this standard is not
- Not a constraint on the analytical content of the thesis. The bundle structure is about organization, not about what the analyst concludes.
- Not a substitute for the source-discipline (sources-policy), methodology rigor (earnings-power-value-greenwald), or consensus-checking (consensus-benchmarking). It is the container; those skills are what fills the container.
- Not retroactive in spirit on theses that were good without the standard — they get reformatted to the standard at the next refresh, not as an emergency.
When this standard changes
Material changes to the bundle standard (new required file, new frontmatter field, new naming convention) are logged in methodology-calibration as calibration events, the same way doctrine changes are. The standard is meant to be stable; revising it should be deliberate and rare.
Sources
- The standard synthesizes practitioner conventions from sell-side equity research desks (Goldman, Morgan Stanley, etc.) where standardized publication bundles are routine, and from independent research firms (Mauboussin's Counterpoint Global notes, Morningstar's analyst reports) where bundle-per-name is the norm.
- The "current state + revisions/" pattern is borrowed from how academic preprints handle versioning (arXiv v1, v2, v3) — the latest is what people read, the history is preserved separately.
Linked
- investment-thesis-template — what
thesis.mdlooks like inside - shadow-valuation-matrix — what
shadow-matrix.mdlooks like - consensus-benchmarking — what
consensus-gap.mdlooks like - _calibration-template — what
calibration.mdlooks like - methodology-calibration — where bundle-standard changes are logged
- deliverable-suite — the broader output framework this fits within