Releases: nmiller0113/fantasy-copilot
Release list
1.45.0
A trade pass across several leagues recommended an offer in every one of them, and each
recommendation fell apart at the user's first question. The numbers behind them were right.
The judgment was not: every trade was ranked by one number, the gain in the user's starting
lineup over the rest of the season, and any positive gain became an offer. Shown per week, most
gains were two or three points. Several offers gave the other manager a player he would not
want (questionable, newly behind a teammate, or valued far below what was asked), and several
left his lineup exactly where it was, so he had no reason to say yes. The pass also relayed
subagents' calls without re-testing them, and the subagents had been asked for an offer per
league. The right answer that night was "no trade worth making", and it arrived only after the
user had pushed back five times.
Added
references/trades.md, the procedure for trades the assistant proposes: score both teams'
optimal starting lineups before and after on the host's rest-of-season and next-four-weeks
projections, counting players parked in IR slots at their projection; say the host number
and the engine's league-scored trade value together and name their split; start from the
engine's Trade Partner Finder. Then the bar a trade must clear before it is recommended: a
per-week gain worth a starter (about three points a week, stated beside the season total,
the floor adjustable in the private document), a real reason for the other side (a hole
filled and a trade value even or in his favor; a deal that leaves his lineup flat is a free
probe, never led with), no player on the user's side the other manager will not want, and a
week-by-week read free of one-bye artifacts and bye stacks. "No trade worth making" is a
complete answer, said first. Delegated work asks for "none" as an expected answer and is
re-tested against the bar before it reaches the user. Under pushback a call is defended with
the numbers or retracted as wrong from the start, never flipped to agree.
Changed
- Skill section 8: the bye-week stretch bullet becomes "Proposing trades", pointing to the new
page and its bar. Its sentence on trading into draft-day overpayers moved to the page intact.
1.44.0
A waiver pass re-read the free-agent pool for only the leagues whose first choice had
already been taken, and skipped the ones that looked settled from a read an hour old. The
best defense on the board came free in one of the skipped leagues during that window; the
user was on that league's page three minutes before a rival claimed it, and was sent to a
worse row off the stale list. Minutes later the same pass named drops that were already
committed to the user's own pending claims, so every click was refused by the host. The same
night, asked to compare two defenses, it answered from the host's projection alone and then,
corrected, from the engine's alone. The
flip moves every unclaimed player off waivers into the free-agent pool at once, so a pool
read before it is never evidence about the pool after it, and a roster the assistant itself
changed earlier the same evening is state to re-read rather than state to recall.
Added
references/transaction-watch.mdgains "The waiver-run window": the gap between the
waiver period ending and the run settling claims is its own pass, and both of its reads
cover every league rather than a subset. The pool is re-read at the flip however settled
a league looked before it, asking the host for free agents only and never the availability filter
that also returns players still on waivers. The team's pending block is read before any add or
drop is named in that league, and every player it holds as a drop is unavailable until the
run resolves unless that claim is named for cancellation in the same line. A league whose room has repeatedly moved faster is worked first in the
window, recorded in the private document beside the manager who makes it true. The pass
also names every starting slot the host shows empty, since a claimed kicker or defense
arrives on the bench and an empty slot scores nothing.references/lineups.mdgains "Saying the number": any line giving a projection for one
of two players being compared for a slot, a claim or an add carries BOTH services in that
line, the host's projection and the engine's raw projection, on the same horizon (the week
for a slot, the horizon skill section 8 names for that claim or add), never one alone,
because having read both and reporting one leaves the user unable to see the input that
was dropped; a service holding no projection on that horizon is said as not held, never
substituted from another horizon, the comparison then read on the held service alone. A
host projection failing skill section 5's settings test is
said, not used, marked settings-blind, and neither keeps nor moves a player nor opens the
close band, which is then read on the engine's raw projection alone. Where the two
disagree on which player is ahead, the disagreement IS the finding, said in the same breath as the call with the margin on each side,
before any reasoning about which to follow and after the met move where one is being made.
Inside about a point on either service, or ordered differently by the two, neither projection
moves a player on its own: a SLOT goes to the game-day pass's split call, its five inputs
and the close-band reads it already orders, with a met conditional not reopened and the
kicker and team-defense two-number test untouched, and a slot call left even keeps the
current starter, said as even; a CLAIM or an ADD goes to skill section 8's replaceability test and,
on a claim, its burn-the-claim test, the gap said, the tests said, the cost from the host's row, the user
deciding, and nothing kept by default there. A third read (the matchup column, the betting
line's implied totals, required at running back and receiver, or a dated usage report) is
named beside the two projections, never in place of them, and a call carried by one source
against the other two says which. The waiver-run window points at it, so it governs the
pool's board as well as the lineup; the engine's number there is the waiver-eve Finder
read's, since the flip moves availability and not projections unless its news feed shows a
newer item, and the host's is the window's own.
Changed
references/lineups.md: a free agent whose game has kicked off is on waivers "until the
waiver period ends" rather than "until the weekly run", which on a host that flips the
unclaimed ahead of its run is the flip.
1.43.0
A game-day pass deferred a flex call on a condition and named the move if the condition
held, then threw that call away when the condition was confirmed hours later: the next pass
opened by re-running the same two-player comparison from scratch instead of by its own open
conditional, saw that the engine's projection for the beneficiary had not moved, read "the
number did not change" as "nothing changed", and kept the other body. The engine had already
projected the absent starter near zero that morning, so the beneficiary's number was the
with-absence number all along and its not moving was evidence of nothing; the user had to
argue the copilot back into a call the copilot had made itself, with minutes left before the
lock. In that same close call, two backs inside a point on both services with each service
preferring a different one, the pass never read the betting line, which had the lead back on
a favored team with the higher implied team total against a committee back on an underdog
with a low total and a low posted rushing prop: game script and touchdown chance settled the
tie, and they reversed the pass's own underdog-means-take-the-ceiling argument, because a
back's ceiling comes from touchdown chances. And the pass set every running back, receiver,
tight end and flex slot in every league without ever looking at kicker or team defense, where
free pool upgrades both services rated higher sat unclaimed until the user asked, found with
minutes to the rostered units' kickoff, while the engine's matchup column had been dropped
from the dashboard read, so a question about a player's matchup could not be answered from
what the pass had already read. The rules are now written down. Every pass after the first
one on a game day opens with the conditionals set earlier, and so does every pass on a later
day than the one that set them, the first pass of a game day included: each is marked met,
not met or still open, from the host's roster row or the engine's tracker where either shows
the status and from the dated report itself where neither does, and the met ones are acted on
first, before any other read; the move of a met conditional is reversed only on evidence that
did not exist, or had not been read, when the conditional was set, the evidence named and the
reversal said to be a reversal, in the same message and before the deadline, and re-running
the comparison the conditional was set on is not new evidence. A projection that already
priced the news cannot be used to argue the news does not matter, and the test is the absent
player's own projection as it stood when the conditional was set, which is why those set-time
numbers are now written down when the conditional is. Every close call with a running back or
a receiver on either side reads the point spread and the total for BOTH players' games and
states each team's implied total beside the projections, the spread taken as a positive
number of points, before the posture rule's ceiling-or-floor argument is made. And every
pass covers every starting slot, kicker and team defense included, comparing the pool's top
unlocked names to the rostered unit on both the host's
number and the engine's, before the EARLIER of the two kickoffs.
Added
skills/fantasy-copilot/references/lineups.mdgains a "## Carried conditionals" section,
placed immediately after "## The game-day pass" and before "## The week". How one is SET: a
pass that defers a call on a named future event (a window's inactive list, a designation, a
practice report, a report on a workload) states the condition, the move if it is met, the
move if it is not, the deadline, which is the window that move is good until under this
page's pivot-window rule, the earlier of the incoming player's kickoff and the kickoff of
the player leaving the slot, and the projections the call was made on as they read at that
moment, the beneficiary's and the absent or doubtful player's, the engine's number and the
host's for each; a pivot named for a questionable starter IS a carried conditional, so
every pivot the lock order names for a flagged starter is one; it is stated in full to the
user and written to the private document (skill section 9), and one held only in the
copilot's head is not set. How every pass that FOLLOWS one which set a conditional opens,
which is every pass after the first one on a game day and every pass on a later day too,
the first pass of a game day included: before any other read, the status each conditional
set earlier turns on is read and each one is marked met, not met or still open, that status
taken from the host's roster row or the engine's tracker when either shows it and never
from an article in that case, while a condition neither of them shows, a practice report or
a report on a workload, is marked from the dated report itself under source 4's rule; with
the three cases walked, met (the stated move IS the call, said first, ahead of any new
number, and the comparison that produced it is not re-run), not met (the stated alternative
is the call, the alternative move made or the lineup left as it is where the alternative was
to leave it alone, said in the same shape) and still open (carried forward with its deadline
restated and what will resolve it; a conditional still open when its deadline arrives leaves
the slot as it is locked, which resolves it to the stated alternative only where that
alternative was to leave the lineup alone, and is why a conditional whose resolving event
lands after its deadline cannot be carried at all and is instead the no-cover call of this
page's bench-coverage section, made by the user before the deadline). Reversal: only on
evidence that did not exist or had not been read when the conditional was set, such as a
later report of a snap cap or a workload limit on the incoming player, a new designation or
a weather turn at that scale; the evidence is named, the user is told it is a reversal of
the call already given, in the same message and before the deadline; re-running the
comparison is not new evidence
and neither is a preference. Already priced: when the condition is confirmed, the
beneficiary's projection is read against the absent player's own projection as it stood
when the conditional was set, in three cases, (a) the beneficiary's projection moved after
the confirmation, a move in either direction being new information worth the size of the
move and a move DOWN being evidence the reversal rule can use, named as such, (b) it
did not move and the absent player was already projected near zero, so the absence was
priced before the confirmation and there is no ground for reversal, and (c) it did not move
and the absent player still carries a full projection, so the engine has not updated, which
is said out loud as stale and is no ground for reversal either; where those set-time
numbers were not kept the test cannot be run, the pass says so and the met move stands,
which is the default anyway since a met move is reversed only on new evidence; in all three
the projection stays a data point in the comparison (skill section 3), and what it cannot
do is stand as evidence that the confirmed news changed nothing.- A paragraph in the same file's "## The game-day pass", placed after the four sources and
before the four rules, on the betting line for every close call where either player is a
running back or a receiver: the point spread and the total read for BOTH players' games
from a same-day dated odds page under source 4's rule, each team's implied total stated
beside the projections with the spread taken as a positive number of points, since an odds
page prints the favorite's as a negative number (half the
game's total plus half the spread for the favorite, half the total minus half the spread
for the underdog, so the favorite's implied total is always the higher of the two), the
player's own yardage and touchdown props read where a book posts
them, a prop that cannot be found said as not found and never inferred, and a game with no
posted line found said the same way with the implied-total input silent on that side. It is
read before the posture rule's ceiling-or-floor argument, because game script and touchdown
chance are where a back's or a receiver's ceiling comes from, so a lead back on a favored
team with the higher implied total holds the ceiling case over a committee back on an
underdog with a low total whatever the ceiling column says. Two players on the SAME TEAM
have identical implied totals, so that input is silent while the game's total still says
how much scoring there is to share and the props and roles still separate them; two players
on opposing teams of one game need nothing special, since the formula gives them different
implied totals. The line is a data point (skill section 3), never a tie-breaker on its own.
Required whenever either player in the close call is a running back or a receiver,
permitted at tight end, at quarterback and in any other close call where game
script moves the number, never required there. - A paragraph and four bullets in the same section: every pass covers every starting slot in
every league, kicker and team defense included, pulling the host's free-agent pool at the
position sorted by the week's projection and comparing the top unlocked pool players to the
rostered starter on both the host's projection and the engine's, which is the Free Agent
Finder's projection for the week being played: the Finder carries a column for the current
week and a separate one for the following week, and on a game day the following week's
column is never the number read, while on waiver eve that same week is the next week skill
section 8's waiver-eve bullet already names for streamers.
Both numbers higher: the swap is the call, its cost read from the host's own row
(skill section 8...
1.42.0
A game-day lineup pass read one dated web page, called three players unresolved that the
host's roster rows and the engine's own tools had cleared a day earlier, and then let one
engine number, the composite value, outvote the host's projection, the host's start rates,
the engine's own raw projection, the posture rule and the fact that the alternative kept the
slot unlocked for two more days. Both halves of that were a missing procedure, so the
procedure is now written down. Every game-day pass, every practice-report day, lock
morning, and any time the user asks about a lineup or a player's
status, reads four sources in one fixed order for every league, and the answer names what it
read: the engine first, its Team Dashboard re-synced, with the suggested lineup, the
Suggested Moves box and the Injury Tracker's practice participation by day, then its news
feed filtered to the rostered players with every timestamp, and the Injury Predictor and Who
Should I Start for any call inside a close band; the host second, each roster row's status
tag and kickoff, the host's projections and player notes, its game-day decision view where it
exists with the projected maximum and minimum, the start rate and the sharp-user start rate,
and the matchup's two projected totals for the posture; the knowledgebase third, the
availability list, the successor rows for anyone in doubt and the week's schedule; and dated
web news LAST, only for what none of the three has posted yet, every item carrying its date
and an undated or stale item dropped. Four rules hold it together. One source is never a
pass. A status is never called from an article when the host's row or the engine's tracker
shows it, because those two are the current truth and an article can only add what they have
not posted. The answer says in one line which sources it reached and which it could not. And
one engine number never outvotes the rest: inside a close band the call is made by the raw
projection, the host's projection and start rates, the posture rule and the lock order's
optionality together, with the disagreement said out loud, because the composite is one data
point and not the tie-breaker.
Added
skills/fantasy-copilot/references/lineups.mdgains a "## The game-day pass" section,
placed immediately before "## The week". It names when a pass is due, the four sources in
the order they are read, the engine first (the re-synced Team Dashboard, its suggested
lineup, its Suggested Moves box, its Injury Tracker with practice participation by day and
likelihood of playing, the day's practice report beside it, the news feed filtered to the
rostered players with every timestamp, and the Injury Predictor and Who Should I Start for
a close call), the host second (each roster row's status tag and kickoff, the host's
projections, its player notes, its game-day decision view with the projected maximum and
minimum, the start rate and the sharp-user start rate, and the matchup's two projected
totals for the posture), the knowledgebase third (the availability list, the successor rows
for anyone in doubt, the week's schedule table), and dated web news last (only what none of
the three has posted, every item with its date, undated or stale items dropped). Then the
four rules: one source is never a pass; a status is never called from an article when the
host's roster row or the engine's tracker shows it; the answer says in one line which
sources it reached and which it could not; and one engine number never outvotes the rest,
so when the composite value favors one player for a slot and the raw projection or the
host's projection favors the other, the raw projection, the host's projection and start
rates, the posture rule and the lock order's optionality decide together and the
disagreement is said out loud.- A row in the same file's "## Common mistakes": calling a player's status from an article
when the host's roster row or the engine's tracker already shows it, and letting one engine
number outvote the host's tool, the posture and the lock order.
Changed
references/lineups.md's opening line. The page is read on EVERY practice-report day and
whenever the user asks about a player's status, not only on the first practice-report day
and lock morning, and it now names the game-day pass among what the page holds.- The same file's "## The week" table, first row. What it reads is now "the game-day pass
(above), then" only what the pass does not already cover: each dashboard player's floor,
projection, ceiling and 3D scored to the synced league, the host's own projections and
lineup suggestions as data points under section 5's settings test, and the matchup rating
per player. The re-sync, the status tags, the kickoff windows, the availability list, the
successor rows and the practice report are read by the pass, so the row no longer repeats
them. - Section 8's "Practice-report days" and "Lineup lock morning" bullets are merged into one
bullet, "Practice-report days and lock morning", that points every read at the pass in
references/lineups.md: every source in its order, named in the answer, one source never
a pass, a status never called from an article when the host's roster row or the engine's
tracker shows it, one engine number never outvoting the raw projection, the host's
projection and start rates, the posture and the lock order together, and a starter going
down still meaning an immediate handcuff run before league-mates react. The lock-morning
rules are kept whole in the same bullet: the knowledgebase refresh, the availability list
first, Who Should I Start for the last flex call scored to the synced league, floor when
favored and ceiling when underdog, every swap decided and said before the first window
locks, the pivot into the vacated slot, another position into a fixed slot only through the
chain, the inactives about ninety minutes before each kickoff as the last read, and the
host page re-read before any lineup is called set. - Every other section 8 bullet is reworded and re-wrapped to pay for the merged bullet inside
the 500-line body: the free-claim bullet, waiver eve, transaction watch, the date rule, the
replaceability test, post-waivers, trade offers, the bye-week stretch, the IR stash bullet
and high-stakes calls. Phrasing only. No rule, exception, condition, threshold or number is
removed, weakened or added in any of them, and the transaction watch bullet keeps the
waiver-period sentence exactly as 1.40.0 wrote it. .claude-plugin/plugin.jsonversion.
v1.41.0
The skill knew how to choose a starter and nothing about when the roster stops being able
to change one. Every rostered player, starter or bench, locks in place at the scheduled
kickoff of his OWN game, and inactive lists come out about ninety minutes before each
kickoff, so a questionable player in a late window resolves after the earlier windows have
already locked. That makes the arrangement of the starters across the slots a free decision
the copilot was not making: the projected total is the same whichever eligible slot a starter
occupies, but the flex is the only slot a body of any eligible position can enter, and a
body enters it only while it is unlocked. One ordered rule now arranges the week. The flex
is filled from the position whose starters outnumber its fixed slots. When one of that
position's starters is questionable, he sits in the flex and the healthy ones in the fixed
slots, so a scratch is one move, any bench body of any flex-eligible position kicking off in
his window or later into the flex, with no dependence on a healthy starter still being
unlocked; that claim outranks the latest-kickoff rule and the earliest-game rule, and when
two of them are questionable the flex goes to the one with the later kickoff, since his news
lands last. Otherwise the flex holds the healthy one with the latest kickoff, and the week's
earliest game never sits there. A questionable starter in a fixed slot is covered only by a
bench body at his own position kicking off in his window or later, or, while the flex holder
shares his position and is still unlocked when the news lands, by the chain, the flex holder
into the fixed slot and an unlocked bench body into the flex; a starter neither covers takes
the no-cover call, made before the EARLIER of his own kickoff and the safe alternative's
kickoff, the free-agent pool checked first, because deferring past that lock chooses the
questionable starter with no pivot. Every pivot is named with the window it is good until,
the earlier of the pivot body's kickoff and the kickoff of the player leaving the slot,
and a body named for two risks is said as such. The week is written down too, from the first
practice report to the last inactive list, in a new reference the two weekly bullets point
at.
Added
skills/fantasy-copilot/references/lineups.md. What locks and when, as a table: a starter
whose game has kicked off cannot be benched, moved or dropped for the rest of the week; a
bench player whose game has started is never a substitute, though he is still droppable
where the host's setting for locking benched players is off; a free agent whose game has
not started is a free add, and one whose game has started is a claim until the weekly run
on a host whose weekly-waiver setting places players on waivers at kickoff. Both settings
are read once per league into the private document. Then the ordered flex rule in three
numbered clauses, the same sentences section 8 carries, read in order, with the kickoff
window an input to it and never a rule of its own, and why the first clause comes first: a
questionable starter at a position with no surplus stays in his fixed slot, since in the
flex he would leave that slot with nobody eligible to fill it, and the chain, run for the
earlier of two questionable starters at the surplus position, spends the later one's pivot.
The arrangement worked on three shapes, each table stating every slot, every player's
position and window, and every starter's pivot with the kickoff it is good until: a surplus
position with one questionable starter in the late-afternoon window, the healthy one in the
last game, where the questionable one takes the flex and a bench body of a third position
is his one-move pivot, good until his own late-afternoon kickoff; a questionable starter in
the week's earliest game at a position with no surplus and no same-position bench body,
where clause 3 finds no cover and the no-cover call is made before the earliest game locks,
the pool checked first; and the chain, a surplus position's fixed-slot starter scratched
with no earlier flag while the flex holder is still unlocked, covered in two moves good
until the scratched starter's own kickoff, with the reason clause 1 redoes that arrangement
the moment a flag lands while both are unlocked. Bench coverage by window (a pivot counts
only if his game kicks off no earlier than the moment the news arrives; a bench body in the
last game of the week is insurance for every earlier slot; the free-agent pool is a pivot
source until each pool player's own kickoff and is checked before any starter takes the
no-cover call; a bench body named as the pivot for two risks is said as such, since he
covers whichever is ruled out first); the no-cover deadline; the week as a table of what is
read on each day and what comes out of it, with the host's own projections and lineup
suggestions gated by section 5's settings test, its start and roster rates reading the
room, not the player, and surviving that test as section 4 says, and the day's inactives
and injury tags read off the host's roster page; and the common mistakes: starting on
reputation instead of projection and usage, overreacting to one week, ignoring the game
script, starting a questionable player with no pre-decided pivot, overweighting weather, a
healthy early-week starter parked in the flex, and comparing more than three players for
one slot.
Changed
- Section 8's Post-waivers bullet carries the same ordered rule, clause for clause in the
same sentences, the two-risk naming rule and the same no-cover deadline. The league is
re-synced in the engine before the Team Dashboard is read, since a stale sync has been seen
omitting the newest adds and drops; the host's own team page prints each player's kickoff
and every player locks in place at his own; a bench player whose game has started is
nobody's substitute. The bullet points at the new reference, as the lock-morning bullet now
does. - Section 8's Lineup lock morning bullet: every swap is decided and said before the first
window locks, the pivot takes the VACATED slot and a body of another position covers a
fixed slot only through the chain, the inactives about ninety minutes before each kickoff
are the last read, and the host page is re-read before any lineup is called set. The bare
"inactives check" it replaces said neither when to read them nor what to have ready. - Prime directive 1 now reads "never touch a control on the host's pages that makes or
proposes a pick or a roster change: accept, reject and counter included; a filter, selector
or view that only changes what a page shows is a read." It named picks and roster moves
only, which covered no trade control at all, since a reject and a counter move no roster;
written wider it would have forbidden the all-teams selector and the filters the
transaction watch runs on (references/transaction-watch.md). The trade bullet ends "The
user decides." - Section 7's room-trends line carries the posture that was section 2's: "read them, never
follow them; exploit them, never chase them; play to beat the room, never keep pace with
it." It sits where the room is actually read; section 2 keeps the voice. - Section 6's step 6 says the USER submits the Personalized Advice questions, matching
section 8's high-stakes bullet, which now reads "draft a Personalized Advice question for
the user to send". - The frontmatter description is unchanged: it already opens on ANY fantasy football work and
names start/sit decisions, so a "set my lineup" request fires the skill without an edit. - Paid for inside the 500-line body, which ends where it began, at exactly 500. No rule,
exception, condition or number was removed; what went was restatement, pointers to rules
stated in full elsewhere, and illustrations of rules the same sentence defines. Section 3
drops "Starter bye protection is a disclosure default, not a veto", which is what section
7's bye check does in full (say the stack, name the best non-stacking candidate, give the
top row when every candidate stacks, and the user decides), and "Treat analyst advice and
pre-draft plans as priors to update, never as directives to execute", which is its own
paragraph's lead (every input is a data point, none is gospel; no single signal outweighs
another by default). Section 4 drops the one-line Personalized Advice bullet, whose two
halves are now the tier gate in the Subscription tier section, step 6 and the high-stakes
bullet; its host-subscription paragraph keeps the snapshot caveat in fewer words. Section
5's reload bullet keeps the rule (the live pick ticker and roster panel are trusted over
the rankings list) and drops the reason clause, whichreferences/field-behaviors.md
holds. Section 6's step 0 is shortened to the same two confirmations; its step 9 merges the
refresh-first sub-bullet into the recency sub-bullet, every clause kept (refresh first,
sweep only what is newer than that refresh, inside the last seven to ten days); and its
step 10 goes, its two triggers folded into section 8's IR bullet, which already carried the
cadence and now reads "on demand any week, on waiver eve, right after each draft to name
the candidates, and again when the undrafted pool clears". Section 7's snipe paragraph
drops "A public room drafts straight off that list, so its next names weigh as one input,
never a directive" (the data-point rule is section 3's, the observation is in the
field-behaviors reference, and the paragraph still says the forecast is not a promise) and
the sample wording of the one-line call, the one-line rule itself unchanged; its bye check
keeps "the plan's bye map is the input" and drops "not a substitute", which the same
paragraph enforces by requiring the check at every starter-slot name; its bench-round read
drops...
v1.40.0
The report's clear date was a day early, and the host's own label was being read as a day
late. A host's waiver period does not start when the player is dropped: it starts the
following calendar day in the host's time zone, runs the league's waiver days, and the host's
overnight processing run the MORNING AFTER it ends is what makes him a free agent or hands
him to the winning claim. With two waiver days that is the drop date plus three, whatever the
clock time of the drop, and it is the date the host prints on a waived player's status label
and in the pending block of the user's team page. The script printed the drop date plus the
waiver days and called it the clear date, which is the LAST waiver day, one day before anyone
can have him, so the copilot advised acting a day early and read the host's label as meaning
a day later than it did. Dates worked out in prose were wrong too, a weekday misnamed and a
date off by one. Now every date the report prints carries its weekday, the dropped section
says arrives <Wkd date>, and the script answers a waiver window on its own from one date.
Changed
scripts/transactions.pyprints every date as its weekday and ISO date,Sat YYYY-MM-DD:
the dropped section's drop date, its "since added by ... on" date and its arrival date, the
managers table's last-move column, the added-in-two-leagues entries and the Yours table's
date column. The columns, the section names and everything else printed are unchanged.- The script gains a one-date mode,
--drop YYYY-MM-DD --days N, that reads no files and
prints four lines:today,dropped,on waivers <first> through <last>(on waivers: nonewhen the days are 0) andarrives <date> at the host's overnight run.--daysis a
whole number 0 to 7 and is required with--drop;--diris not needed,--sinceand
--leagueare refused with a message saying they belong to the report, and--daysis
refused without--drop. A date that is not real stops the run, as bad input does
everywhere else in the script. - Section 8's transaction watch bullet: the report's arrival date follows the host's rule
(the period starts the day after the drop, runs the league's waiver days, and he arrives at
the run the morning after it ends), and his row on the host is re-read before a claim is
filed. It no longer says the date is arithmetic that the host's row overrides, which read as
permission to guess the real one. - Section 8 gains a date rule: every date the copilot says carries its weekday and comes from
the script's--dropmode or from the host's row, never from arithmetic in prose. The
host's status label on a waived player IS the day he arrives, and the team page's pending
block carries the same date for a filed claim. Where the host's weekly-waiver setting puts
unclaimed players on waivers at their game's kickoff, a free agent whose game has started is
a claim until that weekly run, not an add, and which setting the league runs is read once
from its settings page into the private document. - "Clear date" is now "arrival date" in section 8's replaceability test and IR stash bullet:
one name for the one date, the day the player can actually be had. references/transaction-watch.mddocuments the arrival date and the host rule behind it,
the weekday format every date is printed in, and the--dropmode with what it refuses.- Paid for inside the 500-line body by cutting restatement and illustration only, with no
rule, exception, condition or number removed. Section 6's step 4 drops the reason clause
"those rooms draft off the news feed, and ADP lags the feed by days" into a shorter form of
the same sentence, and drops "so a stack with an earlier pick is visible before the clock,
not discovered after", the reason for a bye map the sentence still requires and section 7's
bye check still calls the input. Step 9's two sub-bullets on fresh-versus-priced are merged
into one, every clause kept: tag it, cross-check it against the engine's value before it
earns the label, actionable only if the value has not caught up, say "already priced" not
"riser." That step also drops "never as a replacement for the paid engine" and "Ignore old
news as an edge", both stated by their own bullets (the engine is PRIMARY and web news the
supplement; older news is already in the number and the room's ADP). Section 7's dart
paragraph drops "and the grade cost is said (the grade-cost rule below)", which the
grade-cost paragraph states for any pick over the top live row. Section 8's free-claim
bullet merges "in preference order" with "Order by value" into one clause and drops "the
user files them" (prime directive 1: the user clicks every roster move) and "Never in a
FAAB league, where every claim spends budget", which is the bullet's own opening condition,
a rolling priority list with no FAAB. Its trade bullet drops one "scored to the synced
league" (section 5's settings test) and its bye-week bullet drops "buying the player the
room undervalues and selling the one it is chasing", which is what trading into their
overreactions is, and what section 7's room-trends paragraph says of value the room leaves.
The replaceability test drops its two examples of a replaceable position, a class the same
sentence defines and the knowledgebase rows at the end of the bullet name. The IR bullet
drops "where the setting is off, that add needs an open bench slot first", stated three
sentences earlier in the same bullet, and "At the draft section 7's board test and dart
forecast decide the order", which is section 7's IR paragraph in full. Section 10 drops the
restatement of name-first and the two-line limit on a live clock, keeping the pointer to
section 7, which is where both live. Several paragraphs were rewrapped; no heading, bullet
or numbered item was added, removed or reordered except the one new bullet in section 8
and step 9's two sub-bullets merged into one.
Fixed
- The dropped section's estimated date was the drop date plus the league's waiver days,
labelled "clears". That is the last waiver day, one day BEFORE the player can be had. It is
now the drop date plus the waiver days plus one, labelledarrives, and the script's
docstring states the rule it comes from: the period starts the day after the drop in the
host's time zone, runs the league's waiver days, and the host's overnight run the morning
after it ends delivers the player. Every undrafted player follows the same rule where the
post-draft setting sends undrafted players to waivers, so the pool clears on that date too. - Dates the copilot worked out in its head, and said without a weekday, have been wrong in
both directions. Every date now comes from the script or the host's row and carries the
weekday that proves it.
1.39.0
One rule the copilot had in the file and did not run, and one it did not have, both on a live
clock. A turn is two picks with a long gap behind the second one, and the pair has to be
planned against that gap: taking the engine's top row at the first pick spent it on a need that
survives the gap, while two starting slots whose tiers were ending did not get filled and one
of them was gone two picks later. And the tie-break layer lists age and depth-chart role but
not the injury flag the engine puts on the row, and it said when to SAY the tie-break without
ever saying when to RUN it. Both are now written as what the copilot does. The wait cadence
gains its missing number and the shape of the message at the clock: inside two picks it is one
ten-second wait per read, and the clock confirmation goes out first, off a read taken the
moment the host shows the clock live, with the name bold and alone on the first line.
Changed
- Section 7's tie-break paragraph adds the injury flag the engine shows on the row to the
judgment layer's inputs, beside age and depth-chart role, and fixes when the layer runs:
inside the band it is RUN before the name is said, never after. A flagged player in his
thirties is never named by default over a clean candidate inside the band; the layer
decides between them and the second line says why whenever the name is not the top row. - Section 7 gains a turn-pair rule, its own paragraph after the tie-break. Two of the user's
picks with up to two opponent picks between them are planned as a pair against the gap
behind the second pick, not row by row: the starting needs whose tier ends inside that gap
fill the pair, ordered by the snipe-first forecast (the one least likely to reach the
second pick goes first), and the top row at the first pick is taken only when the pair
holds no need, or one need that reaches the second pick by that forecast. Filling the first
pick this way comes before the research-target rule and the tie-break; when the pair rule
leaves the top row standing, both run as usual. - Section 5's wait-batch bullet fixes the length inside two picks at ONE ten-second wait per
read, and states the message at the clock: the confirmation is the first text sent, off a
read taken the moment the host shows the user's clock live, the name bold and alone on the
first line. It points at section 7 for name-first instead of restating it. - Paid for inside the 500-line body by cutting restatement only, with no rule, exception,
condition, cross-reference or number removed. The requirements' browser bullet drops the
positive half of a conditional ("real-time recommendations exist only if Claude can SEE the
draft room and the DS panel"), which the sentence after it states in the negative. Section
2's posture line drops the two clauses restating section 7's snipe-first and research-target
rules, keeping the posture and the pointer. Section 3's bye paragraph drops "a value that
already includes the bye is not a warning the user has heard", which restates "3D folds
byes into its number silently" in the same sentence. Section 6's injury sweep drops "five
rules, because skipping them dresses correctly-priced players as edges", which its own last
sub-bullet states as a rule. Section 7's opening drops "and the name is said as the plan's,
not the engine's", which is what the DS-lags rule it cites in the same clause says. Section
7's room-trends paragraph drops "at the clock the call is still one name" (its section's
opening: one name per call) and "changing the plan takes the discussion" (the same
paragraph, two sentences earlier: never changes the plan silently, the user decides before
the clock). Section 7's research-target paragraph drops "once he is gone no later pick
replaces him", which taking him at THIS pick instead of betting he survives to the next
already implies. Section 7's sweep-name paragraph drops "a reversal at the clock produces a
pick nobody chose", the consequence its own heading states. Section 7's dart paragraph
drops the sentence repeating the IR paragraph above it, now a pointer to it, and
"contention on kickers and defenses is low", which the pool-count sentence after it states
as a number. Section 7's room-trends paragraph also drops its three examples of value left
on the board, and the grade-cost paragraph drops its four examples of a pick over the top
row (the list 1.13.0 extended with the stash and the dart): "any pick over the top live
row" covers all of them. Section 7's opening drops "a name given early gets sniped into a
scramble", one of three reasons for a rule the sentence still states, and the tie-break
paragraph drops "and not after the user asks", which "before the clock" already says, and
the bench-rounds paragraph drops "a floor-only bench buys no ceiling", the reason for a rule
the sentence still states.
Several paragraphs were rewrapped; apart from the new paragraph and its blank line, no
heading, bullet or numbered item was added, removed or reordered.
v1.38.0
The host setting that 1.37.0 made the condition of the dart rule does not govern the
move the rule depends on. "Allow injured players from waivers or free agents to be added
directly to injury slot" governs POOL PICKUPS only: with it on, a tagged player goes from
the pool into an IR slot on a full bench; with it off, that add needs an open bench slot
first and then the move. It never governs a player already on the roster, who can be moved
from bench to IR in every league. So a drafted stash frees its bench slot after the draft
everywhere, and the dart rule applies in every league, not only on a direct-to-IR host.
Fixed
- Section 7's injured-reserve paragraph no longer opens on the host setting. The
designation costs no bench slot because a rostered player carrying it moves to the IR
slot after the draft, which every host with an IR slot allows; the add-directly-to-IR
setting governs pool adds, not this. - Section 7's dart paragraph loses the same opening condition. The user moves the stash to
IR after the draft in every league, so the last kicker or defense pick is a dart in every
league. As written, 1.37.0 excluded the leagues the rule applies to. - Section 8's IR-stash bullet is rebuilt on the real distinction, drafted versus pool. A
drafted stash costs the pick alone, since the bench slot comes back at the IR move. A pool
stash costs a bench player only where the setting is off, where the add needs an open
bench slot first and the move follows; with the setting on it goes straight to IR on a
full bench. "An open IR slot is filled, never held" is now host-independent, with the
open-bench-slot precondition stated for the pool case. The burn-the-claim test is
unchanged. references/ir-stash.mdgains a "What the host setting governs" section stating the
mechanism in full once: the setting's own wording, that it governs pool pickups only,
what changes when it is off, and that it never governs a rostered player. The value test,
the filled-never-held section and the settings-to-record list are corrected to match.
Changed
- The dart rule gains its timing: the skipped position is added at the clear, never on a
claim while the user's priority has value. Contention on kickers and defenses is low, and
a claim that costs priority buys nothing the clear does not. Scoped to section 8's
free-claim bullet as well as its burn-the-claim test, since a claim from last priority
costs nothing and the post-draft state after drafting from the first slot is exactly
that. - Paid for inside the 500-line body by cutting restatement, no rule removed or weakened:
section 8's transaction-watch bullet also shortens "whose reading of the host's own row
governs the real cost and clear date" to a pointer, since the replaceability bullet below
it states that the cost and the clear date are read from the host's own row;
section 3's bye paragraph drops the clause restating section 7's bye check and a pointer
to the paragraph directly below it; section 4's host-subscription paragraph drops the
settings-panel test section 5's first bullet states in full and the half of its snapshot
sentence the tier-gates paragraph it cites already carries; section 6's import audit drops
a restatement of section 4's Adjust Projections rule and the live-editor-wins half of its
snapshot sentence; section 6's post-draft IR sweep drops the clear-date instruction
section 8's own bullet ends on; section 7's dart paragraph drops "the risk is the room's,
not the position's", which the pool-count sentence after it states as a number; section
8's IR-stash bullet drops a sentence restating section 7's board test, keeping the
pointer; section 10's opening drops a sentence saying the knowledgebase is read beside
the engine, which the same section states twice more and section 8's trade bullet a third
time. Six paragraphs were rewrapped to the file's wrap width, and the section 7 and
section 8 paragraphs that changed.
Why: 1.37.0 read the host's help text for the pool-pickup case and wrote it in as the
condition for the roster-move case. They are different mechanisms. The roster move has no
setting behind it at all, so the rule that turns a drafted stash into a free roster spot,
and the last kicker or defense pick into a dart, holds in every league with an IR slot. A
condition that excludes the leagues a rule applies to is worse than no condition: it reads
as a check the copilot must pass, and it fails it in rooms where the play is available.
v1.37.0
A drafted IR stash does not really cost a bench body for the season. On a host that
allows an injured player straight to the IR slot, the user moves the stash to IR after the
draft, its bench slot empties, and the roster goes one body short of full at that move.
That empty slot is filled for free when the undrafted pool clears, so the last kicker or
defense pick is better spent on a bench dart: skip one position per drafted stash, take the
position the pool holds fewer of, and add the skipped one free at the clear.
Changed
- Section 7 gains a paragraph after the injured-reserve one, since it is the same fact read
forward: where the designation costs no bench slot, the roster the draft ends with is one
body light, and the pool fills that slot at the clear. So one position is skipped and the
pick becomes a bench dart. One position per drafted stash, never more, since each further
add would need a drop. - Which position is skipped is decided, not left open. Take the one the pool holds fewer of,
and add the skipped one free when the undrafted players clear. - The risk is stated as a number the copilot can compute in any room, not as a rule of thumb
about kickers and defenses: thirty-two minus the number of teams, less one for every roster
that drafts a second at the position. Ten teams leaves 22 of each in the pool, at positions
half the room streams anyway, so the move is near free; a bigger room, or one that doubles
up at the position, is a different number, and the copilot says the number rather than the
slogan. The user decides, and the grade cost is named under section 7's existing grade-cost
rule. - Section 8's IR-stash bullet is reconciled with it: the value test still applies when the
stash costs a bench player, but on a direct-to-IR host a draft pick costs the pick, not a
season-long bench body. - Paid for inside the 500-line body by cutting restatements, no rule removed: section 2's
posture paragraph drops the sentence restating section 7's snipe forecast; section 3's bye
paragraph drops the superflex example and the slot-by-slot list that section 7's bye check
states in full, keeping the disclosure-not-veto rule and pointing at it; section 4's
Personalized Advice bullet drops the never-a-directive clause that section 3 already
carries, and its host-subscription paragraph drops two clauses its own opening sentence and
section 5 already state; section 6's import audit shortens the snapshot sentence stated
twice above it and drops a pointer to a reference section 4 already routes to for this
exact task, its sweep drops a sentence the recency-window bullet above it already says, and
its post-draft IR sweep drops a clause restating section 8's filled-never-held rule;
section 7's tie-break paragraph drops a restatement of the one-name rule and its
sweep-names paragraph drops a rationale clause its own opening paragraph states as a rule;
section 8's transaction watch drops a two-lines-per-name pointer belonging to section 10;
section 10's opening drops a pointer sentence after the rule it points at, and its refresh
rule drops the list of decisions that "every decision" already covers. Twelve paragraphs were rewrapped to
the file's wrap width, the nine cut paragraphs and three with no word changed.
Why: the copilot priced a drafted stash as if it took a bench body all season, and on a
direct-to-IR host it does not. It takes the pick and then gives the slot back, which means
every draft on such a host ends with a free roster spot the user has already paid for and a
last pick spent on the most replaceable position on the board. The fix is not "skip the
kicker": it is to compute the room's own pool count first, skip only one position per stash,
and say what the empty slot costs on the grade before the user decides.
v1.36.0
Where a league's waiver priority is a rolling list rather than a budget, the team
holding LAST priority pays nothing for a claim: a win leaves it last, which is where it
already was, and a loss changes nothing. So while the user holds last priority every
claim on an upgrade is free, and the play is a claim on every player in the pool who
would improve the roster, not a claim on the single best one.
Changed
- Section 8 gains a "Last priority makes every claim free" bullet, placed ahead of waiver
eve because it governs every claim and not only stashes. Where a successful claim sends
the claimant to the back of a rolling priority list and no budget is spent, the team
holding last priority pays nothing: a win leaves it where it already was and a loss
changes nothing. While the user holds it, the play is a claim on every pool player who
would improve the roster, in preference order, a drop named for each where the roster is
full, and the user files them. - The same bullet carries the two guards that keep the rule honest. The priority rank is
read from the host's own team page and never inferred from the draft slot, because other
teams' claims move it. A claim on a player who would clear to free agency unclaimed
costs the same nothing but gains nothing either, so the list is ordered by value and the
drops named are the roster's true last bodies; who earns a bench slot stays the
replaceability and IR-stash tests' call, and this rule settles only the cost. The window
opens after a draft from the first slot, initial priority being inverse draft order, and
after every claim the user wins; it closes when a team above the user wins one and the
user's priority regains value. It never applies in a budget league, where every claim
spends. - The burn-the-claim test in section 8's IR-stash bullet now states that it governs only
while the user's priority has value, and points at the new bullet. - Paid for inside the 500-line body by cutting restatements, no rule removed: section 4's
host-subscription paragraph drops a clause naming the two rules that already claim the
sharp ADP for themselves and compresses a sentence that restated its own opening;
section 5's reload bullet drops a verification sentence section 7 states in full while
citing section 5; section 6's import audit drops the inverse restatement of its own
first half, and its sweep step drops a partial file list that section 10 requires in
full for every name; section 7's snipe forecast drops a repeat of the inputs named one
sentence earlier and keeps its never-a-directive guard, and its research-target rule drops
a restatement of section 4's reading of the odds column; section 8's waiver-eve bullet
drops "said beside the engine's projection, never instead of it", a standing rule of
section 10, its transaction-watch bullet drops a sentence describing report output the
cited reference documents, and its IR-stash bullet drops a restatement of its own bolded
"filled, never held"; section 10's opening drops a sentence of scene-setting and
shortens the never-collected parenthetical to the pointer at the reference that holds
that list. Three paragraphs in section 10 were reflowed to the file's wrap width with no
words changed.
Why: the copilot had one cost model for a claim, the burn-the-claim test, and it assumed
priority was worth something. In a rolling-list league the team at the bottom is the one
case where it is not, and treating a free claim as if it cost something leaves upgrades on
the wire for nothing gained. The window is narrow and it closes without announcement, so
the rule carries its own end condition and reads the rank from the host rather than
assuming it from where the user drafted.