feat(sl-hunting): v5g, and the 18 SEP pre-open note - #173
Merged
Merged
Conversation
…tretch
17 Sep, and the first live session with the 17 Sep note, SLH-017 and SLH-018
all active. Two trades, both SHORT, basket +Rs.11,355.00.
SLH-017 DID EXACTLY WHAT IT WAS BUILT FOR. Both entry rationales read the
computed verdict off the tool and stated it: "Open classified FLAT on both
NIFTY (-0.096%) and BankNIFTY (-0.295%), triggering the pre-open note's
FLAT-open SELL branch", and then "both below the 0.5% threshold". Yesterday the
model computed 0.36% by hand, called it a gap-up and took the wrong branch four
times; today it was handed FLAT, cited the threshold, and took the branch the
note prescribed. SLH-018 never fired - no reasonless exit arrived - which is
correct behaviour for a guard.
IH reached the same read and took the same side, and his reasoning is the
note's flat branch almost verbatim: "when the market moves UP and does not
cross the round number, sellers gradually come there too. But the market keeps
HOLDING in one place... even if someone made a trade, they do not hold a
positional trade. So if sellers are not seated here... overall we should get
selling."
AND HE LOST ON IT. He entered at the open and held. NIFTY chopped between
roughly 23,217 and 23,305 all morning, broke that range near noon and ran to
23,358.70 by 12:38; BankNIFTY broke out, his loss limit was exhausted, and he
cut - "there is no need to apply the brain here, cut the trade and get out."
The book traded the same thesis in two BOUNDED windows - short 23,282.75 at
09:39 booked four minutes later into the stall at support (+2,820), short
23,302.90 at 10:18 closed at the 11:00 cutoff (+8,535). The read was right for
about ninety minutes and wrong afterwards.
The net-new claim is reflexive, and it is the missing half of v5b. v5b reads an
eviction and licenses a FOLLOW rather than a hunt. What that follow INHERITS is
that nobody is trapped, so nothing is forced to move - and the reasoning that
clears the crowd ("if someone made a put trade and the market gave no momentum
for three or four hours, his premium decays and he will not hold") describes
the conditions you are about to enter, on the same clock, paying the same
decay. The eviction argument is evidence about the PAST; it promises nothing
about the next hour.
Placed after the WHOLE v5c block rather than beside v5b, because v5c opens "The
twin of the rule above" and that reference points at v5b - inserting between
them would have silently re-aimed it. Same class of mistake as splitting v4t
from its v4u sub-bullet yesterday, caught this time before writing.
THE HONESTY CLAUSE IS PART OF THE RULE, NOT COMMENTARY. Trade 2's exit was not
a decision: the agent had been failing every bar since 10:42 - 19 agent_error
rows, a canned SLHuntingAgentError per bar for the last eighteen minutes - and
the position was closed by the 11:00 cutoff. What won was the BOX, not the
judgement. A mutation that removes that sentence is caught, because without it
the day reads as the agent out-trading him, which is false and flattering.
Negative-tested 11 ways, all 11 caught, plus a control mutation of unasserted
prose that correctly did not trip the test.
Not encoded: his emotion/rule-discipline passage, the third session running to
make that point and already carried by v3y plus the RISK loss-limit rules; and
"if the loss limit is exhausted there is no need to apply the brain", which is
v5c's WHAT IT DOES NOT SAY clause from the other side.
Recorded as open: the 18-minute inference outage from 10:42 is unexplained. The
log carries only the canned content-free message by design (SLH-004). The Pro
plan's 5-hour window expiring around then is the obvious candidate and matches
the operator's stated constraint, in which case nothing is broken - but 19
consecutive failures while holding a live position is worth confirming rather
than assuming, because the position was unmanaged throughout.
Gates: 606 master, 28 market-data-health, 1509 pytest (+1), ruff 0.16.7, mypy
(80 files + master), compileall, bandit, coverage 73.8% policy pass.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The v5g record left the 18-minute inference outage from 10:42 open, pending confirmation. The operator confirmed the same evening: it was the Pro plan's 5-hour usage window expiring. Nothing is broken and no code change is wanted. What it adds to the existing constraint is a NUMBER. The 11:00 cutoff is sized to that plan window, but the window does not END at 11:00 - today it ran out at about 10:42, roughly eighteen minutes early. So the agent can go dark BEFORE its own cutoff, and anything open in that gap is unmanaged: no premise check, no agent exit, only the host mechanical risk (stop, target, max-loss, 15:15 square-off) and then the cutoff flatten. Today that gap was worth +8,535, because the cutoff booked the second short about six points off the session's post-entry low, minutes before a reversal that ran 140 points the other way. That is luck, not design. The answer already in the book is v5g's PRACTICAL FORM - name the window before entering - which is worth more than a new guard here, because a position reasoned for a window ending at 11:00 is really operating on one that can end at 10:40. Also recorded: the cause is NOT recoverable from the log. SLH-004 logs this class with canned, content-free messages on purpose, so a future outage of the same shape will again need the operator to say which it was. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Source: 'Prediction For 18 SEP 2026' (I7gORF7zm4o, uploaded 2026-09-17 21:25
IST). Addendum to the v5g PR.
Third consecutive note with the SAME branch shape - gap up -> BUY, flat or gap
down -> SELL, stated for all three indices - so what the test protects is that
the shape is not all there is. The REASON moves each evening, and tonight it is
whether a multi-day negative run has finally seated sellers:
flat / gap down -> SELL "sellers are not much seated here" (his words, on
NIFTY, given as that branch's premise)
gap up -> BUY "because the market has been negative for many
days, there COULD be sellers here, so in a gap-up
case they can be targeted"
The conditional is the point. The sellers are HYPOTHETICAL until the open shows
them - an edit that asserts them rather than conditioning on them inverts the
whole read, and the test catches exactly that mutation. Today's shape is why
the question is open at all: "momentum turned positive but a rejection also
formed", a retracement followed by a rejection on top of it.
Levels, only one of which needed resolving:
NIFTY R 23500 / 23360 S 23100 / 23000
BANKNIFTY R 56650 / 56300 S 55810 / 55500
SENSEX R 75200 / 74700 S 74000 / 73650
BankNIFTY came through clean and is unchanged from the 17 SEP note, which is
itself a useful cross-check that nothing drifted. NIFTY was clean this time -
note it is 23100 tonight, not the 23110 the operator corrected yesterday, so
the level genuinely moved rather than the ASR repeating itself. SENSEX's
supports arrived as "7473650" again, byte-identical to the previous night's
garble, and were confirmed to the same 74000 / 73650; its resistances came
through clean.
Negative-tested 17 ways on the note itself, all 17 caught, plus a control
mutation of unasserted prose that correctly did NOT trip the test - including
guards that a reverted NIFTY 23110, a reordered BankNIFTY pair, or the SENSEX
reading I had offered and had rejected would all fail.
No doc section: notes have not carried one (PR #168 precedent); provenance
lives in the test docstring and here.
Gates: 606 master, 28 market-data-health, 1509 pytest, ruff 0.16.7, mypy (80
files + master), compileall, bandit.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three commits: the knowledge rule for this session, the confirmed cause of its one open question, and tomorrow's pre-open note.
First, the part that worked
This was the first live session with the 17 Sep note, SLH-017 and SLH-018 all active — and SLH-017 did exactly what it was built for. Both entry rationales read the computed verdict off the tool and stated it:
Yesterday the model computed 0.36% by hand, called it a gap-up, and took the wrong branch four times. Today it was handed FLAT, cited the threshold, and took the branch the note prescribed. SLH-018 never fired — no reasonless exit arrived, which is the right behaviour for a guard.
Then the part worth encoding
IH reached the same read and took the same side — his reasoning is the note's flat branch almost verbatim: "when the market moves UP and does not cross the round number, sellers gradually come there too. But the market keeps HOLDING in one place… even if someone made a trade, they do not hold a positional trade."
And he lost on it.
NIFTY chopped between roughly 23,217 and 23,305 all morning, broke that range near noon and ran to 23,358.70 by 12:38. The read was right for about ninety minutes and wrong afterwards.
What v5g encodes
The reflexive claim, and it's the missing half of v5b. v5b reads an eviction and licenses a follow rather than a hunt. What that follow inherits is that nobody is trapped — so nothing is forced to move. And the reasoning that clears the crowd —
— is a description of the conditions you are about to enter, on the same clock, paying the same decay. The eviction argument is evidence about the past; it promises nothing about the next hour.
Placed after the whole v5c block rather than beside v5b, because v5c opens "The twin of the rule above" and that reference points at v5b — inserting between them would have silently re-aimed it. Same class of mistake as splitting v4t from its v4u sub-bullet yesterday, caught this time before writing.
The honesty clause is part of the rule
Trade 2's exit was not a decision. The agent had been failing every bar since 10:42 — 19
agent_errorrows, a cannedSLHuntingAgentErrorper bar for the last eighteen minutes — and the position was closed by the 11:00 cutoff. What won was the box, not the judgement.A mutation that removes that sentence is caught, because without it the day reads as the agent out-trading him, which is false and flattering.
Verification
Negative-tested 11 ways, all 11 caught, plus a control mutation of unasserted prose that correctly did not trip the test.
Gates: 606 master · 28 market-data-health · 1509 pytest (+1) · ruff 0.16.7 · mypy (80 files + master) · compileall · bandit · coverage 73.8%, policy pass.
Considered and not encoded
The outage: confirmed, not open
The 18-minute run of
agent_errorrows from 10:42 was the Pro plan's 5-hour usage window expiring — confirmed by the operator. Nothing is broken and no code change is wanted.What it adds is a number. The 11:00 cutoff is sized to that plan window, but the window does not end at 11:00 — today it ran out at about 10:42, roughly eighteen minutes early. So the agent can go dark before its own cutoff, and anything open in that gap is unmanaged: no premise check, no agent exit, only the host's mechanical risk and then the cutoff flatten.
Today that gap was worth +₹8,535, because the cutoff booked the second short about six points off the session's post-entry low, minutes before a reversal that ran 140 points the other way. That is luck, not design. The answer already in the book is v5g's PRACTICAL FORM — name the window before entering — which is worth more here than a new guard, because a position reasoned for a window ending at 11:00 is really operating on one that can end at 10:40.
Recorded too: the cause is not recoverable from the log. SLH-004 logs this class with canned, content-free messages on purpose, so a future outage of the same shape will again need the operator to say which it was.
The pre-open note for 18 Sep
From
I7gORF7zm4o, uploaded 2026-09-17 21:25 IST.Third consecutive note with the same branch shape — gap up → BUY, flat or gap down → SELL, for all three indices — so what the test protects is that the shape is not all there is. The reason moves each evening, and tonight it's whether a multi-day negative run has finally seated sellers.
The conditional is the point: the sellers are hypothetical until the open shows them. An edit that asserts them rather than conditioning on them inverts the whole read, and the test catches exactly that mutation. Today's shape is why the question is open at all — "momentum turned positive but a rejection also formed".
Only one value needed resolving tonight. BankNIFTY came through clean and is unchanged from the 17 Sep note — itself a useful check that nothing drifted. NIFTY was clean too, and note it is 23100 tonight, not the 23110 corrected yesterday, so the level genuinely moved rather than the ASR repeating itself. SENSEX's supports arrived as
7473650again, byte-identical to the previous night's garble, and were confirmed to the same 74000 / 73650; its resistances were clean this time.Negative-tested 17 ways, all 17 caught, plus a passing control — including guards that a reverted NIFTY 23110, a reordered BankNIFTY pair, or the SENSEX reading I offered and had rejected would each fail.
No doc section: notes haven't carried one (PR #168 precedent).
🤖 Generated with Claude Code