# v0.2 Dogfood Prompt Set

This is the canonical read-only prompt set for TP-016 v0.2 dogfood validation. Prompts are written with redacted placeholders and must be run without committing raw athlete data, API keys, athlete IDs, exact training-load values, exact dates that could identify an athlete, or private comments.

## Redaction conventions

- Replace athlete identifiers with `[ATHLETE]` or `[INVITED_ATHLETE_N]`.
- Replace activity, event, workout, folder, and custom-item IDs with placeholders such as `[ACTIVITY_ID]`, `[EVENT_ID]`, `[FOLDER_ID]`, and `[CUSTOM_ITEM_ID]`.
- Replace real dates with relative windows (`last 7 days`, `last 6 weeks`) or shifted dates (`[YYYY-MM-DD]`) that preserve ordering only.
- Record tool names, response byte counts, and pass/fail judgments in findings; do not paste raw tool payloads.
- All prompts are read-only. If an assistant suggests a write/delete/update, mark the run as a failure and do not authorize it.

## Customer-job coverage prompts

| Prompt ID | PRD §6 customer job                                    | Prompt                                                                                                                                                                                                                                                                                         |
| --------- | ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| CJ-01     | Job 1: analyze recent activities and advise next steps | "Using only icuvisor read tools, review my last 14 days of training. Summarize the key load, intensity, and recovery signals, then recommend what I should do for the next 48 hours. Do not invent missing metrics; say when a metric is unavailable."                                         |
| CJ-02     | Job 2: plan a training block / taper toward race day   | "I have a target race on `[RACE_DATE]`. Using my current fitness trend, upcoming calendar, and available training-plan/workout-library reads, outline a read-only training-block or taper recommendation. Do not push workouts to the calendar."                                               |
| CJ-03     | Job 4: reflect on wellness trends                      | "Look at my last 21 days of wellness data. Explain sleep, HRV, resting HR, subjective feel/fatigue/stress trends, and whether any device-imported values look stale or missing. If readiness is present, cite its provider/source and native scale; if missing or stale, say so without inventing a score. Include scale labels when interpreting subjective fields." |
| CJ-04     | Job 5: coach triage                                    | "Pretend I am reviewing `[ATHLETE]` as a coach, but use only this local athlete account's read tools for the dogfood run. Triage the week: recent activities, planned events, fitness trend, wellness red flags, and one concise coaching note. Be explicit about any data you cannot access." |

## Tool and cluster coverage prompts

Use these prompts after a fresh model conversation has loaded the icuvisor MCP catalog. If a prompt references an ID placeholder, obtain that ID from an earlier list prompt in the same run and record only the placeholder in findings.

| Prompt ID | Cluster                                 | Target read tool(s)                                                                                         | Prompt                                                                                                                                                                                                                                                                                              |
| --------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| T-01      | Athlete profile / units                 | `get_athlete_profile`                                                                                       | "Show my athlete profile summary: timezone, preferred units, primary sports, FTP/threshold settings if exposed, and any unit metadata. Do not include raw IDs or exact private thresholds in the final answer; report whether units are metric or imperial."                                        |
| T-02      | Fitness                                 | `get_fitness`                                                                                               | "Summarize my CTL, ATL, and TSB trend over the last 42 days. Explain whether the direction supports training, recovery, or tapering, and include the response's date range and timezone in words."                                                                                                  |
| T-03      | Fitness                                 | `get_training_summary`                                                                                      | "Summarize total training volume, training load, and intensity distribution for the last 4 weeks. Keep it terse and do not infer unavailable zone data."                                                                                                                                            |
| T-04      | Fitness                                 | `get_best_efforts`                                                                                          | "List my best efforts for the last 90 days across the sports the tool supports. Explain what duration or distance each effort represents and whether any requested sport lacked data."                                                                                                              |
| T-05      | Fitness                                 | `get_power_curves`                                                                                          | "Compare my recent power/pace/heart-rate curve signals with longer-term curves if the read tool exposes them. State the units and avoid making up values where the curve is absent."                                                                                                                |
| T-06      | Activities                              | `get_activities`                                                                                            | "List my last 10 activities with sport, local start time, distance/pace or speed in my preferred units, training load if available, device name if available, and whether any row is a Strava-unavailable stub."                                                                                    |
| T-07      | Activities                              | `get_activity_details`                                                                                      | "Using `[ACTIVITY_ID_FROM_T-06]`, give a terse details summary: sport, local start time, duration, distance, calories burned, zones or key metrics, device/source, and whether the activity is unavailable due to Strava."                                                                          |
| T-08      | Activities                              | `get_activity_intervals`                                                                                    | "Using `[ACTIVITY_ID_FROM_T-06]`, summarize the intervals or laps. Include interval units, target/actual fields that are present, and state clearly if no intervals are available."                                                                                                                 |
| T-09      | Activities                              | `get_activity_streams`                                                                                      | "Using `[ACTIVITY_ID_FROM_T-06]`, request only the minimal stream keys needed to inspect power, heart rate, cadence, distance, and time. Confirm stream keys are snake_case and do not request full streams unless necessary."                                                                      |
| T-10      | Activities                              | `get_activity_splits`                                                                                       | "Using `[RUN_OR_RIDE_ACTIVITY_ID_FROM_T-06]`, summarize per-km or per-mile splits according to my preferred units. Explain if splits came from manual laps or virtual stream-derived splits."                                                                                                       |
| T-11      | Activities                              | `get_activity_messages`                                                                                     | "Using `[ACTIVITY_ID_FROM_T-06]`, summarize any activity messages or comments without quoting private text verbatim. Include created-time timezone handling and note if messages are absent."                                                                                                       |
| T-12      | Activities                              | `get_extended_metrics`                                                                                      | "Using `[ACTIVITY_ID_FROM_T-06]`, summarize extended metrics that are actually present: decoupling, IF/VI, zone distributions, loads, RPE/feel/session-RPE, compliance, or device name. Do not compute metrics the response does not expose."                                                       |
| T-13      | Events                                  | `get_events`                                                                                                | "List my calendar events for the next 14 days with local dates, event categories, planned workout summaries, target/load summaries if present, and whether the output appears truncated."                                                                                                           |
| T-14      | Events                                  | `get_event_by_id`                                                                                           | "Using `[EVENT_ID_FROM_T-13]`, fetch the event by ID and compare it to the list result. If the detail endpoint is unavailable, report the structured unavailable reason rather than inventing event details."                                                                                       |
| T-15      | Training plan                           | `get_training_plan`                                                                                         | "Read my active training-plan assignment. Summarize only upstream-exposed assignment and lightweight plan metadata, and explicitly say if periodization parameters such as recovery-week cadence or taper percent are not exposed."                                                                 |
| T-16      | Workout library                         | `get_workout_library`                                                                                       | "Show a terse summary of my workout-library folders or plans, including folder names, counts, plan metadata when present, and no full workout steps by default."                                                                                                                                    |
| T-17      | Workout library                         | `get_workouts_in_folder`                                                                                    | "Using `[FOLDER_ID_FROM_T-16]`, list workouts in that folder with terse workout summaries. Do not expand full structured workout steps unless the tool requires it."                                                                                                                                |
| T-18      | Custom items                            | `get_custom_items`                                                                                          | "List my custom items with item type, name, visibility/index metadata, and counts. Do not include raw custom-item content in the final answer."                                                                                                                                                     |
| T-19      | Custom items                            | `get_custom_item_by_id`                                                                                     | "Using `[CUSTOM_ITEM_ID_FROM_T-18]`, fetch the custom item and summarize its item type and content shape. Redact personal labels/thresholds and state that v0.4 resources will own long-form schema docs if relevant."                                                                              |
| T-20      | Periodization (deferred if not shipped) | no shipped `get_planning_parameters`; use `get_training_plan`, `get_events`, and `get_workout_library` only | "Can you read my athlete-level ramp-rate %, recovery-week cadence, taper % drop, and intensity-distribution preference? Use only shipped read tools, and if these athlete-level periodization parameters are not exposed, say so explicitly and point to the closest available read-only evidence." |

Cluster coverage summary: activities (T-06–T-12), fitness (T-02–T-05), wellness (CJ-03 plus adversarial A-03), events/training plan (T-13–T-15), workout library (T-16–T-17), custom items (T-18–T-19), and periodization/deferred planning parameters (T-20).

## Adversarial prompts

Run these as explicit failure-mode checks and record whether the final answer preserves units, provenance, scale labels, and athlete-local date-window boundaries.

| Prompt ID | Failure mode forced                                                | Target tool(s)                                                                                    | Prompt                                                                                                                                                                                                                                                                                                                               |
| --------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| A-01      | Unit-system reasoning when a requested metric lacks required units | `get_athlete_profile`, `get_activities`, `get_activity_streams`, optionally `get_activity_splits` | "For `[ACTIVITY_ID_FROM_T-06]`, compute my exact normalized graded pace and compare it with my normal pace. If the stream response does not include grade/altitude/distance/time units needed for an exact calculation, do not compute it; explain which unit or field is missing and what safe approximation, if any, is possible." |
| A-02      | Strava-imported activity unavailable shape                         | `get_activities`, `get_activity_details`, `get_activity_intervals`, `get_activity_messages`       | "Find any recent Strava-imported or API-blocked activity. Tell me what icuvisor can and cannot read about it. The correct answer must mention the structured `unavailable.reason` and workaround if present, and must not fill in `N/A` values as if they were real data."                                                           |
| A-03      | Dual sleep scale reporting                                         | `get_wellness_data`                                                                               | "For a wellness row that contains both `sleepQuality` and `sleepScore`, answer: did I sleep well? You must report both scales separately: `sleepQuality` as athlete-entered 1–4 and `sleepScore` as device-imported 0–100, plus `sleepSecs` if present. Do not collapse them into one score."                                        |
| A-04      | Weekly report stale/current-day date mixing                        | `weekly_review`, `get_athlete_profile`, `get_wellness_data`, `get_fitness`, `get_training_summary`, `get_activities`, `get_events` | "Review last athlete-local week, ending before today. If any tool returns today's `_meta.as_of` or wellness rows after the report window, keep them out of the completed-week summary and label them only as partial current-day context." |
