Skip to content

Releases: nmiller0113/fantasy-copilot

1.45.0

Choose a tag to compare

@nmiller0113 nmiller0113 released this 24 Sep 07:11

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

Choose a tag to compare

@nmiller0113 nmiller0113 released this 23 Sep 08:29

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.md gains "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.md gains "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

Choose a tag to compare

@nmiller0113 nmiller0113 released this 20 Sep 22:27

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.md gains 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...
Read more

1.42.0

Choose a tag to compare

@nmiller0113 nmiller0113 released this 11 Sep 00:56

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.md gains 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.json version.

v1.41.0

Choose a tag to compare

@nmiller0113 nmiller0113 released this 09 Sep 19:14

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, which references/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...
Read more

v1.40.0

Choose a tag to compare

@nmiller0113 nmiller0113 released this 09 Sep 17:56

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.py prints 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: none when the days are 0) and arrives <date> at the host's overnight run. --days is a
    whole number 0 to 7 and is required with --drop; --dir is not needed, --since and
    --league are refused with a message saying they belong to the report, and --days is
    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 --drop mode 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.md documents the arrival date and the host rule behind it,
    the weekday format every date is printed in, and the --drop mode 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, labelled arrives, 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

Choose a tag to compare

@nmiller0113 nmiller0113 released this 09 Sep 04:05

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

Choose a tag to compare

@nmiller0113 nmiller0113 released this 09 Sep 00:33

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.md gains 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

Choose a tag to compare

@nmiller0113 nmiller0113 released this 08 Sep 23:24

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

Choose a tag to compare

@nmiller0113 nmiller0113 released this 08 Sep 07:16

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.