What’s New in tsh

A chronological list of changes to tsh.

Updated 2018-05-03T19:00:00+00 for tsh 3.340.

Changes are made to tsh for just about every tournament at which it is used. This means two things: firstly, you should be sure to update to the most recent version before your tournament; and secondly, if there’s a feature that you’d like added please be sure to mention it, preferably with about a month’s lead time.

VersionEventChanges
3.340Development
  • Added new “config pname_from_sbname = 1” configuration option for having pname default to sbname (Vince Castellano).
  • Added new “config wallchart_refresh = 1” configuration option for browser refresh of wallcharts (Vince Castellano).
  • Enhanced scoreboard pairing mode display fixes (Vince Castellano).
  • Enhanced scoreboard German localisation (Alex Gast).
  • Web updates a little more tolerant of proxies (Vince Castellano).
  • The “ROTO” command generates JSON output. (Ryan Fischer)
  • The “EnhancedScoreBoard” supports banners again.
  • The “UPDATERATINGS” command’s knows about Pakistan ratings (Wali Muhammad Bhaila).
  • The “USERATINGS” command zeroes unrated players (Wali Muhammad Bhaila).
  • config rating_page_break = 40 ” specifies the number of players to show on each page of a rating report (Shelley Ubeika).
  • The new “ReMovePlayer” command removes a player from a tournament (John Chew).
  • Photo database index file encoding matches “config tfile_encoding” if set, else isolatin1 as before (Taral Seierstad).
  • The “ROSTERS” command is internationalised (Taral Seierstad).
  • The “CheckRoundScores” command is internationalised (Taral Seierstad).
  • The “showRankedWallChart” command is internationalised (Taral Seierstad).
  • config realm = 'absp'” now sets data entry mdoe to
  • 'both'
  • per ABSP request (Steve Perry).
  • The “config max_score = 9999” specifies maximum score value that may be entered (Kent).
  • config realm = 'absp'” now specifies a default bye_spread of 100 per WESPA Rules Version 3 (Jessica Pratesi).
  • The “PRiZes” command correctly reports details of a lowroundwin (Josh Greenway).
  • The “SUBMIT” command can send data to the ABSP (Rachel Bingham).
  • The “SUBMIT” command ABSP outout is filtered, and a webpage is opened on success (Rachel Bingham).
  • Added “config player_nicknames = "nicknames.txt"” configuration option to provide a persistent means of specifying alternate scoreboard names (Vince Castellano).
  • Added “config suppress_results_in_pairings = 1” configuration option to hide results in Pairings Mode ESB (Vince Castellano).
  • Pairing commands which allow specifying a round as basis will prompt if there are more recent rounds completed than the one indicated (Vince Castellano).
  • The “PairMany” command will not take the order of entry as the order of play even if firsts are being assigned (Vince Castellano).
  • The “PairMany12” command provides the old semantics of PairMany with respect to the assignment of firsts and seconds (Vince Castellano).
  • Added “config overseed_tiebroken_by_spread = 1” configuration option to indicate ties for the overseed prize should be broken by spread in preference to initial ranking (Vince Castellano).
  • Added “config pairing_bars = 1” configuration option to enable an experimental facility for graphically illustrating pairings in console output (Vince Castellano).
  • Added “config standings_hotlink_target = "format-string"” configuration option to customize the target of the hyperlink behind player names in HTML standings (Vince Castellano).
  • Try to purge all reports which are invalidated by the deletion of data (Vince Castellano).
  • Added “config prize_bands_from_prizes = 1” configuration option to indicate that the prize_bands config parameter is to be inferred from the number of rank prizes designated for each division (Vince Castellano).
  • Added “config account_for_h2h_sr = 1” configuration option to indicate that players' head-to-head record of firsts and seconds is to be taken into account when assigning firsts (Vince Castellano).
  • util/aupair-to-t” works with multi-division events (Wali Muhammad).
  • German scoreboard terminology bug fixes (Alex Gast).
  • Scoreboard message bouncing bug fixed (John Chew).
  • The “Addscore” command will use pairing information to disambiguate partially named plaeyrs (John Chew)
  • The new “ADdPlayer” command adds a player to a tournament (John Chew).
  • The new “MoVePlayer” command renumbers a player and/or moves them to another division (John Chew).
  • The “LowerRoundRobins” command pairs 2N players for N rounds as two groups, not one (Ross Mackenzie).
  • Internationalization changes affecting mainly Polish users (Adam Klimont).
  • Auto-pairing is never interrupted by prompts. (David Wilson)
  • Added “config ignore_stale_source_round = 1” configuration option to suppress recently added code prompting directors when pairing based on stale source rounds (David Wilson).
  • PairQuartiles” pairing command works better when some players have been manually paired (John Chew).
  • The “PRiZes” command permits a player to belong to multiple classes (e.g., B,Senior) (John Chew).
  • config allow_gaps = 1” support improved (Steve Perry).
  • PRiZes” command supports round ranges for highroundloss (John Chew).
  • LowerRoundRobins” command supports “config random_rr_order = 1” (Ross Mackenzie).
  • Enhanced scoreboard settings pane closes when escape key pressed (John Chew).
  • Enhanced scoreboard shows number of scores entered so far (Dan Stock).
  • PRiZes” command calculation of upsets supports exclusive tag (Josh Greenway).
  • The “SUBMIT” command ABSP target host name updated (Rachel Bingham).
  • The “SUBMIT” command ABSP target host name updated more (Jessica Pratesi).
  • config gibson_spread = [250,175,150]” configuration option default value changed to [500].
  • Added “config swiss_ignores_repeats = 1” configuration option to make Swiss pairing code ignore repeats - actually added a while back.
  • Added “config swiss_ignores_firsts = 1” configuration option to make Swiss pairing code ignore firsts and seconds (Wolfram Poh).
  • Addscore” command heavily rewritten to eliminate rare bugs (John Chew)
  • PRiZes” command calculation of upsets supports first and last round specifiers (Josh Greenway).
  • PRiZes” command code refactored for consistent support of round, first and last options across high/low win/loss (Josh Greenway).
  • ROSTERS” command now warns user if there are no players, or no active players (Calum Edwards).
  • config interleave_rr = 2” (or greater) specifies a number of times round-robin opponents will face each other before moving on to the next opponent. “RR 3” in this case would mean everyone plays each opponent twice in turn, then repeats the same round robin two more times for a total of three (Kieran O'Connor).
  • DELETEscore” command does not delete wrong score when asked to delete a final unscored bye (Vince Castellano).
  • config esb_lite = 1” Suppresses last opponent photo, last opp. 1st/2nd, round-by-round W/L and 1/2 history in ESB to economize on screen real estate.(Vince Castellano).
  • A bye is no longer counted as a game played for purposes of determining the ESB pairing mode display's round.(Vince Castellano).
  • PairMany” and “PairMany12” no longer allow pairings to be changed for rounds in which a player being modified has a score.(Vince Castellano).
  • config max_consecutive_repeats = [0,0,1,1,2,3]” specifies the number of times a player may be paired consecutively (back-to-back) with the same opponent in each successive round (Wali Muhammad Bhaila)
  • The “ForfeitLOSS” command now checks to make sure the forfeit winner is still paired with the forfeit loser before adjusting his record (Craig Beevers).
  • The “Addscore” command will correctly diagnose the situation where you correctly identify one player, but give a partial name that does not match their opponent. (Powell Cheruiyot)
  • TeamRoundRobin” command works for 5 teams of 3 players. (Powell Cheruiyot)
  • Better handling for unknown player photos in nonstandard realms (Pramod Pivithuru)
  • config error_colour = 'yellow'” makes errors appear in yellow (Pete Thorpe).
  • config quiet_hooks = 1” runs hooks without displaying command output (John Chew).
  • config addscore_prompt = 'games'” tells “Addscore” with number of games (rather than scores) remaining (Vince Castellano).
  • Update code checks to make sure that downloaded Perl scripts actually look like Perl scripts (rather than say CAPTCHAS) (Jayaska Barange).
  • config sb_banner_url” specifies a banner to display above the enhanced scoreboard (John Chew).
  • config prize_page_break = 12” specifies number of prize rows per page (John Chew).
  • Show12” command understands that divisions can have differing numbers of rounds (John Chew).
  • Documented “config numeric_pairing_display=1” configuration option to sort pairings by player ID rather than name (John Chew).
  • config team_pair_page_break = 12” breaks a page after every 12 teams in team pairings reports (John Chew).
  • config team_pair_first_pagep_break = 10” breaks the first page after the 10th team (presumably to allow for an extra heading) in team pairings reports (John Chew).
  • config team_pair_always_break = 1” always breaks a page after each team in team pairings reports (John Chew).
  • Documented “config tally_slips_page_break=15” configuration option to limit tally slips per page (John Chew).
  • Documented “config tally_slips_blanks=1” configuration option to include an area for blank designation on tally slips (John Chew).
  • Documented “config tally_slips_challenges=1” configuration option to include an area for listing challenged words on tally slips (John Chew).
  • Documented “config tally_slips_no_spread=1” configuration option to suppress the area for entering spread on tally slips (John Chew).
  • config show_roster_photos = 1” configuration option displays player photos in tournament rosters, overriding “config player_photos”.
  • config roster_order = 'team-class'” configuration option added, sorts roster players in order of team, then class.
  • config minimum_prize_team = 3” configuration option added, specifies minimum team size eligibility for team prizes.
  • Added “config bye_method = 'top_down'” configuration option to assign byes downward from the top of the field (Ben Berger, Kieran O'Connor, Vince Castellano).
  • Added “config team_quotas = { 'AUS'=>13, 'AUT'=>2, 'BHR'=>2, 'CAN'=>9 }” configuration option to calculate team standings based on WSC quota formula.
  • Added “config squads = 1” configuration option to calculate team vs. team W/L and spread.
  • Added “pairing_caption_pipe = 'pbcopy'” configuration variable to have the “ShowPairings” command pipe a copy of its output through a designated command.
  • The list of players without photos generated by the “ShowPairings” command will now display table numbers instead of board numbers, if they are available; it will also now include player opponents.
  • The “Addscore” command gives a more helpful error message if you enter a single word that it cannot parse.
  • Created Nigerian photo database and realm (Lukeman Owolabi).
3.3302015 NASSC
  • The “Addscore” command will complain specifically if you enter an invalid player number. (Steve Perry)
  • RANDomscores” will not crash if you specify ratings with leading zeroes (Jack Hoch).
  • The OS/X launcher works even if you manage to deselect it before it runs (Jack Hoch).
  • The “TWEET” command works when there are more rounds paired than scored, does not run if the round is incompletely scored, and gives more data again (Vince Castellano).
  • The “RATings” command works correctly even when only some players have classes (Jack Hoch).
  • ShowPairings” command now generates team pairing reports if “show_teams” configuration option is in effect.
  • Addscore” command division-switching data entry bug introduced in last version corrected.
  • Added new “config fat_tweets = 1” configuration option for Facebook posting (Vince Castellano).
  • Added new “config next_round_style = 'brief'” configuration option for adjusting reporting of next round in rating reports (Vince Castellano).
  • Added new “config player_id_first = 1” configuration option for specifying player ID appearing ahead of name (Vince Castellano).
  • Added new “config scorecards_refresh = 1” configuration option for browser refresh of scorecards (Vince Castellano).
  • Added new “config standings_hotlink = 1” configuration option for linking standing reports to scorecards (Vince Castellano).
  • Added new “config standings_with_ratings = 1” configuration option for displaying ratings even in standing reports (Vince Castellano).
  • RANDomscores” now uses normally distributed scores for Glixo/Elo-rated events.
  • Initial round robins are not generated in default pairings after the first round, nor are they triggered in an unpaired division if you ask for pairings for a round after the first (Roy Kading).
  • config roster_order = 'seed'” configuration option added, sorts roster players in seed order.
  • Added new command “COMMentary” to automatically generate event commentary (John Chew).
  • Added new command “TWeetPairings” to automatically tweet pairings (John Chew).
  • Added new “config alpha_rating_file = 'winter-fruit.txt'”, “config alpha_rating_minimum = 0” and “config alpha_rating_maximum = 2300” configuration option for fruit ratings (Winter).
  • Tinkered with initial round robin/schedule logic. (John Chew)
  • Added new command “MIRROR” to launch mirror-ftp in another window (John Chew).
  • Added new command “ShowNextPairings” to show next pairings after current ones (Vince Castellano).
  • util/mirror-ftp” uses more modern command-line option parsing.
  • Added new “config team_rank_count_cap = 5” configuration option for limiting number of ranks that count toward team standings.
  • Improved “UpdatePLAYers” command’s to set player classes without reload (Jason Broersma)
  • Corrected bug in Glixo rating code that would occasionally cause divide-by-zeroes.
  • Corrected usage of verb "un-pair" to indicate unacceptability in Scrabble lexica (Mauro Pratesi).
  • EnhancedScoreBoard” command substantially rewritten, includes new control panel with several new settings.
  • Added new command “STOPMirror” to stop mirror-ftp (John Chew).
  • Added new “config htm_doctype = ''” configuration option for specifying the HTML doctype of generated reports.
  • Added new “config scoreboard_links= ''” configuration option to enable HTML links between players in scoreboard scorecards.
3.3202013 SCT
  • config interleave_rr = 1” specifies that multiple round robins be interleaved, not paired with players playing each other repeatedly, for directors that like to slow down their schedule (Ryan Fischer).
  • Added new command “LISTTourneys” to list your pending unrated NASPA tournaments (Ryan Fischer).
  • EnhancedScoreBoard” command now shows division name in multidivision events (Andy Saunders).
  • Guelph pairing system (“config pairing_system = 'guelph'”) now works for six or ten players (Andy Saunders).
  • Added new pairing system (“config pairing_system = 'none'”) for Sudoku tournaments (Ravee Joradol).
  • Added new “config realm = 'sudoku'” (Amnuay Ploysangngam).
  • It's easier to suppress index entries with CSS now. (Tim Fukawa-Connelly)
  • Added new “config zero_byes_tie = 1” (Friedrich Engelke).
  • Added more Norwegian vocabulary (Taral Seierstad).
  • Added new “config realm = 'naspa-csw'” (John Chew).
  • The “KOTH” command no longer crashes if called partway through data entry (Dan Stock).
  • util/mirror-ftp” reports the target host when a connection fails.
  • Update scripts do not create empty files on download failure (Joel Sherman).
  • ShowPairings” command rewritten for code clarity, minor cosmetic improvements.
  • TeamRoundRobin” command works for even numbers of teams greater than two (Igho Fregene).
  • config tables = [1..5]” is deprecated, but no longer crashes when the division is omitted in a single-division tournament (Andy Saunders).
  • Many reports have alternate lines shaded using CSS, more will follow (Taral Seierstad).
  • PairQuartiles” pairing command works better now when number of players is not divisible by four.
  • config realm = 'pol'” added (Adam Klimont).
  • config sum_before_spread = 1” specifies that players should be ranked on W-L, then total points scored, then spread, is default in Poland (Adam Klimont).
  • tfile_encoding = 'utf8'” specifies that ‘.t’ files should be read in the utf8 encoding, not isolatin1 (Adam Klimont).
  • message_encoding = 'utf8'” specifies that international terminology files should be read in the utf8 encoding, not isolatin1 (Adam Klimont).
  • Added new “encoding” configuration directive for changing the character encoding of the remainder of the configuration file.
  • config realm = 'absp'” now specifies config no_index_tally_slips = 1” (Rick Blakeway).
  • The value of the config hook_division_complete{'A'} configuration option is now parsed for expressions involving $d and $r, which are replaced respectively by the division and round number that have just completed (Rick Blakeway).
  • Added new “DivisionComplete” command that manually triggers the commands given in the config hook_division_complete configuration option, for use after corrections are made to a division (Rick Blakeway).
  • Added new “config realm = 'naspa'” (Dallas Johnson).
  • Added new “config realm = 'naspa-lct'” (Dallas Johnson).
  • config rating_system = 'naspa'” is translated internally to “config rating_system = 'nsa2008'”, likewise for LCT rating system.
  • Some configuration values that must be lists are now ignored if another data type is given instead (Mike Frentz).
  • Added “seat” extension field in preparation for Thai school pairings (Ravee Joradol).
  • Added new “config index_top_extras = {'label' => 'URL', ...}” configuration option for adding links to the top of the coverage index (Nawapadol Sayavesa).
  • Corrected Collins lexicon, removing RECOLOUR+ and URIBILINOGEN+. (Rowan Webb).
  • Corrected “UpdatePLAYers” command’s auto-capitalisation of “Mack”(Andy Saunders)
  • Added new command “HighRatingChanges” to prepare new report (Jared Robinson).
  • The “PRiZes” command can now compute highratingchange prizes (Jared Robinson).
  • The “AVErages” command defaults to showing all players, not top 20 (Ross Brown).
  • GUELPH” pairings corrected for 6- and 10-player divisions (Brett Constantine).
  • Improved documentation print formatting (Joe Petree).
  • Added new “config rating_fields = [qw(rank newr name team)]” configuration option for customizing rating reports (Ravee Joradol).
  • Added new “config seats = 1” configuration option for enabling seat number display (Ravee Joradol).
  • Added new “config no_random = 1” configuration option for disabling random tie-breaks of players tied in standings (Ravee Joradol).
  • Added new “config top_down_swiss = 1” configuration option for bidirectional optimization of Swiss pairings (Ravee Joradol).
  • Added new “config show_inactive = 1” configuration option for displaying inactive players in rating lists (Ravee Joradol).
  • config realm = 'pol'” now sets “config all_byes_tie = 1” and “config bye_spread = 300” (Adam Klimont).
  • The “Addscore” command will automatically enter bye scores if it looks like it can safely do so (Chris Cree).
  • note” prize type added.
  • Configuration error reporting is a skosh clearer (Scott Jackson).
  • Bug fixes for events with capped spread (Vince Castellano).
  • CSS body class identifies division (Ross Brown).
  • InitFontes” round-off error that caused bad pairings for some large schedules fixed (Ryan Fischer).
  • Corrected text output of “ROSTERS” command (Ross Brown).
  • EnhancedScoreBoard” renders better now in iOS Safari.
  • config gibson_spread = [250,175,150]” configuration option added.
  • config no_boards = 0” enables display of boards, when using tables (Chris Lennon).
  • Added new command “AssignTeamsSnaked” to support SWILLLNS pairings (Chris Cree).
  • Added new command “TeamMultipleRoundRobin” to support SWILLLNS pairings (Chris Cree).
  • The “Addscore” command lets you enter scores separated by dots again (Reese Daniel).
  • config alpha_pair_first_page_break = 10 ” specifies the number of pairings to show on the first page of alpha pairings, if it differs from subsequent pages. (Dan Stock)
  • A plug-in architecture has been developed and implemented. Some features will be excluded from the general distribution, usually because they are of limited interest.
  • EnhancedScoreBoard” features a compact display mode, dims moving boxes.
  • The “Addscore” command accepts reentered scores with a warning.
  • ChewPair” command is affected by a new configuration parameter config chew_no_swiss_all = 1, which overrides the default behaviour of switching to Swiss pairing when all unpaired players are contenders (useful if the top players have been left unpaired for more accurate pairings).
  • The “EXPORTRATINGS” and “USERATINGS” commands support a CSV-style file header specifying field order.
  • The “LOOK” command supports CSW2012, no longer supports SOWPODS2003.
  • Added new command “PROFILE” to edit persistent configuration options.
  • config auto_koth_repeats = 2” says that any final KOTH rounds forced in Chew pairings will have the specified number of repeats rather than the default unlimited (Llewellin Jegel)
  • The “PRiZes” command correctly handles ties in exclusive prizes (Tony Leah).
  • config html_index_recent_first = 1” lists the most recent rounds at the top of the index page, instead of the oldest.
  • util/mirror-ftp” no longer fails if it temporarily loses its Internet connection in the middle of an upload.
  • config bracket_prelims = 3” specifies three rounds of preliminary InitFontes pairings before brackets begin.
  • Added new command “LowSpread” to list games with lowest spread.
  • Made substantial cosmetic changes to HTML index appearance.
  • The “AUPAIR” command combines multi-division tournaments into one file (Bob Jackman).
  • config swiss_order = 'koth'” changes the ordering of pairings within Swiss win groups to KOTH (Llewellin Jegels).
  • Internationalization changes affecting mainly Polish users (Adam Klimont).
  • config round_robin_order” also applies, with slightly different syntax, to team round robins. (Jason Keller)
  • ChewPair” command works better with Polish-style sum rankings (Adam Klimont).
  • Added “initrec” extension field to support tournaments in which a player may arrive with a prior record of wins, losses, spread, capped spread or score sum (Ravee Joradol, Adam Klimont).
  • Added new command “setESBMeSsaGE” to display announcements on the scoreboard (Vince Castellano).
  • PairQuartiles” pairing command draws more randomly (Ross Brown).
  • Added new command “RoundClassRATings” (Craig Beevers).
  • config html_suffix = '.shtml'” changes default suffix for created HTML files.
  • The “AUPAIR” command conforms to Aardvark standards for forfeits and byes (Elie Dangoor).
  • Impossible exagony is detected and reported rather than freezing (Muraguri Peter).
  • config swiss_order = ['id','koth']” is now of type array (Llewellin Jegels).
  • Tweeting is now possible again for the first time since Twitter changed its security system, but with a different configuration command. You'll need to install your own command-line twitter tool (I like ttytter on OS X) and then name it like this “config twitter_command = 'ttytter -silent -status="%s"'” (John Chew).
  • Added “twitter” extension field for identifying a player's Twitter handle.
  • config rating_system = 'aus'” no longer enables acceleration or feedback points (Vali Muhammad Bhaila).
  • EnhancedScoreBoard” command has new Blink mode, autohides controls, and buttons to move more quickly up and down the ranks.
  • config realm = 'pak'” has a 500-point rating floor (Vali Muhammad Bhaila).
  • Added “AverageOpponentScores” command (Brian Bowman).
  • Utility code changes for more robust file saving and mirroring in Windows (Chris Wiegand)
  • overseed” prize type now has a tie-break of final player rank (Pramit Kamath).
  • config show_honourable_mention = 1” configuration option added, shows honourable mentions in prize reports (Vince Castellano).
  • config roster_order = 'alpha'” configuration option added, sorts roster players in alphabetical order
  • config roster_order = 'team'” configuration option added, sorts roster players in team order (Vali Muhammad Bhaila)
  • Added “config entry_tags = { 'c' => 'csw', 'csw' => 'csw', 't' => 'twl', 'twl' => 'twl'}” configuration option for tagging games by lexicon (Winter).
  • Added “config entry = 'tagged'” entry system for tagged games (Winter).
  • Gibsonization now respects “config exagony = 1” configuration option (Lisa Kessler).
  • Enhanced scoreboard works even when reloaded in recent versions of Google Chrome with the XHR caching bug (Lisa Kessler).
  • Enhanced scoreboard handles showing games recorded against inactive opponents without error (Lisa Kessler).
  • config initial_schedule” value may be any positive integer up to a full round robin length.
  • config initial_schedule” value may be any positive integer (Vince Castellano).
  • Using pairing commands to pair players due to go first (or second) with each other will cause an adjustment of firsts/seconds (Vince Castellano).
  • Hooks are no longer reentrant (Vince Castellano).
  • When switching enhanced scoreboard to normal mode, rows are reduced to 10 (formerly 5) if necessary (Vince Castellano).
  • Added “config esb_geometry{'A'} = [[5,6,0]]” configuration parameter for specifying enhanced scoreboard geometry (Vince Castellano).
  • Added “config standings_refresh = 10” configuration parameter for specifying how often standings files should refresh in browser (Vince Castellano).
  • Added “config unfair_byes = 1” configuration parameter for specifying that byes should always be awarded based on standing, not number of byes already awarded (Ravee Joradol).
  • Rating reports now give first/second and location assignments for next rounds if known.
  • InitFontes” now does multiples of round robin lengths too.
  • Better handling of non-Unicode consoles (Ravee Joradol).
  • The “EditScores” command no longer exits on garbled input.
  • Added new command “BUGreport” to email tournament data and a note to John Chew.
3.3102010 European Open
  • ChewPair” command works with exagony.
  • Bye assignment works better with exagony.
  • Added experimental new “begin” configuration directive for giving commands to run at the beginning of each session.
  • EnhancedScoreBoard” command works better with Kingston Cup.
  • The “Addscore” command lets you enter scores that look like byes or forfeits if you are in spread entry mode.
  • The “LOOK” command reports how many words were correct if “config count_good_words = 1” is in effect.
  • The “PRiZes” command can now compute luckystiff prizes (Dave Kulansky).
  • Added support for the new NASPA CSW rating system.
  • ChewPair” command correctly handles the situation where the third-ranked player has clinched a place in the top three and might still make it to second (Rajiv Antao).
  • Added G. Vince Castellano’s TSH QuickStart.
  • Added informal description of Chew pairings (Carla Cree).
  • ShowPairings” command creates tally slips as an experimental side effect (Andy Saunders).
  • Added new command “ForfeitLOSS” to simply the process of entering a forfeit loss (Ryan Fischer).
  • Added experimental new command “FIX” for graphically editing scorecard.
  • Tweaked the “TotalTeamStandings” command.
  • Combined realm-dependent CSS stylesheets into one master stylesheet.
  • config exagony = [1,2,3]” alternate syntax now lists rounds with exagony.
  • showWallChart” displays teams (Vince Castellano).
  • Added experimental new command “VALET” for entering game results at table-side.
  • Added “config no_index_tally_slips = 1”, suppresses listing of tally slips in event web coverage index (Heinz-Jürgen Michel)
  • EnhancedScoreBoard” command is internationalized for German (Heinz-Jürgen Michel).
  • EnhancedScoreBoard” command can now scroll much more slowly (Andy Saunders).
  • EnhancedScoreBoard” command works with capped spread.
  • config spread_cap” can now be set to a list of values.
  • config show_roster_classes = 1” configuration option displays player classes in tournament rosters.
  • ROSTERS” command shows a lot more information now.
  • Improved “UpdatePLAYers” command to better cope with errors in cross-tables.com data (Andy Saunders)
  • The “NAST” command features the newer pairings for seven and eight rounds (Steve Pellinen).
  • ‘photos.txt’ may contain blank lines (Heinz-Jürgen Michel)
  • STATisticS” command is internationalized for German users (Heinz-Jürgen Michel).
  • Added “config locale” configuration option to control collation order.
  • Added new “config realm = 'pak'” (Waseem Khatri).
  • UPDATEPIX” command now only loads photos in database specified by current realm.
  • Added new “config realm = 'go'” (Willemien).
  • InitFontes” now does two-round schedules, as well as any odd.
  • config flight_cap” may now be an array, not just a predefined sub.
  • config realm = 'nor'” added (Taral Seierstad).
  • Round robin pairings now have more balanced starts and replies.
  • STATisticS” command now correctly computes median (Taral Seierstad).
  • Corrected “UPDATERATINGS” command’s handling of expired NASPA members (Andy Saunders).
3.300WSC 2009
  • Documentation cleanup, Team Play section added.
  • The “AUPAIR” command omits players who did not play any games from its output (Bob Jackman).
  • The “Addscore” command no longer lets you enter scores that look like byes or forfeits without pairing the players appropriately (Nigel Richards).
  • config realm = 'thai'” added, uses Thai rating system, rating list, bye spread, etc.
  • The “AUPAIR” command correctly handles players who had byes in divisions that had no-shows (Nigel Richards, Bob Jackman).
  • config division_name{'A'} = 'Jim Thorpe Division'” overrides default division naming convention (Matthew Hodges).
  • UPDATERATINGS” and “USERATINGS” commands should now work in ABSP realm.
  • The Elo rating code is more numerically stable when newcomer vs. newcomer games predominate (Rich Engelke).
  • config realm = 'deu'” now specifies the newly created “config rating_system = 'deu'” rating system, which includes experimental support for capping ratings of newcomers who have not played established opponents (Rich Engelke).
  • config realm = 'deu'” now specifies a separate value for “config message_file” in preparation for UI localisation.
  • Internal rating calculation code no longer emits some spurious warning messages (Tapani Lindgren).
  • The “Addscore” command input speed scorekeeping does not crash when a game is entered in zero seconds.
  • Cosmetic changes to make regression tests [a-e]* work again.
  • The “Addscore” command input speed scorekeeping does not misbehave when run interactively, outside of a regression test (Bryan Pepper).
  • config spread_cap = 350” limits earnable spread per game and is a Thai realm default (Moomin Doramon).
  • Added “pname” extension field to allow names to be printed using Unicode characters not available at the console.
  • Changed parsing of extension fields to permit backslashes to escape backslashes or semicolons, and to disregard ‘#’ comments unless at the beginning of the line (modulo white space).
  • Addscore” command now tries to expand just about anything that doesn't look like a score into a name, including Unicode strings (Charlie Reams, Heinz-Jürgen Michel).
  • Experimental “config windows_console_unicode = 1” added, permits the use of non-ASCII characters in player names on a Windows console (Heinz-Jürgen Michel)
  • AUPAIR” command corrects some names from NASPA database spellings to WESPA rating spellings (Bob Jackman).
  • Changes to German lexicon (Friedrich Engelke).
  • Code cleanup to fix regression tests.
  • The “Addscore” command no longer accepts dots as synonyms for spaces during data entry. If anyone was actually using this feature, let me know and I’ll make it an option.
  • ‘.t’ files are now assumed to be in the ISO Latin-1 encoding.
  • Experimental “config use_windows_code_page = 1” added, enables the use of non-ASCII characters on a Windows console (Heinz-Jürgen Michel)
  • The “PRiZes” command allows the “exclusive” parameter to specify groups of prizes from which a player is eligible to win at most one.
  • Added new “PairQuartiles” pairing command (Philip Nelkon).
  • Added new “EnhancedScoreBoard” command.
  • TeamStandings” command displays more statistics (Philip Nelkon).
  • Substantial internal changes to improve performance; ratings and ranks after each round are now cached in division data files.
3.290Correction to 3.280
  • The “KOTH” command now accepts an optional “repeats since round” subparameter to (Hubrecht Luyk).
  • Posted documentation for 3.280.
3.2802009 Toronto SCRABBLE Tournament
  • PRiZes” command handles ties better (Ross Brown).
  • The “NAST” command works with all well-defined seven- and eight-round events (Steve Pellinen).
  • config oppless_spread = 1” indicates that spread calculations should ignore opponent scores (and therefore be just the sum of a player’s own scores (Johann-Georg Dengel).
  • separator” prize type no longer uses up a prize number (Ross Brown).
  • showWallChart” displays paired unscored rounds, supports terminology internationalization (Johann-Georg Dengel).
  • Added “showRankedWallChart” command (Johann-Georg Dengel).
  • config no_boards = 1” suppresses only boards, not tables (to avoid tables, don’t use “config tables”.
  • The “absp” realm now uses “config entry = 'scores'” as its default (Stewart Holden).
  • Non-ASCII characters in foreign terminology are reduced to ASCII for console output.
  • STandings” command output looks more like “RATings” command output (Johann-Georg Dengel).
  • Changed “UpdatePLAYers” command to better cope with errors in cross-tables.com data (Ryan Fischer)
  • Updated “ABSPgrid” command, which now combines divisions (all, if none are specified) into one grid. (John Grayson, Stewart Holden)
  • PRiZes” command can now read group members from a file.
  • PRiZes” command group members no longer have to all belong to the same division.
  • Updated “ROTO” command, which now accepts an optional round number
  • util/mirror-ftp” no longer gives up if it has no Internet connection.
  • ShowPairings” command correctly places players at tables by rank even when School SCRABBLE capped standings are in effect (Joey Krafchick).
  • The “currency_symbol” configuration option can now override the default dollar sign in scoreboards.
  • Tweaked “ChewPair” command to improve pairings specifically for 12-round events with 14-18 players. The leader/nonleader split now always includes at least 4 leaders where possible, and the faint hope clause now applies in the penultimate round as well as the last.
  • The “PairMany” command now accepts player names (Art Moore).
  • The “EditScores” command now lets you manually assign board numbers.
  • The “PRiZes” command allows the “winner” parameter to override a computed winner, which can be useful in events with a separate finals round.
  • The “RoundHandiCap” command reports on King's Cup-style handicaps.
  • The “ScoreBoard” command works better when displaying a group that isn't at the top of the field.
  • The “ScoreBoard” command has specific knowledge of Thai names, and Malaysian/Singaporean names of Chinese origin, and renders them appropriately.
  • The “THAICASH” command reports on King's Cup-style winner's bonuses.
  • The “config force_koth” configuration parameter will accept greater values than 1, and set up that many final rounds of KOTH.
  • The “config player_photo_aspect_ratio” configuration parameter specifies aspect ratio of player photos (Stewart Holden).
  • The “SUBMIT” command now sends data to NASPA, not the NSA.
  • The “config director_id”, “config director_password” and “config tournament_id” configuration parameters have been added and are what are now required for automatic ratings submission to NASPA.
  • The “UPDATERATINGS” command works with NASPA ratings (Andy Saunders).
  • The “USERATINGS” command warns about player NASPA membership status (Andy Saunders).
  • The “SUBMIT” command prompts for a password if it does not find one in the configuration file (not yet tested under Windows) (Andy Saunders).
  • The “PairMany” command records firsts and seconds if “config track_firsts = 1” is in effect (Mauro Pratesi).
  • The “AUPAIR” command omits byes/forfeits rather than faking them as ties if “config no_aupair_bye_ties = 1” is in effect (Henry Yeo).
  • The “SUBMIT” command prompts for a password if it does not find one in the configuration file, even under Windows (Bryan Pepper).
  • The “SUBMIT” command generates a complete all.tsh file even if the network connection fails (Carole Denton).
  • The new “GREEN” command generates 6-round pairings for 6-8 players as specified by John C. Green (John C. Green).
  • The “Addscore” command does not abort as often on incorrect input (Andy Saunders).
  • The “USERATINGS” command correctly handles the case where a player has a rating in the data file but not in the rating list.
  • The “EditScores” command now lets you assign spread penalties (Andy Saunders).
  • The “config final_draw = 1” option specifies that even when firsts and seconds are assigned, players with even records in the last round will be instructed to draw randomly to see who starts (Ian Weinstein).
  • config rating_system = 'thai'” gives a rating system equivalent to NSA 2008 that does not count tie games (Ravee Joradol).
  • The “Addscore” command keeps track of input speed.
  • The “EXPORTRATINGS” command exports a new rating list, for those using tsh to maintain a rating system (Ravee Joradol).
  • The “USERATINGS” command warns about suspended player NASPA membership status (JC Green).
  • Trying to use “config force_koth” with automatic pairings gives an error message, may abort tsh in future (Bryan Pepper).
  • The “SUBMIT” command works with nonstandard filenames (Dave Johnson).
  • RATings” command now does not show the rating difference column for ABSP users (Stewart Holden).
  • ScoreBoard” command does not include future rounds in counting repeats (John O'Laughlin).
  • Cosmetic improvements to the “ScoreBoard” command (Ross Brown).
  • Cosmetic improvements to cross-tables, scorecards and wall charts.
3.270Toronto School SCRABBLE Championship
  • util/mirror-ftp” is easy to configure (Jared Robinson).
  • The “EditScores” command now lets you edit byes (Dallas Johnson).
  • The “NAST” command works with five-round events (Sherrie Saint John).
  • config rating_system = 'elo'” indicates that Elo ratings should be computed without NSA bugs.
  • Many more NSA rating system bugs are more correctly duplicated.
  • config rating_list = 'deu'” specifies the use of the German ratings list.
  • UPSETs” command displays decimal ratings differences correctly (Stewart Holden).
  • Improved “ChewPair” command, applies pairings cap to players within one win of last prize in the last round, effectively extending the KOTH group in the default situation.
  • PRiZes” command can now compute prizes based on results of a selected range of rounds.
  • ScoreBoard” command displays team flags if available, design improvements.
  • new rating systems and rating lists, details to follow.
  • config realm = 'deu'” added, uses German ratings list, rating system and some terminology in common reports (Heinz-Jürgen Michel).
  • config rating_system = 'wespa'” specifies the use of the WESPA rating system.
  • config rating_system = 'aus'” specifies the use of the Australian rating system.
  • config rating_system = 'nsa2008'” specifies the use of the new NSA rating system.
  • config gibson = 'strict'” pairs Gibsons with the highest player out of contention, no matter how many times they have played the Gibson (Jim Hughes).
  • util/mirror-ftp” automatically copies tsh reports to an FTP server whenever they change.
  • Addscore” command correctly reports updated win total on entering a scoreless bye (Stewart Holden).
  • Added new command “GUELPH” to support new pairing system (“config pairing_system = 'guelph'”) used in Guelph, Ontario, Canada (Andy Saunders).
  • Corrected the calculation of local club ratings that change across multiplier boundaries.
  • Corrected the calculation of ABSP ratings in nonfinal rounds.
  • HTTP clients now try to reconnect 25 times rather than giving up right away.
  • Computed new ratings are saved in .t files (as newr).
  • Ratings for the default 'nsa' realm are now computed using the new logistic rating curve.
  • Fixed bugs in “UpdatePLAYers” command (Andy Saunders)
  • Fixed bug in bye-assignment algorithm that could cause a crash if data files were manually edited outside of tsh (Rajiv Antao).
  • ScoreBoard” command correctly displays half-win banners (Ross Brown).
  • ScoreBoard” command respects “config no_boards = 1” (Ross Brown).
  • config hook_division_update = 'command1;command2;...'” fires on any update of any division data file (Ross Brown).
  • Corrected “SUBMIT” command to handle configuration files that do not end in a newline character (Carla Cree).
  • util/mirror-ftp” can be run from its subdirectory (Stewart Holden).
  • HighCombined” command shows classes for both players (Stewart Holden).
  • UpdatePLAYers” complains and does not try to update data files if cross-tables.com returns an error message (Ryan Fischer).
  • util/mirror-ftp.bat” added for Windows users (Stewart Holden).
  • Negative prize ranks count from the bottom of the field (Ryan Fischer).
  • util/mirror-ftp” syntax changed to permit specifying both username/password and event list on command line (Andy Saunders).
  • Corrected two serious bugs in the “KOTH” command that could cause incorrect pairings in divisions with odd numbers of players, and failure to detect Gibsonization (Stewart Holden).
  • ChewPair” command now works better with “config exagony = 1” (Ryan Fischer).
  • Added “config html_index_bottom” and “config html_bottom”, to offer customisation of web report footers (Ryan Fischer).
  • Added “config custom_stylesheet” to specify an event-specific CSS stylesheet to override defaults in the standard tsh stylesheet (Ryan Fischer).
  • Corrected a bug in the “ChewPair” command that caused rare crashes during Gibsonisation (Ryan Fischer).
  • RANDomscores” generates reasonable scores for ABSP divisions even when the ratings are unreasonable (Ryan Fischer).
  • Cleaned up and documented the “overseed” prize type (Ryan Fischer).
  • Added the “separator” prize type (Ryan Fischer).
  • PRiZes” outputs a blank prize chart if run at the beginning of the tournament (Ryan Fischer).
  • Added “BRACKetpair” command and “config bracket_order”, “config pairing_system = 'bracket'” and “config bracket_repeats = 3” configuration options to support single-elimination pairings (Jason Idalski).
  • Corrected a bug in format of POSTed data in HTTP client code.
  • Added “password” extension field in preparation for self-service scoring.
  • Added the “TWEET” command and the config twitter_username, config twitter_password, config twitter_prefix and config hook_division_complete{'A'} configuration options.
  • Added the “TotalTeamStandings” command to list total standings for a team with members in multiple divisions.
  • Added the “totalteam” prize type.
  • ScoreBoard” command displays players out of contention in blue (Ross Brown, implemented by Ross Brown).
  • Documented the “bracket_cap” configuration option.
  • Documented the “bracket_noncon_pairings” configuration option.
3.2602008 Big Apple ST
3.2502008 MWMST
  • The “EditScores” command now lets you set a player’s life games total (necessary for accurate computation of NSA ratings) using the “GAMES” keyword (Leonora Labog).
  • Added “BASDSemi” and “BASDFinal” commands, and “config pairing_system = 'basd'” configuration option (Ira Freehof).
  • Added “config round_robin_order”, which lets you explicitly specify a nonstandard order for the top player’s opponents in a round robin (Ira Freehof).
  • Corrected some serious issues affecting Gibsonization mainly for UK directors (Richard Blakeway).
  • Corrected some less serious issues affecting Gibsonization: tsh could crash if all players in a division were involved in Gibsonization, especially in a small division (Richard Blakeway).
  • Adjusted the threshold at which tsh will refuse to merge contenders and (six or fewer) contenders (who cannot be paired without repeats) from C≤NC to C≤2NC (Ryan Fischer).
  • EditScores” can be invoked on any paired round, not just a scored rond.
  • PRiZes” command now has new “class” extra item for designating class prize eligibility.
  • Redesigned the “ScoreBoard” command and added the config hook_autopair configuration option.
  • NSA ratings computed while results are being entered are no longer computed incorrectly for players whose results have not yet been entered (Sal Desiato).
  • ShowPairings” used to not show pairings immediately after computing them if everyone was a gibson, a victim or a bye.
  • TeamRoundRobin” command works if one team has one less player than the other (Mike Frentz).
VersionEventChanges
3.240US NSC 2008
  • showScoreCard” command indicates repeat pairings (Stewart Holden)
  • Added “TeamRoundRobin” command.
  • Corrected “SUBMIT” command to handle .t files with missing final newlines (Brett Constantine).
  • Improved “ChewPair” command, runs faster for large divisions by doing even fewer unnecessary best-possible-finish computations.
  • CheckRoundScores” command no longer displays inactive players.
  • Added “config html_index_top”, which provides an alternate HTML heading to be used for the Event Coverage Index.
  • Added “config bye_firsts = 'alternate'”, to support new NSA scheme for assigning firsts and seconds to players who have had byes, is now default for realm 'nsa'.
  • Addscore” command no longer cares if you put extra zeroes in front of player numbers (Jeremy Brooke).
  • PRiZes” command now has a relatively easy configuration syntax and supports several new prizes for the NSC.
  • HighRoundLosses” command replaces earlier “high-loss-round” external command (Jeremy Brooke).
  • HighRoundWins” command replaces earlier “high-win-round” external command (Jeremy Brooke).
  • Regression testing works better under Windows now.
  • Added “config mirror_directories = [qw(path1 path2)]”, to automatically copy ‘.t’ files to other directories.
  • The “EditScores” and “EditScores” commands no longer display division names with player numbers if there is only one division in the event (Jeremy Brooke).
  • An error is reported at run time if a division has an odd number of active (formerly active or inactive) players (Jeremy Brooke).
  • DELETEscore” command can now be used to delete byes, giving an opponent number of 0 (Jeremy Brooke).
  • UnPairRound” command works correctly with players who have a scored bye in the round being unpaired (Jeremy Brooke).
  • UPDATE” command is now internal, should no longer fail to report its progress for Windows Users (Jeremy Brooke).
  • ShowPairings” alpha pairings indicate firsts and seconds more clearly (Mary Rhoades).
  • UPDATEPIX” command is now internal and has lost its hyphen.
  • RoundRATings” command now accepts a range of rounds to compute (Jeremy Brooke).
  • SHOW12” command is now internal and slightly enhanced (Jeremy Brooke).
  • Pairings commands now correctly detect triple Gibsonization (Bryan Pepper).
  • STATisticS” command reports total number of points scored and games played (Patty Hocker).
  • Added “UPDATERATINGS” command (Jeremy Brooke).
  • Added “USERATINGS” command (Jeremy Brooke).
  • config initial_snaked = 1” behaviour corrected in case where you are just one player short of the right number (Johann-Georg Dengel).
3.2302008 CNSC, BAT, etc.
  • Addscore” command largely rewritten, now accepts ‘.’ as equivalent to ‘ ’ (space) to facilitate numeric keypad data entry, reports computed spread when entering scores, also supports new “config entry = 'both'” to require the entry of entry of both scores and spread.
  • Fixed a bug that could cause tsh to crash if it tried to pair an empty flight, as could happen if all players were part of a Gibsonisation process (Ryan Fischer).
  • config gibson_class = 'A'” restricts Gibson opponents to the named class (Stewart Holden).
  • The U.K. now has a separate player photo database (Stewart Holden).
  • Added the “ScoreBoard” command and the config hook_addscore_flush configuration option that enables its automatic invocation.
  • Corrected recently introduced serious errors in “ChewPair” affecting default flight cap pairing in final round, and late rounds with odd numbers of contenders.
  • HighWin” and similar commands now display player classes if available.
  • config initial_snaked = 1” causes “InitFontes” to snake players boustrophedonically into groups, rather than assigning them randomly by quartile (Yeo Kien Hung).
  • config standings_spread_cap = [100, 150, 250, 250, 250, 250]” caps allowed spread per round for standings purposes, for the U.S. NSSC.
  • config alpha_pair_single_column = 1” displays alpha pairings in one column (Ben Greenwood).
  • ChewPair” runs a little faster now by not checking Gibsonization below last prize rank.
  • Division names appearing in configuration variables can be in lower case. (Mary Rhoades)
  • The “ScoreBoard” command no longer gives spurious error messages if invoked with no arguments (Ryan Fischer).
  • Multiple commands may now be entered on a line, separated by semicolons.
  • Added experimental “LowerRoundRobins” command to implement a very poorly thought out pairing system, formerly popular at the U.S. NSC (Kien Hung Yeo, Chris Lennon).
  • Fixed a bug that caused “ChewPair” to crash if scores for the previous round were entered before Fontes pairings were generated (Mary Rhoades).
  • Added “ROSTERS” command (Mary Rhoades).
  • Altered “ChewPair” to raise the threshold from four to six at which a number of noncontenders forced to repeat pairings by being prevented from playing with contenders are allowed to play with them after all (Mary Rhoades).
  • ShowPairings” now mentions repeat pairings (Mary Rhoades).
  • Fixed a bug in “ChewPair” that would cause it to hang if the top flight had to include someone who couldn't catch up to the player above them (Mary Rhoades).
  • Corrected “AUPAIR” CR LF problem (Yeo Kien Hung).
  • config rating_system = 'none'” indicates that no ratings should be calculated (Karey Heard).
  • Corrected “STATistics” command to run correctly when division names are numerical (Karey Heard).
3.2202008 Dallas Open
  • STATisticS” command now invokes all other statistics commands (Stewart Holden).
  • config assign_firsts = 1”, “config html_in_event_directory = 1” “config track_firsts = 1” are now default in ABSP realm (Stewart Holden).
  • Corrected “AUPAIR” to handle ties correctly (Bob Jackman).
  • Some browsers were not correctly rendering empty cells in tabular reports. (Ricky Purnomo).
  • ChewPair” was incorrectly estimating contention in many cases, resulting in unnecessary late round repeats (Stewart Holden).
  • ChewPair” now checks to see if four non-contenders can't be paired without repeats, not just two (Glenn Dunlop).
  • Added “config avoid_sr_runs = 1”, which tries to minimise runs of starts and replies before randomly assigning them to players whose records are equal.
  • Experimental Linux browser support added (Prithwiraj Mukherjee).
  • RESETEVERYTHING” was incorrectly deleting ‘tsh.css’ (Ryan Fischer, issue 86).
  • config no_initial_rr = 1” tells Chew pairings not to start with initial round robins, even if there are enough rounds to do so (Stewart Holden).
  • Rewrote round robin code to use Berger schedule. “InitFontes” now accepts any odd number as its first parameter, not just three (Stewart Holden).
  • FactorPair” supports Gibsonization (Carla Cree).
  • Ratings no longer have to be whole numbers (Stewart Holden).
  • config random_rr_order = 1” puts round robin pairings in random order (Ronan Webb).
  • STATisticS” command suppresses meaningless figures depending on “config assign_firsts” and “config track_firsts”(Stewart Holden).
  • The HTML index will include possibly blank rows for each round if “config max_rounds” is set (Stewart Holden).
  • ChewPair” command works much faster now in large divisions by truncating the search for contenders at the flight cap.
  • PRiZes” command calculates upsets automatically.
  • STATisticS” command correctly calculates stronger player winning percentage even when players are numbered alphabetically (Stewart Holden).
  • STATisticS” command hides output from invoked commands.
  • Scorecards displayed on-screen do not include empty rows for rounds not yet played.
3.210WSC 2007
  • config initial_random = 1” added, specifies one initial round of random pairings when automatic pairings are in effect.
  • ShowPairings” command now displays or suppresses start/reply data depending on configuration settings, no longer relies on user to edit ‘tsh.css’ (Sherrie Saint John).
  • ShowPairings” command no longer tries to make two columns if player photos are being shown.
  • CheckRoundScores” command displays player names.
  • config check_by_winner = 1” added, specifies checking of scores by winner even when starts and replies are being tracked.
  • TeamStandings” command displays more statistics.
  • Added “RESETEVERYTHING” command to reset everything (Stewart Holden).
  • Added “NAST” command to do NAST pairings.
  • Added “config pairing_system = 'nast'” for North American Scrabble Tour events.
  • Added “config show_last_player_name = 1” to show last player name and not just ID in ratings reports (Jim Hughes).
  • Added “config no_boards = 1” to completely suppress boards (Ricky Purnomo).
  • SUBMIT” command opens browser window to payment screen (Jim Hughes).
3.2002007 Big Apple ST
3.190September 2007 Toronto
2007 UK NSC Semi-Finals
  • Addscore”, was complaining too much about scores when “config entry = 'spread'”. (Reported by Stewart Holden).
  • Added “SPITroast” command for UK-style rotisserie pools (Evan Simpson, issue 6).
  • Added “STATisticS” command for generating summary statistics for a tournament.
  • MISSing” now accepts an optional second argument, a division name (Stewart Holden, issue 5).
  • RANDomscores” ABSP-unrated player score distribution bug fixed (Stewart Holden, issue 43).
  • KOTH” and other standard pairings commands honour “config gibson=1”(Stewart Holden, issue 33).
  • config prize_bands” defaults to one quarter of division size, not one.
  • Added “luckySTIFF” command as opposite for TUFFluck (Stewart Holden).
  • Added “SPITroast” command for UK-style rotisserie pools (Evan Simpson, issue 6).
  • ‘tsh.css’ is now copied to the event directory when “config html_in_event_directory = 1” is in effect. (Stewart Holden, issue 62).
  • Corrected “AUPAIR” to handle byes correctly (Barry Harridge, issue 63).
  • Massive code changes made to support simultaneous (multithreaded) operation of the web server and command-line interface.
  • Regression testing implemented, see ‘util/regression.pl’.
  • config alpha_pair_page_break = 10 ” is now the default value in the NSA realm (and 10000 in the ABSP realm), and is used to determine whether or not to switch to two-column printing when no photos are used. (Stewart Holden, issue 65)
  • TUFFluck” is now a built-in command, not an external one, the order of its arguments is reversed, and it generates HTML files (Stewart Holden).
3.1802007 Players Championship
  • HTML reports are now generated only in the directory (folder) designated by “config html_directory”, and no longer in the event directory. This is because reports which included player photos were not able to refer correctly to the location of those photos. If you find this confusing, use “config html_in_event_directory = 1”. (Reported by Jennifer Miller).
  • Added “Browse” command.
  • config bye_spread” defaults to 50, but can be set to 75 for ABSP use (for Stewart Holden).
  • config realm = 'absp'” sets various configuration variables to ABSP defaults, also chooses alternate default ‘tsh.css’ file which shows starts/replies but suppresses boards.
  • Added “DOCumentation” command.
  • Rewrote “HighLoss” command, now generates HTML, does not have hyphen in its name.
  • Rewrote “HighWin” command, now generates HTML, does not have hyphen in its name.
  • Rewrote “LowLoss” command, now generates HTML, does not have hyphen in its name.
  • Rewrote “LowWin” command, now generates HTML, does not have hyphen in its name.
  • Added “AVErages” command for Stewart Holden.
  • RoundRobin” command takes an initial optional integer argument specifying how many times each player should play his/her opponent consecutively (Stewart Holden).
  • Added “BrowseLast” command.
  • Long standing problem with reserved tables finally fixed (Stewart Holden).
  • ResultsByRound” command now also lists number of losses, in case of players missing games completely.
  • Most report-generating commands have been rewritten for code clarity.
  • RoundRATings” and “RATings” rewritten for easier maintenance. Next player is shown where available even when ABSP ratings are in effect, but the player name is no longer ever shown (just the ID), to make room for a new column (overridden by “config no_show_last”) showing details of the last game, for the sake of player verification.
  • showWallChart” was displaying one too many rounds; it no longer does so (Stewart Holden, issue 34).
  • config board_stability” is ignored at the beginning of a session. (issue 35)
  • InitFontes” interacts correctly with “config reserved”. (issue 36).
  • config show_divname” forces division names to be displayed, even when there is only one division.
  • Addscore” command warns if an entered score is less than 100.
  • ChewPair” was overestimating the number of players in contention (issue 37).
3.170Toronto LCT
  • config flight_cap” will let you override the default top-flight cap of 4 * number-of-rounds-remaining in Chew Pairings.
  • Added “ShowDivisionScoreCards” command for Stewart Holden.
  • config pair_page_break = 15” will force a page break after every 15 players in regular pairings.
  • Added “CheckRoundScores” command for Ben Greenwood.
  • Added “update-pix” command for Kath Mullholand.
  • Added “config player_photos = 1” option for Kath Mullholand.
  • Changed “config entry = 'absp'” option to “config entry = 'spread' ”for Stewart Holden.
  • config table_method = 'consecutive'” will assign one board per table, tables numbered beginning at 1 in the alphabetically first division, then continuing consecutively in each subsequent division (Stewart Holden).
  • classes A 3” in the configuration file will declare 3 subdivisions of equal size in Division A, for use in awarding class prizes (Stewart Holden).
  • Configuration errors pause to let you see them, even on old Windows systems (Mauro Pratesi).
  • Added “TRUNCATEROUNDS” command for Stewart Holden.
  • Corrected “DELETEscore” command to work in a spread-entry environment for Stewart Holden.
  • Added “TOTalScore” command for Stewart Holden.
3.1602007 Dallas Open
  • tsh should complain once and revert to black-and-white rather than crash if something is seriously wrong with its colour environment
  • tourney.pl -C works again
  • TSH/Command modules can be anywhere in @::INC
  • Major internal rewrite to support ongoing web interface development. Please be sure to do a dry run if you are using this release at a tournament.
  • Default pairings will begin with one or more round robins if the number of rounds remaining to pair is greater than the number of players in a division.
  • config force_koth” will force a round of unrestricted KOTH at the end of default pairings.
  • config alpha_pair_page_break = 15” will force a page break after every 15 players.
  • The “InitFontes” command will avoid assigning byes to top-rated players, will assign better-quality pairings in odd divisions, and will if you really want to let you use it in a division with only three players. Its board number assignment algorithm has also been substantially improved.
  • Added “lifeg” extension field.
  • RATings” command automatically accounts for split ratings
  • config split1” is now deprecated.
3.150Toronto Open
  • Removed spurious error message from “ShowPairings”, introduced in 3.140 when player photos are not found.
  • Fixed “SUBMIT” command to actually work in non-debug mode.
  • Cross-platform support for “config backup_directory”.
  • Fixed “showWallChart” command so that it doesn't display cryptic messages when used with track_firsts turned off (Vince Castellano).
  • Added “ShowManyPairings” command (Vince Castellano).
  • Cleaned up generation of HTML files and indices.
  • Cleaned up generation of CSCs.
  • Added “config allow_gaps = 1” to permit leaving unassigned gaps in a CSC. This necessitated a small change in the .t file format and major changes through tsh. As a side benefit, the “InitFontes” command will work around partly paired initial rounds, as long as the number of partly-paired players needing opponents is even in each round.
  • Fixed “Addscore” command, now checks correctly for things that don't look like scores.
  • Rewrote contender detection code in“ChewPair” yet again. The new version takes into account all available game data, including that from partly scored rounds.
  • Added experimental “PRiZes” command, which lists all prizes to be awarded.
  • ShowPairings” command lists all byes ahead of unpaired players.
  • Added “config board_stability”, which tries to keep one player from each game at the same board.
3.1402006 MWMST
  • config port = 7777” enables a multiuser version with graphical user interface in the very early stages of development.
  • The “part-of-name1,part-of-name2” syntax introduced in 3.110 works within “Addscore
  • Added hooks to “ShowPairings” to support display of player photos when available
  • Use Term::ReadLine where available, so that you can scroll back instead of retyping commands.
  • Fixed a semi-obscure bug in “ChewPair” that could affect top pairings at the end of a tournament: the primary criterion for choosing opponents is now whether or not they can catch up to the current leader.
  • Added “SUBMIT” command to submit ratings data (currently only for NSA ratings, others added on request)
3.1302006 BMSC
  • RoundRobin” command balances starts and replies for groups sized 2-26
  • Corrected bug that might have sometimes led to incorrect assignment of starts and replies
3.1202006 USSO
  • FactorPair” command no longer does opponent availability optimisation.
  • ResultsByRound” command now also lists contestant ranks prior to start of selected range, to facilitate computing USSO "Best Record Day n by Player In Bottom Half" prizes.
  • TUFFluck” external command works with case-sensitive filesystems.
3.110Saxon 2006
  • config rating_system = 'nsa lct'” enables LCT ratings multipliers (for Wes Eddings)
  • LOOK” command works within “Addscore
  • config entry = 'absp'” sets data entry to winner-loser-spread mode, generally suppresses display of raw game scores in favour of spread.
  • update-dict” external command fetches dictionary files, which are too big to be included in the regular distribution.
3.100July 2006 Toronto
  • config autopair is slightly less finicky about format (Peter Keller).
  • LOOK” command now uses SOWPODS2003 and TWL2006 lexica.
  • Spurious error messages generated when pairing odd divisions for multiple rounds (InitFontes, RoundRobin) are gone.
  • An error message is displayed if no divisions are defined in the configuration file.
  • tsh is much more tolerant of non-native line breaks in its configuration and data files.
  • Using a configuration file marks it as modified, so that tsh will choose it the next time it is run.
  • If you can't remember a player's number, you can enter it as “part-of-name1,part-of-name2”. For example, if “Chew, John” is the only person whose family name contains “CHE“, he can be referred to as “che,”.
  • When division sizes were close to the number of rounds being played, it is easy for bottom-ranked players to clinch positions near the bottom and be relegated to playing each other for several rounds. Chew pairings now check for this condition and do not allow two players who have already played each other to be separated from a flight of contenders.
3.0902006 Toronto LCT
  • A tournament can use default pairings for some divisions and automatic pairings for others.
3.080BAT 2006
  • config initial_schedule” specifies number of rounds of InitFontes pairings to use at start of default pairings
  • If “config html_directory” does not exist and cannot be created, an error message says so.
  • ShowPairings” command shows table numbers in alpha mode, correctly handles byes in alpha mode.
  • Added “util/multiroto” to report on rotisserie pools that span more than one tournament.
  • Fixed a semi-obscure bug in “ChewPair”. When using pairings based on the second preceding round, the number of rounds used to compute the contender cap had been too large by one.
3.070NSSC 2006
  • RANDomscores” command now generates who goes first randomly to improve verisimilitude of reports on simulated runs
3.060Toronto vs. Mississauga 2006
  • Added “exagony” configuration option.
  • Added “TeamStandings” command
  • RATings” command correctly accounts for scoreless byes
  • STandings” command correctly accounts for scoreless byes
3.050Dallas Open 2006
  • If you are using xterm terminal emulation and have specified the “event_name” configuration option, tsh will identify itself in your window title bar.
  • ShowscoreCard” formats correctly even when first and seconds are not assigned.
  • Under some circumstances, the downloaded executable files would not be executable for OS/X users. I think I've fixed the problem, and documented how to fix it locally if it recurs.
  • At Kath Mullholand's request, the “high-win” external command (and the other three similar ones) now display a header that identifies the division.
  • Quality of pairings is slightly improved by disabling a speed optimization that tries to pair first those players with a smaller number of candidate opponents, when the number of players to be paired in a group is no more than twelve.
  • At Mary Rhoades' request, the “ShowPairings” command now also generates alphabetical pairings listings in addition to the old rank-based listings.
  • The “Addscore” no longer accepts scores outside the range [-150,1500].
  • Added “UPSETs” command to list top ratings upset games.
  • The munge-scores.pl utility, used by several external and utility commands, now reports player numbers, so those external commands will report them too.
3.040Oshawa 2006
  • Colour prompts for Windows users disabled by default, still optionally selectable. Windows colour is apparently broken in the most recent ActivePerl distribution.
  • If an html_directory needs to be created, lib/tsh.css is copied into it.
  • Fixed an obscure bug in “ChewPair” that made it occasionally crash.
  • Utility command “util/truncate_t” is tolerant of blank lines.
  • Added top-level script “get-tsh.pl”, built using “update” external command, to act as a standalone download tool for tsh. That is, you can if you want to download just this one script, run it and it will fetch everything else for you. Useful if you have a mostly complete installation but have somehow managed to wreck either your “tsh.pl” or part of the software update mechanism.
  • The “update” external command was saying that some files had been updated even when no files had been updated. That bug is fixed.
3.030WSC 2005
  • Support for scoreless byes.
  • Fixed a bug that caused starts/replies to be instable.
  • Fixed “ChewPair” command and pairing system: Gibson spread threshold now based on some historical data, leaders paired against lower-ranked contenders.
  • Addscore” won't let you switch to a division whose results have all been entered.
  • AUPAIR command supports byes.
  • Added “player_number_format” configuration option.
  • Added “show_teams” configuration option.
  • RATings” command shows next opponent if paired. (Suggested by David Acton.)
  • 0-point bye counts as a loss, not a tie.
  • Fixed a bug where pairings display would stop if a table was unoccupied.
  • Fixed a bug in bin/munge-scores that led to games with byes appearing in high/low win/loss lists.
  • MISSing” command lists players in current standing order.
  • Tweaked code for reserved table assignments, think there might still be a problem.
  • For a few versions, you had to specify the max_rounds configuration option to make pairings commands work. This should no longer be necessary, though it is still recommended.
3.020Kingston 2005
("Now... with tint control!")
  • All remaining commands converted to using newer parsing code.
  • LOOK” command checks for dictionary at runtime.
  • UnPairRound” command does not affect inactive players, minor bugs fixed.
  • EditScores” command deletes future byes when a player is (re)activated.
  • RANDomscores” command sets spread to 50 points for scheduled byes.
  • Fixed a bug where if you asked for pairings too far in advance, inactive player records would still have byes added.
  • Colour prompts for Windows users too.
  • MISSing” command ignores inactive players, displays board numbers when known.
  • ShowscoreCard” shows board numbers.
  • UPDATE” command will delete read-only files (like src/TSH/blib/lib/TSH/Pair.pm) to make way for their replacements.
  • Addscore” prevents entry of Rd. N+1 results when Rd. N is incomplete even when switching divisions.
  • Several commands explicitly report when pairings have failed.
  • Added “RandomPair” command.
  • Added “team” extension field.
  • Added “config initial_exagony” configuration parameter.
3.010Kingston 2005
  • Added “ON” and “OFF” subcommands to“EditScore” to permit enabling and disabling a player.
  • ShowscoreCard” detects truncated .t files.
  • ShowscoreCard” reports nonstandard spreads for inactive players.
  • Removed a bug that caused multiple byes to be appended each round to inactive players.
  • Removed two bugs introduced in 3.000 that caused odd divisions to severely misbehave.
  • Removed bug introduced in 3.000 that caused round robins to fail sometimes.
  • UnPairRound command will delete scored byes if they are the only scores in round.
  • RANDomscores command deals more appropriately with partially scored rounds, completing them rather than adding one score to each player regardless of number of scores recorded.
  • Deprecated PartialSWiss command finally deleted.
  • First sample folder cleaned up.
  • RoundRobin command works with inactive players.
  • In many places, the division name is now not displayed if the tournament has only one division.
  • PAIR PairMany commands allows either player number to be zero for a bye.
  • PAIR, PairMany commands un-pairs opponents of repaired players, assigning 50-point byes if necessary.
  • KOTH, Pair1324 commands works with inactive players, uses consecutive repeat avoidance, matching starts and replies, minimizing repeats as secondary criteria.
  • FactorPair” command released.
3.000MWMST 2005
  • Finished implementing “ChewPair” command and pairing system, which is now the default if pairings are asked for and no other system was specified.
  • Added HUH” command for explaining error messages.
  • Rewrote HELP” command to give detailed help about individual commands.
  • Added AUPAIR command for exporting to that ratings file format.
  • Many commands rewritten to conform to new internal code standards to support faster software updates and smaller runtime memory usage.
  • Fixed a bug in “ShowPairings” which had caused it to omit boards where more than two players had erroneously been scheduled to play.
  • Added DEBUG command for selectively toggling debugging on and off.
  • SWiss” command is now just an alias for “NewSwiss”.
  • Added “config external_path” to allow user plug-in directories.
2.980NSC 2005
  • ResultsByRound” command creates printable HTML files.
  • Added very experimental versions of “FactorPair1” and “FactorPair” commands.
  • Added “config prize_bands” to expand support for Chew pairings.
  • Added “config save_interval” to auto-save when entering a large number of scores.
  • Added “config rating_system” to allow computation of ABSP tournament ratings in “rat” command.
  • Added “maketm” external command to generate TourneyMan data files.
  • Added “high-loss-round” external command to list high losses in each round.
  • Added “high-win-round” external command to list high wins in each round.
  • Added “util/parsetm” utility to import TourneyMan data files.
  • roto” allows any number of players per team.
  • showWallChart” syntax does not require “-f” before round number anymore.
  • External command “show12” shows counts of firsts and seconds for each player.
  • The board at which each game was played is recorded (in “etc board”) and will not change once assigned.
2.975ABSP compatibility
  • Added “ABSPgrid” command.
  • Added “config colour”.
  • Made external commands work with Windows XP.
  • Reorganized search algorithm for configuration files. It’s now (1) files or directories specified on the command line, (2) the most recently changed among */config.tsh and */tsh.config, or (3) tsh.config. The intent is that users should have one tsh directory with a subdirectory for each event.
  • Added “update” external command, which downloads updates to the distribution.
2.960Albany NY
  • Added “tuffluck” external command.
  • Partly functional version of “ChewPair” command added.
  • ScoreCard command generates HTML version that can be printed as replacement for lost scorecard.
  • WallChart command generates HTML version.
  • Round-by-round HTML files are automatically indexed.
  • New RATING subcommand in EditScores.
  • Contextual help in EditScores.
  • EditScores can be used before any results are entered.
  • Initial .t files may omit trailing semicolon.
2.950Toronto LCT
  • Addscore prevents entry of Rd. N+1 results when Rd. N is incomplete.
  • New external command “show12” displays table of firsts/seconds.
  • First/second forecasts/assignments are now more accurate.
2.940Stamford CT
  • Optional specification of configuration file on command line.
  • NewSwiss tries to minimize repeat pairings.
2.930CNSC 2005
  • Addscore reports how many scores remain unentered.
  • Two-part tournaments are correctly split-rated.
2.920Thunder Bay ON 2005
  • Added some more three-word names to tourney.pl.
2.910BAT 2005
  • Added config gibson.
  • Added config max_rounds.
  • The timestamp of the most recent score entered for each player is now recorded.
  • Added ROTO command.
  • Code for reserved table assignments is working again.
  • Forecasts of firsts and seconds are purged before new forecasts are generated, which addresses a potential problem with corrupt stale data when players have systematically misreported firsts and seconds.
  • Added config no_text_files.
  • Added config html_directory.
  • Autopair supports PAIR1324.
  • Fixed a bug that prevented calculation of the ratings of unrated players.
2.900BAT 2005
2.850NSSC 2005
  • Fixed a bug introduced to RoundStanding in 2.800 (?).
2.840NSSC 2005
  • Fixed a bug introduced in 2.800 (?) where missing pairs were displayed twice.
2.830NSSC 2005
  • Generated HTML is somewhat more legible and conformant.
2.820NSSC 2005
  • Corrected determination of firsts and seconds.
2.810NSSC 2005
  • Added external command (plug-in) interface
  • Partial support for active/inactive players
  • 'off' extension field in '.t' files
  • MISSING and ShowPairings show "draws" if players must draw
  • config name_format = "%-22s"
  • config max_name_length = 22
  • config assign_firsts = 0
  • showWallChart and showScoreCard adjust column with to widest team name.
2.800NSSC 2005
  • EditScore now displays the current scorecard before each prompt, rather than after changes.
  • You can now enter the word first or second at the EditScore prompt to specify that the player went first or second.
  • MISSING and ShowPairings display firsts and seconds if known.
  • config track_firsts = 1 enables tracking of who went first or second in each game. tsh will use NSA rules for determining firsts and seconds, and complain if scores are not entered in order of play if known.
  • Auto-pairing used to be available only when a division was completely unpaired. Now, you can still auto-pair even after entering a few manual pairings.
  • You can now write config variable = value instead of perl $config'variable = value in tsh.config.
  • Byes are automatically chosen and assigned by the NS, KOTHand Pair1324commands.
  • The BYE command is now deprecated. It is no longer documented, and will be deactivated soon. Use the PAIR and Addscore commands instead.
  • The ShowPairings command used to always list everyone and their opponent (if any). Now, if no players are paired, it says so rather than listing everyone as unpaired.
  • The PAIR command used to always echo back the names and standings of the players you just (manually) paired. Now it only does so if you changed an existing pairing.
  • The SWiss, PartialSWiss, PRESWiss and PrePreSWiss commands are now deprecated. They are no longer documented, and will be deactivated completely soon. Use NewSwiss instead.
  • You can now enter 'es' when in Addscore mode, to go into EditScore on the most recently entered (and presumably mistaken) score.
  • EditScore command sometimes didn’t correctly record changes when editing multiple divisions, does so now.
  • UnPairRound command used to sometimes give incorrect error messages, but no longer does so.
  • Pair1324 documentation used to say that below 4th place, pairings were KOTH. This is untrue (they continue 5-7, 6-8, etc.) and the documentation has been corrected.
  • All command parsers rewritten to give consistent response and more specific descriptions of syntax errors.
  • RoundStandings used to misreport results in the current round, if not all scores had been entered, now reports correctly.
  • Division name may now be specified in command lines, even when event only has one division.
  • Distribution now in ZIP format.
  • Documentation rewritten.
  • Randomization of player orderings is now much less random, so first-round table assignments stay stable unless roster is changed.
  • Some spurious warning messages deleted.
  • Support added for new generalized .t files.
  • ShowPairings now generates HTML.
  • Trailing commas in player names are suppressed.
2.740Newsday SSC
  • PairMany debugged.
2.730Newsday SSC
  • ShowPairings catches and shows more pairing errors.
2.720Newsday SSC
  • PairMany added.
2.710Newsday SSC
  • Player names may include nonterminal numerals.
2.700Newsday SSC
  • HTML output from standings command.
2.600Oshawa 2005
  • RoundRobin command added.
  • RATings command added.
2.500MWMST 2004
  • Trying to autopair a round twice doesn’t crash tsh.pl.
2.400Albany 2004
  • Fixed wc -f #.
  • Autopair works at start of tournament.
  • MISSING lists divisions in alphabetical order.
  • 'm' synonym for 'missing' in score entry mode.
2.300BAT 2004
  • Autopair added.
  • EditScore emits updated scorecard.
2.210Montreal QC 2004-03 LCT
  • Suppressed a spurious error message.
2.200Cambridge ON 2004
  • "Cambridge pairings" added.
2.100CNSC 2003
  • Addscore gives updated cumes as a check.
2.000MWMST 2003
  • MISSING lists missing data in score entry mode.
  • Teed log files have '.doc' extension, no embedded spaces.
1.900CWSCQT 2003
  • Added ShowPairings -p as kludge to work with make-rr.pl.
1.800Albany 2003
  • ScoreCard shows opp ratings.
  • UnPairRound reports on problem players.
  • Table numbers can be arbitrary strings .
  • Entering a division name changes divisions in score entry mode.
  • ShowWallChart -f r lists beginning with round r only.
1.700Boston 2003
  • EditScore added.
  • NewSwiss code added, first manually paired player can be 0 for an unscored bye pairing.
1.600Boston 2001
  • InitFontes works for any number of players, not just 4n and 4n+2.
1.500Toronto 2001
  • Various changes.
1.400Boston 2001
  • Various changes.
1.300Danbury 2001
  • Various changes.
1.2002000 CNSC
  • Various changes.
1.1031999 MWMST
  • First production use
1.000None
  • First release