From thinking-frameworks-skills
Computes recommended and maximum FAAB bids for Yahoo fantasy baseball waiver targets, layering positional need fit, role certainty, urgency, and inflation atop delegated auction shading and winner's curse haircut.
npx claudepluginhub lyndonkl/claude --plugin thinking-frameworks-skillsThis skill uses the workspace's default tool permissions.
- [Delegation Chain](#delegation-chain)
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
This skill is a baseball-specific orchestrator. It does NOT compute auction math inline. It composes two domain-neutral sibling skills:
| Step | Who | Responsibility |
|---|---|---|
| 1 | this skill | Compute base_value from Yahoo-adjusted projection, pos fit, role certainty, urgency, season pace (with league-inflation calibration) |
| 2 | this skill | Classify target as common_value / private_value / mixed |
| 3 | auction-winners-curse-haircut | Return adjusted_valuation (Bayesian haircut for common-value) |
| 4 | this skill | Estimate N from opponent profiles |
| 5 | auction-first-price-shading | Return shaded_bid ((N-1)/N + distribution + risk adjustment) |
| 6 | this skill | Apply baseball guardrails (April 40%, speculation 20%, $1 floor, role-cert floor) |
| 7 | this skill | Emit faab_rec_bid, faab_max_bid, rationale naming both delegations |
Invariant: this skill never computes (N-1)/N or a common-value haircut directly. Any change to those primitives is made in the sibling skills.
Scenario: Roki Sasaki called up, likely Dodgers rotation spot. $100 FAAB remaining, week 4.
28 x 0.70 x 0.65 x 1.2 x 0.7 = $10.70common_value (headline prospect).auction-winners-curse-haircut with (raw=10.70, type=common_value, N=6, dispersion=60) -> adjusted_valuation = $7.39, haircut 31%.auction-first-price-shading with (true_value=7.39, N=6, dist=log-normal, risk=0.2, budget=100) -> shaded_bid = $7, shade 0.90.faab_rec_bid=$7, faab_max_bid=round($7.39 x 0.90)=$7. Rationale cites both sibling skills.Full trace in resources/methodology.md and resources/template.md.
FAAB Sizing Progress:
- [ ] Step 1: Collect input signals and budget state
- [ ] Step 2: Compute base_value (baseball layering)
- [ ] Step 3: Classify value_type
- [ ] Step 4: Invoke auction-winners-curse-haircut -> adjusted_valuation
- [ ] Step 5: Estimate N from opponent profiles
- [ ] Step 6: Invoke auction-first-price-shading -> shaded_bid
- [ ] Step 7: Apply baseball guardrails
- [ ] Step 8: Emit signal + rationale with delegation trace
Step 1: Collect inputs (ask caller if missing):
acquisition_value ($, 1-100 scale) -- from mlb-player-analyzerpositional_need_fit (0-100) -- from mlb-waiver-analystrole_certainty (0-100) -- from mlb-player-analyzerStep 2: Compute base_value (baseball-specific layering):
base_value = acquisition_value
x (positional_need_fit / 100)
x (role_certainty / 100)
x urgency_multiplier [0.7 - 1.4]
x season_pace_multiplier [0.6 - 1.4 after inflation calib]
Urgency: 1.4 (closer loses job / prospect called up); 1.2 (new opportunity); 1.0 (steady); 0.8 (wave); 0.7 (speculation).
Pace base: 0.6 (Apr wk 1-4), 1.0 (May-Jun), 1.2 (Jul-Aug), 1.4/0.5 (Sept contending/eliminated). Then multiply by league_inflation_ratio from tracker/faab-log.md (see methodology.md). Min 5 valid rows; else skip calibration and flag low_calibration_data.
Step 3: Classify value_type:
common_value: headline prospect, named closer, star off IL (same info for all teams)private_value: handcuff, platoon fit, punt-category-specific (only we weigh this way)mixed: record common/private weightDefault to common_value when uncertain (conservative; triggers haircut).
Step 4: Invoke auction-winners-curse-haircut:
inputs = { raw_valuation: base_value, value_type, n_informed_bidders: N,
signal_dispersion: 40 (default) }
Consume adjusted_valuation. Preserve classification_rationale for output. Dispersion defaults: 60 for prospects, 30 for established players, 40 otherwise.
Step 5: Estimate N from opponent profiles (teams with positional_need > 50, faab > 20% original, activity >= moderate). Clamp [1, 8]. Defaults: common superstar 6, common role-player 3, private 1-2.
Step 6: Invoke auction-first-price-shading:
inputs = { true_value: adjusted_valuation, n_bidders_estimate: N,
value_distribution: "log-normal" (MLB default),
risk_aversion: 0.2 (bump to 0.4 for contending September),
budget_remaining: faab_remaining }
shaded_bid becomes pre-guardrail faab_rec_bid. Set faab_max_bid = round(adjusted_valuation x 0.90).
Step 7: Apply baseball guardrails (see below). Never silently violate.
Step 8: Emit via mlb-signal-emitter. User-facing rationale MUST name both sibling skills by purpose. Validate with rubric. Minimum 3.5.
1. Hot common-value call-up (early season): N=5-7, pace 0.6-0.7, haircut ~25-30%, shade ~0.80-0.85. Typical $5-$12 rec.
2. Private-value handcuff: N=1-2, haircut=0 (short-circuit), shade 0.0-0.5. Typical $1-$3 rec.
3. Closer change (mid-season, common-value): N=5-8, urgency 1.4, haircut ~25%, shade ~0.83. Typical $10-$30 rec.
4. September contender stretch target: pace 1.4, risk_aversion bumped to 0.4, shade ~0.88-0.92. Can reach 40-60% of remaining FAAB.
faab_max_bid ≤ 40% of FAAB remaining. Flag april_40pct_cap_triggered.situation=speculation or role_certainty<30, cap at 20%. Flag speculation_20pct_cap_triggered.shaded_bid rounds to $0 but positional_need_fit >= 30, bid $1 (rolling-list tiebreak). Otherwise bid $0 and flag zero_bid_preservation.role_certainty < 20, force faab_rec_bid = $0. Flag role_certainty_floor.regression_index < -30, cut faab_rec_bid by 30%. Flag regression_luck_discount.variant_divergence_applied.budget_floor_near_zero.mlb-decision-logger (including $0 bids).Do NOT duplicate sibling caps: the 0.9 x true_value ceiling is enforced by auction-first-price-shading; the 35% haircut cap is enforced by auction-winners-curse-haircut. Trust them.
Pipeline:
base_value = acq_value x (pos_fit/100) x (role_cert/100) x urgency x pace_calibrated
adjusted_valuation = auction-winners-curse-haircut(
raw_valuation=base_value, value_type, n_informed_bidders=N, signal_dispersion)
shaded_bid = auction-first-price-shading(
true_value=adjusted_valuation, n_bidders_estimate=N,
value_distribution="log-normal", risk_aversion=0.2, budget_remaining)
faab_rec_bid = round(shaded_bid) # then baseball guardrails
faab_max_bid = round(adjusted_valuation x 0.90)
Inputs required: acquisition_value, positional_need_fit, role_certainty, FAAB remaining, week, situation label, regression_index (optional).
Outputs: faab_rec_bid, faab_max_bid, value_type, N, adjusted_valuation, shaded_bid, multipliers, guardrail flags, user-facing rationale.
Sibling skills:
@skills/auction-first-price-shading/ -- (N-1)/N + distribution + risk-aversion@skills/auction-winners-curse-haircut/ -- Bayesian common-value haircutKey resources: