addedInput schema / properties / flavor
Added value: +{
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "title": "Flavor"
+}
addedInput schema / properties / role
Added value: +{
+ "anyOf": [
+ {
+ "enum": [
+ "us-large",
+ "us-small-mid",
+ "us-dividend",
+ "intl-developed",
+ "em-equity",
+ "sector-equity",
+ "bond-aggregate",
+ "treasury",
+ "tips",
+ "corporate-bond",
+ "gold",
+ "commodity-broad",
+ "reit"
+ ],
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "title": "Role"
+}
addedOutput schema / $defs / FlavorShelf
Added value: +{
+ "properties": {
+ "flavor": {
+ "title": "Flavor",
+ "type": "string"
+ },
+ "n": {
+ "description": "universe funds on this shelf (named, not screened)",
+ "title": "N",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "flavor",
+ "n"
+ ],
+ "title": "FlavorShelf",
+ "type": "object"
+}
addedOutput schema / $defs / GapCandidate / properties / flavor
Added value: +{
+ "default": "",
+ "description": "the SHELF this fund sits on within its role (e.g. treasury duration, a sector) — a display/address label, never a recommendation; blank = the role's one unnamed shelf",
+ "title": "Flavor",
+ "type": "string"
+}
changedOutput schema / $defs / RoleGap / properties / candidates / description
Previous value: -"largest low-cost ETFs in this role, by AUM"New value: +"comparable funds from the role's standard shelf (its lead flavor), core funds first — a ≥3-way choice of near-substitutes, never a ranking"
addedOutput schema / $defs / RoleGap / properties / lead_flavor
Added value: +{
+ "default": "",
+ "description": "the shelf the candidates came from — the same shelf the presets buy from, so the default carries no new stance; blank for single-shelf roles",
+ "title": "Lead Flavor",
+ "type": "string"
+}
addedOutput schema / $defs / RoleGap / properties / other_shelves
Added value: +{
+ "description": "this role's OTHER shelves, named with counts but not surfaced — different exposures the user may deliberately choose (call again with role= and flavor= to see one); choosing between shelves is the user's decision, tell them these exist rather than picking for them",
+ "items": {
+ "$ref": "#/$defs/FlavorShelf"
+ },
+ "title": "Other Shelves",
+ "type": "array"
+}
changedOutput schema / properties / note / default
Previous value: -"Roles your book holds ≤3% of, with the biggest funds for each — propose-only, never a prediction. For the full screen (cost / liquidity / overlap / did-it-diversify-your-drawdowns) call `screen_candidate`. Read-only: figures are derived from your transaction log and the on-disk price cache. Uncached prices are fetched online on demand — a one-time core warm on the first cold call, plus any new ticker you ask about (set ASSET_MCP_OFFLINE=1 to keep it strictly offline); a value still unavailable shows null (n/a), never a guess. This is a view, not financial advice."New value: +"Roles your book holds ≤3% of, each showing its standard shelf's comparable funds — propose-only, never a prediction. `other_shelves` names sub-exposures not shown (treasury durations, sectors); picking a shelf is the user's decision. For the full screen (cost / liquidity / overlap / did-it-diversify-your-drawdowns) call `screen_candidate`. Read-only: figures are derived from your transaction log and the on-disk price cache. Uncached prices are fetched online on demand — a one-time core warm on the first cold call, plus any new ticker you ask about (set ASSET_MCP_OFFLINE=1 to keep it strictly offline); a value still unavailable shows null (n/a), never a guess. This is a view, not financial advice."