portfolio-sizing — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited portfolio-sizing (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
The v2 machinery grades and ranks stocks but leaves col M (Max size, % of total portfolio) as a judgment call. This skill encodes the sizing logic so Max size is derived, not arbitrary. The Munger/Buffett binding CIO remains the arbiter of conviction and moat; this skill supplies the sizing number given the conviction and MoS the v2 machinery already produced.
A dedicated `--step sizing` is now wired in 32_consult_brain.py (maps to [opportunity-cost, margin-of-safety]) — make it the primary pull. Run it on the blended corpus so the desk-synthesis sizing atomics (vault/desk/sizing/atomic/, weight 0.9) surface ALONGSIDE the binding CIO, then keep the two underlying canon steps as a fallback union:
set -a && source /Users/pw/invest/.env && set +a
# Primary: dedicated sizing step on blended corpus (surfaces desk atomics + binding)
/Users/pw/invest/.venv/bin/python /Users/pw/invest/data/scripts/32_consult_brain.py \
--company "<ticker or name> Kelly position sizing edge opportunity cost fractional half kelly catastrophic loss risk uncertainty liquidity" \
--model general \
--step sizing \
--corpus blended \
--json-out extracted/grilling/<TICKER>_sizing.json
# Fallback / detail: the two underlying canon steps (union the returned principles)
for STEP in opportunity-cost margin-of-safety; do
/Users/pw/invest/.venv/bin/python /Users/pw/invest/data/scripts/32_consult_brain.py \
--company "<ticker or name> Kelly position sizing edge opportunity cost fractional half kelly" \
--model general \
--step "$STEP" \
--corpus canon \
--json-out extracted/grilling/<TICKER>_sizing_${STEP}.json
donecites_principles must contain ONLY slugs the consult actually returns (union across the steps). Also run the binding consult (--corpus binding, step opportunity-cost) and explicitly pull the CIO's ruin-avoidance constraint: [[never-risk-catastrophic-loss]] and [[reserve-for-unknowns-5-percent-rule]] (a 5% reserve for being wrong). Sizing is meaningless without knowing what else competes for the same capital — and the conviction-5 25% ceiling (step 3) is the BINDING CIO's hard catastrophic-loss limit, not a Kelly output. Kelly only chooses where below that ceiling to sit ([[kelly-proposes-catastrophic-loss-test-disposes]]).
From kelly-fraction-calculation (Thorp): f* = edge / odds, where:
Caveat — `edge / b` is a single-bet approximation, not exact binary Kelly. The exact binary-bet Kelly isf* = p − q/b(p = win prob, q = 1−p), whichedge/bdrops the explicit loss-probability term from. Treatedge/bas a serviceable heuristic whose imprecision the half-Kelly haircut (step 2) is designed to absorb — not as a precise optimum. The continuous form below IS exact for log-normal returns.
In continuous / stock-market form (from continuous-approximation-for-portfolio-kelly): f* = (m − r) / s² where m = expected return, r = risk-free (~6.9%), s² = return variance.
Kelly is the mathematical ceiling — never the default size. kelly-long-run-dominance-test (Thorp) shows full Kelly maximizes long-run growth, but the path is brutal: drawdowns are stomach-churning (kelly-drawdown-probability-formula: Prob(ever halving) ≈ 50% at full Kelly).
From fractional-kelly-for-margin-of-safety (Thorp) and partial-kelly-for-volatility-control (Mauboussin): reduce to *half-Kelly (f = 0.5 × f)** as the default operating size. Half-Kelly:
loss-aversion-check — frequent checks of a volatileportfolio produce myopic loss aversion and bad decisions)
From fractional-kelly-for-risk-tolerance (Thorp): use f = c × f* where c < 1. For this OS, c = 0.5 is the default; c = 0.33 for a conviction-3 or lower position.
The v2 conviction rubric already encodes quality judgment. Map directly to a Max-size ceiling:
| Conviction | MoS required | Max size cap | Notes |
|---|---|---|---|
| 5 — wide durable moat, pristine returns, long runway | ≥ 10% | 25% | Almost-never tier; size up only when MoS is real |
| 4 — strong moat, high returns, clean owner-earnings | ≥ 15% | 20% | Core position territory |
| 3 — real but narrower moat, good returns, decent runway | ≥ 25% | 12% | Mid-weight; watch for moat erosion |
| 2 — partial moat OR lumpy FCF OR returns near cost of capital | ≥ 40% | 6% | Exploratory; prove thesis before adding |
| 1 — no durable moat | ≥ 55% | 3% | Research / optionality only; do not compound |
These ceilings are the hard cap from position-sizing-discipline (Mauboussin): "betting too much leads to near-certain ruin." The conviction rubric gates them; Kelly determines where within the range to sit.
Starting size = half-Kelly × conviction cap, floored at 1% for any BUY signal.
From opportunity-costs-in-position-sizing (Thorp): the optimal fraction per position decreases as the number of attractive alternatives increases. When better ideas compete for capital, reduce the current size.
Concrete rule: compare the new position's expected IRR to the best existing idea. If this position's IRR advantage over the benchmark is <2%, treat its Kelly weight as halved again. If it clears the IRR hurdle by >5%, the full half-Kelly applies.
From joint-bet-correlation-adjustment (Thorp): when two positions have high positive correlation (same sector, same India-growth macro driver), reduce both fractions — the joint distribution reduces the effective edge of the pair.
From geometric-mean-maximization (Mauboussin): maximize geometric mean, not arithmetic. This means letting winners run. A FOREVER or COMPOUND name that has appreciated past its initial weight ceiling should NOT be mechanically trimmed — sell only on thesis-break, moat erosion, or a strictly better opportunity.
From variance-impact-on-compounding (Mauboussin): higher variance reduces geometric mean. Compounders with stable, high-ROIC earnings have lower true variance than their price volatility suggests — don't over-penalize them for mark-to-market swings.
arithmetic-vs-geometric-return-diagnosis (Mauboussin): for a lifelong hold, use geometric mean analysis. A position running from 20% to 35% of the portfolio because the business compounded is not concentration risk — it is the intended outcome. Trim only if conviction drops.
compound-growth-efficient-frontier (Thorp): the set of fractional Kelly strategies (0 ≤ c ≤ 1) forms the efficient frontier. A FOREVER at 30% of portfolio sitting on the efficient frontier is correct; adding a fifth conviction-3 name to "diversify" moves the portfolio off it.
From distribution-awareness (Mauboussin): stock returns are fat-tailed, not normal. The standard Kelly continuous formula under-estimates downside risk. Mitigants already in the machinery:
scenario-analysis-black-swans (Thorp): explicitly model the "company is impaired" scenariowith non-trivial probability before sizing. If the loss scenario would violate the utility function (utility-function-consistency-test — Mauboussin), reduce size until it doesn't.
Before sizing a position above its baseline half-Kelly, distinguish uncertainty (a wide range of outcomes) from risk (the probability of permanent capital loss) — [[risk-not-uncertainty-sizing-arbiter]]. A Pabrai-style low-risk / high-uncertainty bet ([[low-risk-high-uncertainty-bets]]) may earn a larger fraction, but only after the black-swan / impairment scenario (step 6) confirms the downside is genuinely bounded. If it is not, the binding [[be-cautious-when-uncertainty-is-high]] prevails and size is reduced, not raised. Volatility is not the risk metric ([[risk-is-not-volatility]] — Marks); a calm chart can still mask permanent-loss risk. This gate is a hard precondition, never a footnote: uncertainty alone is never a license to size up.
For Indian small/mid-caps, apply a one-directional haircut that can only push size below the conviction cap, never above it ([[india-liquidity-haircut-on-kelly-size]]). Discount for:
Marks' [[risk-is-not-volatility]] is the anchor: illiquidity hides risk that the half-Kelly variance term does not see, and fat tails (distribution-awareness) make it worse. Keep the multiplier conservative and reductive only.
Max size = 0% (no position; WATCH, not BUY).
b = iv_high / live − 1.machinery, which already bakes in the MoS).
f* = edge / b (simple Kelly for a single bet). If f* > conviction cap → use cap.f = 0.5 × f* (half-Kelly default); if conviction ≤ 3, use f = 0.33 × f*.liquidity/promoter haircut (core logic 8) for small-mid-caps. Both can only reduce f.
[[sizing-is-where-temperament-is-priced]]): cap f at the size you canhold through a 25–50% drawdown without panic-trimming. If half-Kelly would force a panic-trim, the temperament-bounded size is smaller — holding it intact is what geometric-mean-maximization actually requires.
and build as the thesis confirms (edge-identification — only positions where your analysis diverges from the market earn a real edge worth sizing).
A single number: Max size % of total portfolio (col M, Action Dashboard gid 1722681272). State the conviction, half-Kelly fraction, and any cap or correlation adjustment applied. Do NOT write this number to verdict, conviction, buy-below, or any other column — it is purely a position-construction input.
the binding CIO — this skill does not touch them.
unacceptable (kelly-drawdown-probability-formula).
the cap, not the raw Kelly number. 3a. Kelly proposes, the catastrophic-loss test disposes ([[kelly-proposes-catastrophic-loss-test-disposes]]). Whenever f* (or even half-f*) exceeds what survives a permanent-loss / impairment scenario, cut to the survivable size — never round up to the cap. The half-Kelly haircut and the 25% ceiling exist to serve the CIO's distrust of precise math (margin-of-safety-over-mathematical-risk, scenario-analysis-black-swans), not merely to absorb estimation error. The cap is a CIO-set ceiling the formula may approach, never a number a high computed f* justifies reaching.
intended outcome for a FOREVER/COMPOUND hold. Trim only on thesis-break or a strictly better alternative that frees up capital advantageously (geometric-mean-maximization).
and apply the half-Kelly / conviction-cap table conservatively. The desk-synthesis sizing atomics ([[kelly-proposes-catastrophic-loss-test-disposes]], [[risk-not-uncertainty-sizing-arbiter]], [[india-liquidity-haircut-on-kelly-size]], [[sizing-is-where-temperament-is-priced]]) are tagged analyst_role: sizing and surface on --corpus blended (or --step sizing); the Thorp/ Mauboussin math lives in --corpus canon. Query both — --role sizing alone will miss the canon math.
the CIO supplies the judgment that earns the conviction score that caps the number.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.