Skip to content

chore(skills): track keel-asset-scout in the repo, and record today's measurements in it - #263

Merged
eaitbrahim merged 1 commit into
mainfrom
chore/track-asset-scout-skill
Aug 13, 2026
Merged

chore(skills): track keel-asset-scout in the repo, and record today's measurements in it#263
eaitbrahim merged 1 commit into
mainfrom
chore/track-asset-scout-skill

Conversation

@eaitbrahim

@eaitbrahim eaitbrahim commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Moves the scout skill to project scope and puts it under version control. It previously lived
only in ~/.claude/skills/, outside git, with a single .bak as its entire history.

Project scope is the correct home: every path, gate and experiment the skill references is keel's,
so it means nothing in a session rooted elsewhere. There is now exactly one copy — the
user-level one has been retired (parked in ~/.claude/skill-backups/, not deleted). A second copy
is a second source of truth, and the two drift silently.

Tracked via git add -f, because .gitignore:34 ignores .claude/. That is the same exception
the two review-fix-merge-pr skills already use
— following existing precedent rather than
inventing a location.

Why version control matters more here than for a typical skill: most of this document is not
procedure — it is recorded reasoning
about measurements that cost real compute to produce. Why
stationarity is never a filter, why a small-sample profit factor is a lottery ticket, why the
engine's own invariants are unobservable from a proposer. An untracked file loses the argument
along with the rule, and the next person re-derives both the hard way.

Content added today — all additive

All 13 original sections are intact, including every guardrail: Do NOT, Rationalizations, the
citation-fabrication warning, and Output 2's rejection history (the only record of why an asset
was passed over, since keel deliberately has no rejection table).

Added Anchored to
"Taker math controls the field" ~2.5% round-trip, levied on the search not the edge; viable intersection vacant across 24 assets
"What has already been measured" the three experiment documents, read the restatement first
Expansion refuted as a performance fix turtle_breakout negative on all 24 — a 25th cannot fix it. Still valid for power, compliance, future rules
cost_regime a result at 5bp does not transfer to a 1.2% taker venue
sample_size rsi_meanrev 1.1631 on n=38 → 0.8396 across 82 cells at n≥100
evaluation_window ZEC compressed 92.7% of lifetime PnL into one regime atop three losing years
not_already_covered the skill's own example, entry_lookback: 55, sits inside an already-swept grid
Fill-model framing entries fill at next-bar open as market orders (#258); a technique assuming a resting limit will not execute as described
4 Rationalizations rows incl. "this backtest looks clean, the numbers are all plausible"

Two things deliberately NOT added

Both were proposed and declined, with the reasoning written into the file so the next person to
propose them can see why rather than relitigating:

A check on the pending-lifespan invariant. It's an AssertionError inside backtest() — it
raises rather than logs, so a violation ends the run and produces nothing to inspect.
Unobservable from a proposer that never runs a backtest.

A stationarity rejection threshold. ZEC under pullback_continuation is the only asset-rule
pair in the study with no losing complete year — at 0.875 gross. Any stationarity gate
passes that and rejects ZEC-turtle, which at least made money gross. Stationarity is a
diagnostic, never a filter.

Verification

  • The committed copy is byte-identical to the live project-scoped file in the working checkout.
  • The file notes in its own text that being gitignored does not mean untracked here — the trap
    that would otherwise make a future edit look uncommitted.
  • No symlink is involved and no user-level copy remains, so there is nothing to keep in sync.

🤖 Generated with Claude Code

… measurements in it

The scout skill lived only in ~/.claude/skills/, outside version control, with a single .bak as
its entire history. Most of it is not procedure -- it is recorded reasoning about measurements that
cost real compute to produce. An untracked file loses the argument along with the rule.

Tracked via `git add -f` because `.gitignore:34` ignores `.claude/`. That is the same exception the
two review-fix-merge-pr skills already use, so this follows existing precedent rather than
inventing a location.

Content added today, all additive -- all 13 original sections are intact, including the guardrails
(Do NOT, Rationalizations, the citation-fabrication warning, Output 2's rejection history):

- "Taker math controls the field": round-trip friction is ~2.5% of notional, levied on the SEARCH
  rather than the edge, and the viable intersection is vacant across all 24 assets. Liquidity and
  admissibility are entry conditions, not evidence.
- "What has already been measured": points at the three experiment documents, and separates asset
  expansion as a refuted PERFORMANCE fix from its still-valid uses (statistical power, the
  compliance pipeline, future rules) -- which is why the skill is not retired.
- Four new required citation fields: `cost_regime`, `sample_size`, `evaluation_window` and
  `not_already_covered`. Each is anchored to a specific way this project was misled -- a result
  measured at 5bp that does not transfer to 1.2%, rsi_meanrev's 1.1631 on n=38 collapsing to
  0.8396 at the floor, ZEC compressing 92.7% of lifetime PnL into one regime, and entry_lookback=55
  sitting inside an already-swept grid.
- Fill-model framing: entries fill at the next bar's open as market orders (#258), so a technique
  assuming a resting limit or stop entry will not execute as described.
- Four Rationalizations rows, including "this backtest looks clean, the numbers are all plausible"
  -- two defects produced plausible, internally consistent output for the life of the project while
  2,712 tests passed.

Two things deliberately NOT added, with the reasoning recorded so the next proposal to add them can
see why: a check on the pending-lifespan invariant (it raises rather than logs, so a violation ends
the run and is unobservable from a proposer), and a stationarity rejection threshold (ZEC under
pullback_continuation is the only pair in the study with no losing complete year, at 0.875 gross --
any such gate passes that and rejects the one thing that made money gross).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@eaitbrahim
eaitbrahim force-pushed the chore/track-asset-scout-skill branch from f95963c to 44d806a Compare August 13, 2026 05:51
@eaitbrahim
eaitbrahim merged commit f642750 into main Aug 13, 2026
1 check passed
@eaitbrahim
eaitbrahim deleted the chore/track-asset-scout-skill branch August 13, 2026 05:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant