Weekly Review (global, MCP-only)
Replaces the old project-local /week-end (formerly at Journals/.claude/skills/week-end/,
now archived at Journals/.claude/skills-legacy/, deferring to Journals/PROMPTS.md). Same
reasoning as sod/SKILL.md's header. CLAUDE.md at
/Users/latuconsinafr/Personal/Trading/Journals/CLAUDE.md remains the rulebook.
If anything this session suggests a rule should change, per CLAUDE.md §20.14: add it to
CLAUDE.md §21.3, do not act on it. Rule changes belong at quarter boundaries (§13).
Instruments — resolved live via get_active_instruments, same as sod/SKILL.md. Call it in
Step 0 alongside the connectivity check and use its full pair codes for every subsequent MCP call
— do not assume EU/GU/UJ/XAU (used here for readability only) is still the active set.
Step 0 — confirm the MCP server is reachable, then resolve the active set
Call get_account_state first. If it fails, stop — just run needs to be running in webapp/
— and do not proceed as if anything here will be recorded. Then call get_active_instruments
and use its result for the rest of this session.
Step 1 — resolve the week
date +%G-W%V (zero-padded, see week-start/SKILL.md for why this matters — an unpadded
week number sorts wrong in every cascade read that follows), unless the pilot gives one
explicitly.
Step 2 — confirm the week's daily sessions are actually complete
Call get_session_completeness (enough days back to cover the full week, e.g. limit: 10).
For every calendar day in the week (Mon–Fri; weekends are never trading days, per
evening/SKILL.md Step 0): does that date show sodDone: true AND eodDone: true?
- Both true → that day is complete, part of the sample.
- Either false, or no row at all → that day was a skipped session. Note it as missed in the
overview. Do not backfill it, and do not let the gap silently shrink the week's sample — say
explicitly how many of the 5 possible days actually have a complete record.
Step 3 — gather what the week needs
get_daily_analysis — once per instrument, sinceDate = the Monday of this week. Filter
the returned rows client-side to this week's dates only (the tool returns everything since that
date, not bounded to one week) — this gives verdicts, decisionQuality/outcomeQuality
(written by each day's /eod), and checklistReasoning text for the rejection-reason tally in
Step 5.
get_pending_hypotheticals (no instrument filter — every active instrument) — then filter client-side to
this week's date range. A hypothetical from an earlier week still showing PENDING here means
an earlier weekly review missed it; note that explicitly rather than silently resolving it as
if it were this week's.
get_compliance_scores — dateFrom/dateTo spanning the week — for the compliance %
calculation in Step 4.
get_recent_trades — closedFrom/closedTo spanning the week (use end-of-day boundaries,
e.g. closedTo: "[FRIDAY]T23:59:59" — see that tool's own description for why a bare date isn't
enough) — for total R and win/loss count.
get_calendar_events for each day in the week (no currency filter) — needed to check
whether a triggered hypothetical fell inside a §6 event window (Step 4.4).
Step 4 — run the review, in this order
- Aggregate the week's verdicts and outcomes from Step 3's
get_daily_analysis results —
what was decided each day, and (from decisionQuality/outcomeQuality) how it actually
played out.
- D1-level weekly overview per instrument — has the higher-timeframe swing structure changed
this week? Synthesize from the daily structural reads gathered in Step 3, not fresh chart
analysis (that's
/sod's job).
- Weekly process compliance % and total R (§15), plus session completeness — three separate
figures, never merged. Compliance: bucket Step 3's
get_compliance_scores rows into
decision-quality (items 1–6) vs. execution-quality (items 7–10), matching
write_journal_rollup's own split; EXCLUDED results count toward neither numerator nor
denominator (§15B's under-risking carve-out). Total R: sum rMultiple across Step 3's
get_recent_trades results. Session completeness: the Step 2 count (e.g. "4 of 5 days
complete").
- Resolve this week's missed-opportunity hypotheticals (§16) — TARGET (would-have-won) /
STOP (would-have-lost) / still-genuinely-PENDING (leave alone, don't force a resolution the
data doesn't support) via
resolve_hypothetical. Track as statistics, not narrative.
- For each triggered hypothetical, check Step 3's calendar events — if the trigger fell
inside a §6 event window, resolve it
BLOCKED instead of TARGET/STOP. The trade could
not have been taken regardless of its R:R.
- Where chart resolution is genuinely insufficient to tell honestly, resolve
UNRESOLVED and
state what data would settle it (ask the pilot rather than guess) — never mark won/lost on a
guess.
- Break the aggregate down by instrument, not just in total.
- Compare executed R per trade against skipped R per hypothetical. State the sample size
explicitly and why it limits the conclusion — this is not enough data to prove the rules are
too tight or too loose off one week.
- Tally the rejection-reason counter (§15C) — for every setup considered and rejected this
week, which checklist item killed it? Read Step 3's
checklistReasoning text per day to
attribute. This is diagnostic, not a score — a high count on one item may be the rules working
correctly, not a problem.
- Flag (do not adopt) anything worth raising at the next quarterly review — add it to
CLAUDE.md §21.3 with the evidence that prompted it, same as any other session per §20.14.
Step 5 — write through MCP (the only write path)
resolve_hypothetical — once per hypothetical resolved in Step 4.4.
write_journal_rollup — period: "weekly", this week's periodKey. Set overviewMd
(Steps 4.1–4.2 + the rejection-reason tally from 4.6, as prose/markdown — there's no dedicated
structured field for the tally, matching §15C's own framing as "a diagnostic, not a scored
metric"), reflectionMd (Step 4.5's executed-vs-skipped comparison and its sample-size
caveat), complianceOverall/complianceVerdict/complianceExecution (Step 4.3),
totalR (Step 4.3). Do not set weekAheadScanMd — that belongs to week-start, and the
upsert leaves it untouched as long as this call doesn't include it.
If any call fails partway through, stop and report exactly what succeeded and what didn't —
including which hypotheticals were actually resolved before a failure, if one happens mid-loop.
What this does NOT do
Same constraints as the old protocol: this does not resolve or score today's or any other week's
hypotheticals beyond this one — that stays each week's own job. This does not propose rule changes
directly to CLAUDE.md — only §21.3 gets a flag, per §20.14; adoption only happens at quarter-end.
1---2name: week-end3description: Run the Weekly Review for the trading journal (CLAUDE.md Section 13, at /Users/latuconsinafr/Personal/Trading/Journals/CLAUDE.md). Global, MCP-only — writes exclusively through the trading-journal MCP server, no markdown output. Aggregates the week's daily sessions, resolves missed-opportunity hypotheticals, tallies the rejection-reason counter. Invoke Friday close or Sunday, after the week's daily sessions are done.4---56# Weekly Review (global, MCP-only)78**Replaces the old project-local `/week-end`** (formerly at `Journals/.claude/skills/week-end/`,9now archived at `Journals/.claude/skills-legacy/`, deferring to `Journals/PROMPTS.md`). Same10reasoning as `sod/SKILL.md`'s header. `CLAUDE.md` at11`/Users/latuconsinafr/Personal/Trading/Journals/CLAUDE.md` remains the rulebook.1213**If anything this session suggests a rule should change**, per CLAUDE.md §20.14: add it to14CLAUDE.md §21.3, do not act on it. Rule changes belong at quarter boundaries (§13).1516**Instruments — resolved live via `get_active_instruments`, same as `sod/SKILL.md`.** Call it in17Step 0 alongside the connectivity check and use its full pair codes for every subsequent MCP call18— do not assume EU/GU/UJ/XAU (used here for readability only) is still the active set.1920## Step 0 — confirm the MCP server is reachable, then resolve the active set2122Call `get_account_state` first. If it fails, stop — `just run` needs to be running in `webapp/`23— and do not proceed as if anything here will be recorded. Then call **`get_active_instruments`**24and use its result for the rest of this session.2526## Step 1 — resolve the week2728**`date +%G-W%V`** (zero-padded, see `week-start/SKILL.md` for why this matters — an unpadded29week number sorts wrong in every cascade read that follows), unless the pilot gives one30explicitly.3132## Step 2 — confirm the week's daily sessions are actually complete3334Call **`get_session_completeness`** (enough days back to cover the full week, e.g. `limit: 10`).35For every calendar day in the week (Mon–Fri; weekends are never trading days, per36`evening/SKILL.md` Step 0): does that date show `sodDone: true` AND `eodDone: true`?3738- **Both true** → that day is complete, part of the sample.39- **Either false, or no row at all** → that day was a skipped session. **Note it as missed in the40 overview. Do not backfill it, and do not let the gap silently shrink the week's sample** — say41 explicitly how many of the 5 possible days actually have a complete record.4243## Step 3 — gather what the week needs4445- **`get_daily_analysis`** — once per instrument, `sinceDate` = the Monday of this week. Filter46 the returned rows client-side to this week's dates only (the tool returns everything since that47 date, not bounded to one week) — this gives verdicts, `decisionQuality`/`outcomeQuality`48 (written by each day's `/eod`), and `checklistReasoning` text for the rejection-reason tally in49 Step 5.50- **`get_pending_hypotheticals`** (no instrument filter — every active instrument) — then filter client-side to51 this week's `date` range. A hypothetical from an earlier week still showing PENDING here means52 an earlier weekly review missed it; note that explicitly rather than silently resolving it as53 if it were this week's.54- **`get_compliance_scores`** — `dateFrom`/`dateTo` spanning the week — for the compliance %55 calculation in Step 4.56- **`get_recent_trades`** — `closedFrom`/`closedTo` spanning the week (use end-of-day boundaries,57 e.g. `closedTo: "[FRIDAY]T23:59:59"` — see that tool's own description for why a bare date isn't58 enough) — for total R and win/loss count.59- **`get_calendar_events`** for each day in the week (no currency filter) — needed to check60 whether a triggered hypothetical fell inside a §6 event window (Step 4.4).6162## Step 4 — run the review, in this order63641. **Aggregate the week's verdicts and outcomes** from Step 3's `get_daily_analysis` results —65 what was decided each day, and (from `decisionQuality`/`outcomeQuality`) how it actually66 played out.672. **D1-level weekly overview per instrument** — has the higher-timeframe swing structure changed68 this week? Synthesize from the daily structural reads gathered in Step 3, not fresh chart69 analysis (that's `/sod`'s job).703. **Weekly process compliance % and total R (§15), plus session completeness — three separate71 figures, never merged.** Compliance: bucket Step 3's `get_compliance_scores` rows into72 decision-quality (items 1–6) vs. execution-quality (items 7–10), matching73 `write_journal_rollup`'s own split; `EXCLUDED` results count toward neither numerator nor74 denominator (§15B's under-risking carve-out). Total R: sum `rMultiple` across Step 3's75 `get_recent_trades` results. Session completeness: the Step 2 count (e.g. "4 of 5 days76 complete").774. **Resolve this week's missed-opportunity hypotheticals** (§16) — TARGET (would-have-won) /78 STOP (would-have-lost) / still-genuinely-PENDING (leave alone, don't force a resolution the79 data doesn't support) via `resolve_hypothetical`. Track as statistics, not narrative.80 - For each **triggered** hypothetical, check Step 3's calendar events — if the trigger fell81 inside a §6 event window, resolve it `BLOCKED` instead of `TARGET`/`STOP`. The trade could82 not have been taken regardless of its R:R.83 - Where chart resolution is genuinely insufficient to tell honestly, resolve `UNRESOLVED` and84 state what data would settle it (ask the pilot rather than guess) — never mark won/lost on a85 guess.86 - **Break the aggregate down by instrument, not just in total.**875. **Compare executed R per trade against skipped R per hypothetical.** State the sample size88 explicitly and why it limits the conclusion — this is not enough data to prove the rules are89 too tight or too loose off one week.906. **Tally the rejection-reason counter (§15C)** — for every setup considered and rejected this91 week, which checklist item killed it? Read Step 3's `checklistReasoning` text per day to92 attribute. This is diagnostic, not a score — a high count on one item may be the rules working93 correctly, not a problem.947. **Flag (do not adopt)** anything worth raising at the next quarterly review — add it to95 `CLAUDE.md` §21.3 with the evidence that prompted it, same as any other session per §20.14.9697## Step 5 — write through MCP (the only write path)98991. **`resolve_hypothetical`** — once per hypothetical resolved in Step 4.4.1002. **`write_journal_rollup`** — `period: "weekly"`, this week's `periodKey`. Set `overviewMd`101 (Steps 4.1–4.2 + the rejection-reason tally from 4.6, as prose/markdown — there's no dedicated102 structured field for the tally, matching §15C's own framing as "a diagnostic, not a scored103 metric"), `reflectionMd` (Step 4.5's executed-vs-skipped comparison and its sample-size104 caveat), `complianceOverall`/`complianceVerdict`/`complianceExecution` (Step 4.3),105 `totalR` (Step 4.3). **Do not set `weekAheadScanMd`** — that belongs to `week-start`, and the106 upsert leaves it untouched as long as this call doesn't include it.107108If any call fails partway through, stop and report exactly what succeeded and what didn't —109including which hypotheticals were actually resolved before a failure, if one happens mid-loop.110111## What this does NOT do112113Same constraints as the old protocol: this does not resolve or score today's or any other week's114hypotheticals beyond this one — that stays each week's own job. This does not propose rule changes115directly to CLAUDE.md — only §21.3 gets a flag, per §20.14; adoption only happens at `quarter-end`.