Skip to content

Release notes

What’s New

Every release, newest first. Download the current build.

  1. 5.1.29

    Latest

    The draw no longer calls a hound the wrong breed over capital letters

    5.1.27 taught the draw to group "silken windhound" with "Silken Windhound". But the check that runs once the order is typed in still compared the two spellings letter for letter, so that hound was flagged as the wrong breed for her own stake and the draw could never be marked ready. It now compares them the same way the grouping does. Walk-In already fixes the spelling; this matters for hounds that came in from a CSV or an online entry.

    A hound scratched at roll call stays on that day's list

    "Who is entered in Saturday" would not take a hound off a day where she had a score, but it let you untick one who had been scratched at roll call or turned away at inspection. Doing that took her off Saturday's records packet, along with the scratch notation and the forfeited fee. She's now locked on that day, the same as a hound with a score.

    AKC files leave off a hound on the days he isn't entered

    A dog entered on Sunday only still got a row on Saturday's AKC results file, with blanks where a result would be, so the upload told AKC he was entered in an event number he never entered. It happened on the Fast CAT, Coursing Ability and lure coursing files alike. Each day's file now lists the dogs entered that day, plus any dog with something recorded that day. The pre-flight check no longer says "Nothing recorded in Saturday" about him either.

    Bringing in online entries again picks up a day someone added

    An exhibitor who entered Saturday online, was brought into the event, and then came back to add Sunday used to show as "already in this event. Nothing to add." He stayed entered on Saturday only, so Sunday's roll call, draw and records packet never had him. Online Entry now shows him as adding Sunday, and "Add to the event" puts Sunday on the same hound without making a second copy. If Sunday isn't paid for yet, it asks you first, as it does for any unpaid entry.

    Removing a trial no longer moves its one-day hounds into the other days

    A hound entered on Saturday only had nowhere to go when Saturday was removed, and GateKeeper read that as "entered in every trial". He then showed up on Sunday's roll call, draw and records packet. Removing a trial that some hounds are entered in and nowhere else is now refused, and the message names them. Enter them in another trial first, or withdraw them, and then remove it.

    Premium List keeps the venue and fees you corrected

    If you changed the location, the entry fee, the day-of fee or the closing time in the Premium List, closing it and opening it again put the event's value back over your change. Your change now stays for this event. A new year's event still starts from its own venue and fees, not last year's.

    The online entry form asks "flat-faced?" at ASFA trials with LCI

    At a regular ASFA trial the entry form didn't ask whether the dog is brachycephalic (flat-faced). But most ASFA trials also run LCI stakes, and at LCI that answer decides the dog's height class. The form now asks at any ASFA lure coursing trial, and says it only matters for LCI stakes. AKC lure coursing still doesn't ask.

    The walk-in desk and the hound record now ask it too: at the desk once an LCI stake is picked, and on the hound record for an LCI hound or one with no stake yet. Before, a flat-faced LCI dog entered at the table was measured into the wrong height class and nobody could correct it.

    Opening an event from the cloud no longer brings the last event's fee along

    Cloud Load kept the entry fee, day-of fee and closing date from whatever event was open before, so a second event's Premium List, walk-in fee and revenue total started from the first event's numbers. They're now cleared when a different event is opened. Check them in Settings.

    An older event opened from the cloud is no longer published as AKC

    An event made before GateKeeper recorded the association was published to the online entry form as AKC, and the form then stayed AKC for good. It now publishes no association, as it always meant to.

    Fees typed with a comma

    Typing 25,50 in the online entry fee or in Premium List now means $25.50. It used to become $2,550. 1,025 still means one thousand and twenty-five.

    Small fixes

    • Best in Event (AKC lure coursing) counts every hound in the event again, whichever day is on screen. Looking at Sunday used to drop Saturday-only hounds from it.
    • Walk-In's day ticks go by the trials' dates, so a Saturday trial added after Sunday's is no longer ticked for a Sunday walk-in.
    • On an archived event, "Who is entered" says the event is locked instead of saying the change was made.
    • GateKeeper opens a little faster: Operations, Settings and the printouts now load the first time you open them rather than at startup. They still work offline.

    The contact form and Report a Problem are harder to flood

    Switching between internet addresses on one connection no longer gets a fresh daily allowance. When the system is swamped it turns extra messages away instead of letting them all through. Each message emails support once, never twice. A report from an app with an odd install id no longer fails outright, and a club with brackets in its name, like "[ASFA] Hounds", can be answered from the inbox.

  2. 5.1.27

    Report a Problem sends it for you

    Report a Problem (Field Office, Data Tools) used to open your email program, or give you the text to copy. On a computer with no email program set up, the first button did nothing at all. It now has a Send it button that sends the report straight to support, with the build details the panel already showed you, and gives you a reference number once it has arrived. Add your email address if you would like a reply. With no connection, Open my email and Copy it instead still work exactly as before.

    ASFA scores are saved again

    At an ASFA trial, pressing Save Run in Race Control said "Run saved" and kept nothing. The last check before a run is stored still held every judge's card to AKC's maximum of 10 a category, and an ASFA card scores Speed and Agility out of 25, Endurance out of 20, and Follow and Enthusiasm out of 15. So every real ASFA card was quietly refused, and the screen reported a save anyway.

    Each card is now checked against its own association's limits, the same ones the score boxes already use, and the screen only says "Run saved" when the run was actually stored. If a run is ever refused, it says so in red and the scores stay on screen.

    Found by running a whole practice trial day through the app. Fourteen hounds showed "Run saved" and none of the fourteen scores had been kept.

    Each day of a two-day event has its own entries

    A weekend with a Saturday trial and a Sunday trial had one list of hounds, and every screen used all of it for whichever day was showing. A hound entered on Sunday only was on Saturday's roll call waiting to be called. It stopped Saturday's draw from being finished. It also went to ASFA on Saturday's records packet as a paid entry with no scores, counted in the per-capita.

    GateKeeper now records which days each hound is entered in:

    • Walk-In asks, with a tick box for each day. On Saturday both days start ticked. On Sunday only Sunday does.
    • Operations → Trial Day has a new Who is entered in Saturday list, where you can tick a hound on or off for the day you're looking at. It won't take a hound off a day where it already has a score or a scratch recorded, or off the only day it's entered in.
    • Online entries keep the days the exhibitor chose.

    Roll call, the entry desk, the draw, Race Control, the standings, labels, check-in sheets, the records packet and the progress bar all go by the day you're looking at. Events set up before this change are unchanged: every hound is entered in every day until you say otherwise.

    Walk-In asks for the stake and the registered name

    Walk-In had no stake box, so every walk-in went into Open. An ASFA Field Champion or Veteran entered at the table was drawn into the Open stake. There's now a Stake box at lure coursing events. It starts at Open.

    There's also an optional Registered Name box, because the ASFA results sheet has a Registered Name column and a walk-in's was always blank.

    A breed typed in lower case no longer makes its own stake

    "silken windhound" typed at Walk-In, at a trial full of "Silken Windhound" entries, was drawn as a separate Field Champion stake of one. Walk-In now uses the spelling the event already has for a breed, and the draw groups breeds the same way the placements do, whatever the capitals.

    The records packet names every hound properly

    • The Registered Name column was blank for every hound. It's filled in now.
    • A hound that didn't run (scratched at roll call, or turned away at inspection) was listed with its call name only. It now has its registration number, registered name and owner, like every other row.
    • The cover sheet printed the Best of Breed and Best in Field winners as a long code of letters and numbers. It now prints their names.

    The progress bar moves at lure coursing trials

    At an ASFA trial the progress bar stayed at 0% however many hounds were scored, because it only counted a hound as run once it had a time, and a judged course has no time. It now counts a scored card. A hound scratched at roll call or turned away at inspection now counts as done too, so the bar can reach 100% on a day with a lame hound.

    The score cards say who the judge is

    Race Control now shows the judge's name on each card. At a one-judge trial, the second card says that no second judge is named and it can be left blank. It no longer looks like a card that still needs filling in.

    The ASFA per-capita fee can be entered

    The records packet said "The per-capita fee is not set … Enter it before mailing the packet", and there was nowhere to enter it. There's now a box for it under Records packet on the Trial Day screen. Type the fee from the schedule of fees on asfa.org. It's kept for your club's next trial, and the cover sheet works out the amount owed.

    An ASFA event opened from the cloud now stays an ASFA event

    Opening an event through Cloud Load brought across its name, date and event type, but not which association it belongs to. GateKeeper treats an event with no association as AKC, because that is what every event was before ASFA support existed. So an ASFA trial opened from the cloud turned into an AKC one on the secretary's screen: AKC's wording, AKC's draw options, AKC's export files.

    The association now comes across with everything else. Events created before the association was recorded still open as AKC, exactly as before.

    Fees can be typed into Online Entry

    Typing 25 into the entry fee box came out as 2.01, and 30 as 3.00. The box rewrote itself after every key, so the second digit landed after a decimal point. It now keeps exactly what you type and tidies it to 25.00 when you move on. A dollar sign is fine too.

    The grey example amounts in the empty boxes now start with "e.g.", so an empty box no longer looks like it already has a fee in it.

    An ASFA premium now makes its trials

    Importing an ASFA premium created the event with no trials at all. The premium reader only knew AKC's numbered tests, and an ASFA premium has no AKC event numbers. Online Entry then said the event had nothing to enter.

    When the reader finds no trials in an ASFA premium, GateKeeper now makes one per day from the dates it did find (a Saturday and Sunday trial becomes "Saturday" and "Sunday") and shows them to be checked before the event is created. The premium reader has also been taught how ASFA trials work.

    An event with nobody entered yet no longer disappears

    The start screen only offered Resume Event once at least one dog was entered. An event set up from a premium, with fees and online entry ready but no entries yet, looked like it was gone. "Start new event" would then clear it without asking.

    It now shows up to resume from the moment it has a name, and "Start new event" asks first.

    Premium List starts from what the event already knows

    After importing a premium, Premium List still said the premium had no location, no AKC event number, no closing date and no entry fee. The event knew all four. It now fills them in, along with the end date and closing time, and this year's venue and fees replace last year's saved ones.

    Online Entry says why it can't publish

    For an event that exists only on this computer, the Online Entry screen told you to "claim or activate" it, which is about licences and doesn't help, and Open entries did nothing at all. It now says plainly that online entry needs the event in your club's cloud account, and the button stays off until it is. If a save fails for any other reason, the screen now says so.

    In the desktop app, the exhibitor link pointed at a file on the computer instead of the web. It now always points at the web app.

    The online entry form now knows which event it is for

    The public entry form, the one an exhibitor opens from a link in a premium or a club's post, could not tell which event it was serving. So it headed itself "Event Entry", and it asked every exhibitor the same questions whether or not they meant anything at that event.

    It now shows:

    • the event's name, date and venue at the top of the page, so an exhibitor can see they are entering the right weekend
    • the flat-faced (brachycephalic) question only at an AKC Coursing Ability Test and an ASFA LCI trial, the two events where it changes anything, with what it changes there: the 300-yard course at a CAT, the Small height class at LCI
    • the Veteran question only where the event has a Veteran category, which is lure coursing and LCI, and not Fast CAT or CAT
    • at an ASFA event, the registries ASFA accepts, under the registration number

    The flat-faced tick matters. It goes onto the dog's record and decides which course the dog runs at a CAT. An owner who did not know what it meant could have their dog sent down the wrong one.

    How it works: when you save the Online Entry settings, GateKeeper now also publishes the event's name, date, venue, event type and association alongside them. For an event whose entry link is already live, open Online Entry and save once. Until you do, that form shows the general explanations it shows today, which still work.

    An event created before GateKeeper recorded associations does not publish one, rather than have the app guess. Once published, an event's type and association cannot change, so a guess would be permanent.

    Every printed page now says who produced it

    GateKeeper prints a line at the bottom of a page saying the software produced it, giving the version, and stating plainly that GateKeeper is not affiliated with, endorsed by, certified or approved by ASFA, AKC or any sanctioning body.

    That line was on the results report and nowhere else. Not on the race sheet, the roll call sheet, the field sheets, either premium list, the running order, the staff roster — or the Qualified Courser certificate.

    The certificate is the one that mattered. It is an AKC form, a judge signs it, an owner signs it, and the club hands it in with a hound's first entry in an Open stake. It was leaving the club with nothing on it to say where it came from.

    This is not a small point for this product. ASFA's rulebook requires IT Committee and Board approval before a club may use a computer-generated running order, and GateKeeper ships that switched off because it does not have that approval. Software careful enough to do that should not then hand a registry a signed form that says nothing about what produced it.

    The line sits at the foot of the page, never beside a signature line or an entered value. Label sheets do not get one — the paper's own geometry is the layout, and a footer would push every label off its backing.

    Two export files could be made to run a command when opened

    Nothing has gone wrong, and nothing here is known to have been exploited. This is a hole being closed.

    A spreadsheet treats a cell starting with =, +, - or @ as a formula, so every file GateKeeper writes puts a guard character in front of one. That is not new. What was new is that the guard was written out three separate times, and two of the three were weaker than the one they said they copied — both with a comment claiming they matched.

    The two weak ones missed the full-width versions of those characters, which a spreadsheet also treats as formulas, and they used a mark that a spreadsheet throws away when it saves the file back out — so a file that looked safe became unsafe the second time it was opened.

    The two files are the ASFA records packet, which goes to the Records Coordinator, and the entries and payments sheet. The second is the one that matters most: every other export contains what a club typed, and that one contains what the public typed into the online entry form.

    All three now use one guard, and a test fails the build if a fourth is ever written.

    AKC lure coursing never checked whether a hound was old enough

    AKC lure coursing is open to hounds one year of age or older — tests and trials, Ch. I §3, and Ch. VIII §1 says it again for the Junior Courser and Qualified Courser tests. GateKeeper did not check it. Not a wrong warning: no warning, no setting, nothing.

    Every other event type already did. An ASFA trial checks it, a Coursing Ability test checks it, an LCI stake checks it. An AKC lure coursing trial fell between the two: the ASFA check is skipped because the club is AKC, and the Coursing Ability check is skipped because it is not a CAT.

    So a hound under a year could be entered, run, scored, and given championship points or a Junior or Qualified Courser pass toward a title it cannot hold — and a Qualified Courser certificate would print for it, for a judge to sign.

    It now warns at the moment of saving, the same way the others do, and says where the rule comes from so you can check it. It warns rather than refuses: eligibility is the club's call, and the app's job is to make sure nobody finds out months later.

    It says nothing about a hound with no date of birth on record. A club whose hounds were entered before GateKeeper had that field would get a warning on every single save, and a warning that always fires is one nobody reads.

    Fast CAT is now checked too. It was the one event type left, and for a few hours it stayed that way on purpose: twelve months was the obvious answer and no source here actually said so for Fast CAT, and guessing at a rule is how the Chapter XV mess happened. Brian found AKC's own page, which gives it as "at least 12 months of age", and that is what it now uses. All four event types gate on age.

    The Qualified Courser certificate certified less than the rules require

    Ch. XII §1.B asks the judge to certify four things. The certificate printed two. It said the hound completed the course with enthusiasm and without interruption and ran clean alongside the testing hound, and left out that it must sufficiently course the lure and must not appear to present a hazard to the other hound. A hound that ran clean beside another but ignored the lure does not qualify, and the judge signing was being asked for less than the regulation asks.

    The course is also two numbers, not one: 600 yards and a minimum of four turns. Only the yardage was there.

    And it said the certificate was needed for the "Open or Open Veteran stake". AKC has no Open Veteran stake — its stakes are Open, Specials, Veteran and Singles. That is ASFA's shape of words on an AKC form. The Veteran stake does need the certificate, but because it admits only hounds already eligible for Open or Specials, which is now what it says.

    Printing a Qualified Courser certificate printed the whole app with it

    The QC certificate is the form a judge signs, an owner signs, and the club hands in with a hound's first entry in an Open stake. Pressing Print on it sent the printer the entire application — sidebar, header, the leaderboard behind it — across however many pages that took, with the certificate laid over page one.

    Nothing about the preview showed it. The certificate looked right on screen and right on the first page of the print dialog. You would find out at the printer.

    Fixed, and the same check now covers every printable view in the app, so the next one cannot be added without it.

    The certificate said to email the AKC. It goes to the club.

    The footer read "submit the completed certificate ... to performanceresults@akc.org". An owner who did that would leave the club's results packet without the certificate, which is the one place the regulation requires it to be — and that packet is what makes the hound's Open stake entry valid.

    It now says to hand the certificate to the host club with the hound's first Open stake entry, and that the club includes it when the trial's results go to the AKC. It also names the two things a secretary gets asked at the desk: an ASFA Certification Course certificate may be used instead, and a hound with an ASFA or CKC Field Championship does not need one but must give the club a copy of that title certificate. AKC Lure Coursing Regulations Ch. XII §1.B.

  3. 5.1.20

    The website shipped 82 icons to draw three

    Nothing a visitor sees changes. The landing page downloads 35 KB less to draw it — 307.60 KB instead of 342.45 KB, or 97.94 KB instead of 110.73 KB over the wire — and that is on every page, on the connections this product is sold to people for having.

    The icon set is Font Awesome Pro, inlined as path data so there is no render-blocking request and no flash of unstyled icons. It was held as three big objects and looked up by name at the moment of drawing. That last part is what cost the 35 KB: a bundler cannot drop part of an object that is looked up by a variable, because it cannot tell which parts are ever asked for. So all 82 shipped, and the site draws three.

    Each icon is now its own item, which makes the question trivial: one nobody asks for is not in the build. Same icons available, same code to use one.

    Two things that sound like the fix and were not, measured rather than assumed: deleting a leftover import saved 0.11 KB, and a build-config flag saved 0.56 KB.

    Every Coursing Ability citation pointed at a chapter that no longer exists

    The app cited AKC's Coursing Ability rules as Chapter XV in twenty-two places, two of which a secretary actually reads: the refusal when a dog is under twelve months, and the note beside the flat-faced box explaining the 300-yard course.

    Chapter XV is the numbering from when CAT was one chapter of a larger combined book. The current "Coursing Ability Test (CAT) and Fast CAT Regulations" is its own document of eight chapters and has no Chapter XV in it. Anyone who went looking for the rule behind one of those messages would not have found it.

    The rules have not changed and were re-checked against the current text; only the numbers pointing at them moved:

    • The minimum age, twelve months: Ch. XV §3 is now Ch. 1 §2.
    • The 300-yard course: Ch. XV §9 is now Ch. 3 §3.
    • What counts as a qualifying run: Ch. XV §11 is now Ch. 3 §4.
    • The CA / CAA / CAX ladder: Ch. XV §13 is now Ch. 3 §5.

    Two corrections to what 5.1.18 said about roll call

    The 5.1.18 note below said the five-minute grace was "what both rulebooks say (AKC Ch. V §6.4)". Two things were wrong with that and both are fixed here and in the note itself.

    The chapter. It is Chapter VIII, not Chapter V — Section 6, "The following applies to all stakes", is in "Running the Meet, Trial and Test Programs". Nothing behaved differently, but a secretary who went to check would not have found it.

    "Both rulebooks." The 2026 ASFA rulebook does not appear to state a grace period at all. Ch. II §3.5 says only: "The Field Trial Chairman carries out, before the official draw, a roll call of entered hounds. Hounds not present shall be scratched." The countdown an ASFA club sees is a courtesy this app offers, not a rule it can quote, and it is left running unchanged while that is confirmed with people who run ASFA trials.

    Roll call quotes the rulebook that governs YOUR event

    The roll call screen told every AKC club that its five-minute grace came from Chapter V §6.4 — a chapter of the Regulations for Lure Coursing Tests and Trials. A Fast CAT is not run under that book. It is run under the Coursing Ability Test (CAT) and Fast CAT Regulations, which has no Chapter V, so a secretary who went looking for the rule would not have found it.

    Five minutes is right either way. What differs is the book and when the clock starts. Lure coursing, Ch. VIII §6.4: "Hounds absent at roll call or at the running of their course shall be scratched after a five (5) minute grace period." CAT and Fast CAT, Ch. 5 §1: "Dogs must be given 5 minutes grace time to arrive to the line when called." At a Fast CAT the screen now says the second one, because that is the one a club would be held to.

    The Running Order tab no longer offers a lure coursing draw at a Fast CAT

    Open the Operations Console at an AKC Fast CAT and there was a Running Order tab. It opened the AKC lure coursing draw: a course number and a blanket colour for every dog. Neither exists at a Fast CAT — dogs run singly down a straight hundred yards against a clock, and AKC's own glossary defines a course as "one, two or three hounds pursuing a lure" and a blanket as the cloth each one wears in competition.

    The tab now appears only where the event type actually draws into courses, which is lure coursing. A Fast CAT running order is a sequence, and the tool for that is unchanged: Run Order > Manage Queue under Reports, which orders the queue and resolves handler conflicts.

    The app stops calling a Corgi a hound

    An AKC Fast CAT and a Coursing Ability test are all-breed. The entry list at one is Corgis, Labradors and the occasional Pug — and roll call, the entry desk, the printed sheets, the pre-flight report, the publish button and the scoring screen all called every one of them a hound.

    Every screen now takes the word from the event: hound at a lure coursing trial, where both rulebooks use it on every page, and dog at Fast CAT, Coursing Ability and ASFA's Lure Chasing Instinct. That last one is ASFA's own distinction, not ours: the regular trial paperwork says hound throughout, and the LCI registration form says "This form is for dogs without any registration number from another registering body".

    The walk-in desk stops asking ASFA clubs for an AKC number

    Take a walk-in entry at an ASFA trial and the registration box was labelled AKC Number, with an AKC-style example under it, and it was required. ASFA takes far more than that: Ch. I §1 accepts AKC (ILP and PAL count as AKC), the NGA, the UKC, the FCI, another ASFA-approved registry, or an SPDBS critique number. So a secretary entering an NGA-registered Greyhound was being asked for a number the hound does not have, on the screen a club uses most.

    At an ASFA event the box now says Registration Number and lists what ASFA will accept. At an AKC event it still says AKC Number, because an AKC event does run on an AKC number.

    The flat-faced box now says what it will do at YOUR event

    The same form asked whether a hound is brachycephalic and explained, at every event of either association, that it "runs the 300-yard Coursing Ability course whatever its height". That is AKC's Coursing Ability rule. It is true at a Coursing Ability test and at none of the others — there is no 300-yard course at a Fast CAT, an AKC lure coursing trial or an ASFA trial.

    The question is now asked only where the answer changes something, and it says what it changes:

    • AKC Coursing Ability — runs the 300-yard course whatever its height.
    • ASFA LCI — runs in the Small height class whatever its height.
    • Fast CAT, and lure coursing under either association — the box is gone, because nothing turns on it.

    The box has NOT been hidden from ASFA clubs, which was the obvious thing to do and would have been wrong. ASFA's LCI stakes are divided on it: "Small Open: for dogs 17-1/2 inches or less at the withers and / or brachycephalic". An LCI secretary needs that tick, and now gets it with ASFA's reason beside it instead of AKC's.

    The same box on a hound's record, reached from the results screen, follows the same rule — so an imported tick can still be corrected wherever it matters.

  4. 5.1.18

    Coursing Ability clubs now get the handler warning too

    When you pick a hound to score and its handler ran another hound in the last ten minutes, GateKeeper says so — "Same handler as Bella, which ran 3 minutes ago. Give them time to get back." It is a note, never a block: a handler with help is your call.

    That warning only ever appeared at Fast CAT events. A Coursing Ability test has exactly the same shape — one hound at a time, one handler walking back from the other end — and saw nothing. It does now. At a Fast CAT event the warning also used to be printed twice, once under each run; it appears once.

    Lure coursing deliberately does not get it, and this is not an oversight. The warning is arithmetic on when a run was last saved, which at a Fast CAT is the moment the hound ran and at a lure coursing trial is the moment you typed in a judge's card — often a whole stake at a time, long afterwards. It would warn about a course that ran an hour ago. The lure coursing version of this question is answered where the running order is recorded, which checks that no one is handling two hounds in the same course.

    The weekend's combined score, for a club's own trophy

    Clubs often hang a trophy on the weekend as a whole — the hound with the highest combined score across both days. GateKeeper ranks one day at a time, because a placement is a rank within one stake on one day, so that total was arrived at with a calculator and two printed score sheets at the end of a long afternoon.

    At a multi-day AKC lure coursing event the leaderboard now carries a Combined score table: each hound's score on every day, the total, and how many days it scored on. Pick a breed to answer a premium written for one, as SANE's is.

    Open, Specials and Veteran only. A Junior or Qualified Courser test is pass/fail and Singles is not a championship stake, so neither is added in. A hound entered Open one day and Veteran the next has both days counted.

    GateKeeper awards nothing here and records nothing. The heading says so: this is not an AKC award. Two hounds on the same total are both shown on the same rank with the tie called out, because a tied perpetual trophy is a run-off or a committee's decision. A hound that ran one day of two is still listed, with "1 of 2" beside it, because whether it is eligible is in your premium and not in this app.

    The table does not appear at a one-day event, where the combined score and the leaderboard score are the same number, nor at an ASFA trial, whose stakes are not these three.

    AKC clubs can record their running order

    Draw Entry, the screen for typing in the order your club drew, only ever appeared at ASFA trials. An AKC secretary had nowhere to put a running order at all, so Field Sheets said "No courses drawn yet" over the paper sitting on the table, and no steward sheet could be printed from it.

    There is now a Running Order tab at AKC events. Type the course number beside each hound, and the blanket colour if your club drew those too. The steward sheet in Field Sheets is built from it, exactly as it is for an ASFA club.

    GateKeeper still does not draw for you. The order comes off your paper. What it does is check it, and say what is wrong before the hounds are at the line:

    • Two hounds under one handler in the same course. AKC Ch. VIII §9.1 says a person may not handle more than one hound in a course, so this is an error rather than a note — one person cannot hold two slip leads. Unless the stake has only one course, where §7.3 says those hounds run together unless the owner brings someone to handle the second or scratches one, with no refund. That one is a note with a decision in it, and the decision is the owner's. It comes up at a small specialty stake: three hounds, two of them one person's, and there is nowhere else to put them.
    • A course of four, or a Singles course with two hounds in it, which Ch. VIII §5(e) runs alone.
    • Two hounds drawn to wear the same blanket.
    • Blankets that do not follow the draw. Ch. VIII §6.10 puts the first hound drawn in yellow, the second in pink and the third in blue, so a brace in pink and blue has no first-drawn hound in it.
    • A stake divided into more courses than it needs — §6.10 asks for trios where possible. That one is a note, not an error, because "if possible" is your call and there are good reasons to hold a hound out of a trio.
    • A hound in the wrong stake, drawn twice, or left out of the order altogether.

    If your roster spells a breed in lower case — which is what happens when you import entries rather than type them — the Running Order used to mark every hound in the stake as being in the wrong draw: "Ash is a whippet in the Whippet draw." Breeds are now matched the way the rest of GateKeeper matches them, so capitals and spacing make no difference.

    Errors and notes now look different on the screen, and the line at the top counts the notes, because an order can check out and still have something worth reading.

    Checks wait until a stake is completely drawn, so a half-typed order is not reported as a broken one. Nothing here asks you to split a stake into flights at twenty: that is ASFA's rule and AKC does not have it. AKC has a split rule of its own — Ch. VIII §6.11 splits a stake "each time the entry is sufficient to hold two (2) or more five (5) point majors" — which depends on your breed and region, and GateKeeper does not check it yet.

    Singles is one group across every breed, matching how it is placed.

    AKC clubs can record roll call

    Field Sheets has always printed a roll call sheet for any club. Only an ASFA club could ever fill it in — the screen that records roll call lives on the Trial Day tab, and that tab only appears at ASFA trials. So an AKC secretary printed a sheet on which every hound read "pending" for ever, and the "scratched at roll call" note on the steward sheet could never appear.

    There is now a Roll Call tab at AKC events. Call a hound, mark it here, or scratch it, and the sheets and the steward sheet follow. If your event has more than one test, each keeps its own roll call, and the picker at the top switches between them.

    Five minutes' grace from the moment a hound is called (AKC Lure Coursing Regulations Ch. VIII §6.4). When the grace runs out the row says so and leaves the decision to you — nothing is scratched automatically. A hound that runs up at 5:01 is a word with the huntmaster, not a lost entry fee.

    ASFA clubs are unaffected: roll call stays on Trial Day, beside the draw and the entry desk it belongs with.

    Ticking one hound as qualified no longer drops the rest

    At an AKC lure coursing trial, the first hound you ticked as qualified used to change every other hound's result. GateKeeper reads "somebody has started recording qualifying" from that first tick, and from then on treated every hound you had not yet reached as not qualified, which took its placement away. Work down a roster of thirty and the leaderboard was wrong for everyone below wherever you had got to.

    Now, once a trial is recording qualifying, a hound you have not ticked is judged on its scores instead — the same Ch. IV §7 arithmetic described above. Your tick still wins wherever you have made one, because the two things §7 leaves to the judges are yours to record and not GateKeeper's to guess.

    A trial where nobody has ticked anything is unchanged. Every hound is placed as before, and nothing already saved in your vault moves.

    AKC Singles is one stake, not one per breed

    AKC's rules are explicit that a Singles stake is judged as a single field: "Single Stake entries from all breeds shall be combined to determine placements" (Ch. V §5(g)). GateKeeper was placing it per breed, so a Singles stake of four Salukis and three Whippets came out as two stakes, each handing out its own blue ribbon, its own red and its own yellow.

    It is now placed as one field, and the group is called All breeds rather than being labelled with whichever breed happened to be in it — a run-off card reading "Saluki Singles" sends you looking for a stake that does not exist.

    Nothing changes for Open, Specials or Veteran, which stay per breed. The Singles winner is still kept out of Best of Breed and Best in Field, as §5(h) requires.

    The window has a minimum size

    The app window could be dragged down to a sliver with no usable layout left in it, because no minimum was ever set. There is one now. It is deliberately generous — small enough that a tablet held in portrait can still show the whole window, which matters more than keeping the two-column layout at every size.

    The results file names the judge who actually saw the hound

    The Judges column of the AKC lure coursing file carried every judge at the event on every row. If you had named a judge on the test and a Judge A and a Judge B, all three went beside every hound, whoever actually stood at that course. And because nothing checked for repeats, a club whose test judge is also Judge A got that name twice on every line.

    Where two judges divide an all-breed trial between them, this was worse than untidy: the file told AKC that both judges saw both halves, which is the one thing the Judges column is there to answer.

    New on the Trials tab: Judges by breed. Only if your judges split the breeds between them. Type the judge beside each breed and the results file, the Qualified Courser certificate and the title records all name that judge for those hounds. Leave a breed blank and it names the whole panel, which is what every event has always done.

    It appears at AKC events with two or more breeds entered and somebody on the panel to assign, and nowhere else. If your panel judged everything together, do nothing — the only change you will see is that a judge is no longer named twice on the same row.

    This also matters for Junior Courser. JC needs two qualifying runs under two different judges, and a hound whose two runs were credited to the same person was short a leg it had actually earned.

    GateKeeper works out whether an AKC course qualified

    The two "Qualified" tickboxes at an AKC lure coursing trial were the only thing deciding whether a course counted. Nothing in GateKeeper ever worked the answer out, even though it had the scores — and those two ticks decide Senior and Master Courser legs, the Qualified column of the file you send AKC, and what the result card shows.

    Each course now says what the scores make it, beside the tick: every judge's total, what the regulation needs, and — when it is not a qualifying score — which judge fell short and by how much. Where that differs from the tick, there is a button to put it right.

    The rule is AKC Lure Coursing Regulations Ch. IV §7: 50% or more of the total points from each judge, so 25 of 50 on every card rather than 50 across the pair. A hound given 40 by one judge and 20 by the other has 60 points of a possible 100 and has not qualified — worth knowing, because that is the arithmetic most people do in their head.

    It offers, it does not decide. Section 7 lets the judges give a qualifying score to a hound that did not complete the course where there were extenuating circumstances, and withhold one from a hound whose run would not have passed a Junior Courser test. Neither of those is a number, so the tick stays yours — GateKeeper says what the scores say and leaves the box alone until you press the button. Both clauses are quoted on screen where they apply.

    One genuine ambiguity is flagged rather than buried: §7 puts the qualifying sentence before the pre-slip and course-delay deductions and does not say which the 50% is measured against. GateKeeper measures it against the adjusted total, because that is the score of record — but where a deduction is the whole difference between qualifying and not, it tells you so, so you can take it to the judge on the day instead of hearing about it from AKC.

    Nothing changes at an ASFA trial. ASFA's qualifying rule is a different one and ASFA clubs do not type qualifying in at all.

    The AKC lure coursing results file carries the results

    Export AKC at a lure coursing trial produced a file with Fast CAT columns on it: Run 1 Time, Run 1 MPH, Run 1 Points, Total Points. A judged course produces none of those, so every result column on it was blank, under headers promising miles an hour. It also wrote the call name into the Registered Name column, and carried six columns nothing in GateKeeper records and no screen can fill: Sex, Date of Birth, Address, City, State and Zip.

    The file now carries what a lure coursing result is: stake, preliminary, final, combined, placement, Best of Breed, Best in Field, qualifying where the trial recorded it, disposition, and the judges. The placements are the same ones on your leaderboard, so the file cannot disagree with the screen you checked it against.

    This is still GateKeeper's own column set rather than a format checked against an upload AKC has accepted, and the screen still says so. What changed is that there is now something on it worth checking.

    AKC clubs can record that a hound was absent or excused

    "What happened to this hound" only appeared at ASFA trials, because the rules written into it come from the ASFA rulebook. The cost was that an AKC club had no way to record an absence at all. An entered hound that never appeared went onto AKC's results file as a blank row that looks exactly like a hound whose time was lost, showed up on the pre-flight check as "nothing recorded" with nothing you could do about it, and could not be shown as absent on a published results page.

    The panel now appears at every event and asks in your own registry's words. An AKC club gets Ran, Absent and Excused, with a reason box for your own records. Dismissed and disqualified stay out of it: which one a pair of judges' calls produces is ASFA Chapter VIII arithmetic, and GateKeeper is not going to guess what AKC wants in its place.

    A hound with no measured height can now be marked absent. Before, the check that stops you scoring a hound without a height also stopped you recording that it never ran.

    Fast CAT and Coursing Ability clubs can publish results

    The Publish Results button on the leaderboard read "Nothing to publish yet" at a Fast CAT or Coursing Ability event no matter how much had been run. It only ever knew how to build a page from lure coursing placements.

    It now publishes a timed event too. A Fast CAT hound gets its speed and its points ("22.35 mph · 44.70 pts"), a Coursing Ability hound gets how many of its runs qualified, and a hound that was absent or excused says so. No placements are shown, because AKC awards none at a Fast CAT and a page that implied one would be inventing a result. Hounds that have not run yet are left off rather than listed blank.

    Nothing else about publishing changed: still a snapshot you press for, still no owners or registration numbers on the page, still labelled unofficial.

    The chute warns when a handler is being asked to run two hounds at once

    Run Entry was meant to warn when the hound you have just selected belongs to a handler who ran another hound in the last ten minutes. It never did, for any hound at any event: it looked for an owner field GateKeeper does not record.

    It works now, it matches handlers the same way the run order screen does, and it names the other hound and how long ago it ran, so you can see at a glance whether it is the same person or two people who happen to share a surname. It only looks at the trial you are scoring. It is a warning and never stops you recording a time.

    The pre-flight check asks for what the files actually need

    The pre-flight check used to demand an owner address, city, state and zip from every hound. Nothing GateKeeper exports uses those four fields, and no screen lets you enter one, so a normal event opened this screen to a wall of red and there was nothing to do about it. They are gone.

    What it asks for instead is what the upload needs. At a Fast CAT it now checks every hound has a height, because without one the hound cannot be scored at all and the Handicap column on AKC's file ships blank. Under AKC it says when a hound has no registered name, since that is what AKC files the result under.

    It reads every trial in the event, not just the one you are scoring. Saturday's missing times used to be invisible on Sunday, which is when a secretary runs this check.

    And it separates what will be wrong from what is worth a glance: a hound that has not run yet is no longer listed as an error in red beside a hound with no registration number. Withdrawn entries are left out and counted, because nothing is uploaded for them.

    Only your own registry's export is offered

    The pre-flight screen offered every club both an AKC export and an ASFA score summary. An AKC Fast CAT event now shows the AKC files, and an ASFA trial shows the ASFA summary.

    Trial and test details can be corrected after the event is created

    The Operations Console has a new tab, Trials under ASFA and Tests under AKC, listing the trials in the event. The name, the date, the judge and the AKC event number can be corrected at any point, and a trial can be added to an event that was set up with one. Before this, everything about a trial was fixed in the new-event wizard, so an AKC event number typed from the wrong line of the premium could only be corrected by starting the event again and re-entering every hound.

    Under AKC the screen also says up front what the results upload will trip on: a test with no event number, or two tests sharing one.

    Removing a trial is deliberately limited. A trial that has a hound with anything recorded in it, or a roll call, inspection or draw, or a recorded award, cannot be removed, and the screen says which of those is in the way. Those all hang off the trial, so removing it would take a day's work with it. An empty trial removes after a confirmation, and if it was the one being scored, scoring moves to the first trial that is left.

    The lobby says whether the event on this computer is AKC or ASFA

    The "Current Session" card on the lobby now shows the association and the kind of event under the club name, for example "ASFA · Lure Coursing · 2 trials". If you keep an AKC copy and an ASFA copy of GateKeeper open side by side, you can tell them apart before you press Resume.

    The access-code box and the Club Licence box no longer look alike

    Both sat in Settings addressing "beta testers", and they take different things: a short code like ASFA-BETA in one, the long signed licence in the other. A licence typed into the code box came back as "not a valid code", which reads as though the licence is broken. Each box now says which one it is, and the code box points a club licence at the right place.

    The Windows app can connect to a timer

    Connect Timer could not work in the Windows desktop app at all: the app never answered Windows' question about which serial port to use, so the request was cancelled every time. It now picks the port itself, preferring a USB serial adapter and leaving a Bluetooth port until last, and the button says which port it connected to. If it picks the wrong one, disconnect and press Connect again and it tries the next port. The browser version is unchanged: there you pick the port yourself.

    A redeemed licence now says so

    When you paste a club licence and the device has a connection, GateKeeper reports that the licence was activated, so we can tell a licence that never arrived from one that arrived and worked. A device that already holds a licence does the same about once a month, and only when it is online. It is the licence and the build version, nothing about your event or your hounds, and the redemption screen says so. A licence redeemed at a field with no signal reports nothing and works exactly the same, now and forever: nothing about a licence is ever checked against a server.

    Fast CAT: walk-ins and online entries can be scored

    A hound added at the walk-in desk, or brought in from online entries, had its height recorded but no handicap, so Run Entry refused its time with "no measured height" and the Handicap box showed 1.00. Only hounds imported from a spreadsheet could be scored. The handicap now always comes from the hound's height (2.0 under 12 inches, 1.5 from 12 to under 18, 1.0 at 18 and over), everywhere it is used: Run Entry, the saved run, the results table and the race sheet. Correcting a hound's height now changes its handicap for the runs you record after that; runs already saved keep the points they were given. A hound with no height shows "No height" instead of 1.00.

    Fast CAT: a time typed without its decimal point is no longer read as minutes

    Typing "875" in a Fast CAT time box used to turn it into "8:75", which the app read as minutes and seconds (555 seconds). A Fast CAT run is always seconds, so the box now leaves "875" as typed and the speed read-out shows at once that something is wrong. Type the decimal point: 8.75. Coursing Ability times still accept minutes and seconds.

    Registered names reach the AKC and ASFA files

    Hounds imported from a spreadsheet or from online entries lost their registered name on the way in, even when the file or the entry form had one, so the AKC results file and the ASFA records packet listed them by call name. Both imports now keep it. A hound's record (open it from the results screen) also has a Registered Name box, so a walk-in's can be typed in and a wrong one corrected.

    AKC files say how many hounds have results

    Every entered hound gets a row in an AKC results file, with blanks where it has no result in that test, so a file for a test where nothing had been recorded still said "40 rows". Each file in the export list now also says how many rows have results, and a file with none gets a red warning to check you are on the right test before uploading it.

    Printed results and race sheets say which test they are for

    In an event with more than one test or trial, the printed results and the race sheet showed only the club and the event's first date, so the pages for two tests looked the same and a Sunday sheet carried Saturday's date. They now show the test or trial name, its date, and at an AKC event its event number.

    The progress bar counts the test you are on

    In an event with more than one test, a hound counted as done once it had run in any of them, so the progress bar read 100% as soon as the first test was finished. It now counts the test in view, and switching tests switches the bar.

    AKC: Junior and Qualified Courser passes no longer knock trial hounds out of the placings

    At an AKC event where the JC or QC test is scored under the same test as the trial, ticking a test hound's "Qualified" box used to switch on qualifying for the whole trial, so every trial hound you had not ticked was listed as not qualified and left out of the placings. Only the trial stakes' own ticks count for that now. JC and QC hounds are pass or fail, so they are no longer given a placement or a ribbon either.

    AKC: the Qualified Courser certificate names the judge and the day

    The printed QC certificate had a blank judge line and always showed the event's first date. It now shows the judge of the test the hound passed in and that test's date. The judge number is still left for the judge to write in.

  5. 5.1.15

    Opening a cloud event no longer empties the event on this device

    Opening an event from the Cloud Dashboard replaces the event on this device, and it used to do that without asking. With no internet connection it was worse: the list of hounds came back empty, so the event on the laptop was replaced with an empty one.

    Now GateKeeper refuses to open a cloud event while you are offline, asks first when there is an event on this device (and says how many hounds it would replace), and leaves your event alone if the hounds can't be loaded.

    Saved event files say AKC or ASFA

    A club running AKC and ASFA on the same day saved two event files with the same name, so saving the second could replace the first. File names now include the association and the kind of event, for example gatekeeper_sane_asfa_lure_coursing_2026-09-26.json.

    Roll call sheets say which trial they are for

    The check-in sheet is now called the Roll Call / Check-in Sheet and prints the association (AKC or ASFA), the trial, and that trial's date. In an event with more than one trial, a Trial picker at the top of the sheet lets you print one sheet per trial.

  6. 5.1.14

    Saturday's Best of Breed no longer carries into Sunday

    In an event with two trials (or two days), a Best of Breed, Best in Field or tie result you recorded in one trial was also applied to the other, and overrode that trial's own scores. Recorded results now belong to the trial they were recorded in. Results recorded before this update stay with the first trial.

    Text boxes could stop typing in the Windows app after a pop-up

    In the Windows desktop app, a pop-up question from the system (the plain grey "OK / Cancel" box) could leave text boxes refusing to type until you clicked away from the window and back. That is a known problem in the framework the desktop app is built on. Start New Event asked that way and then opened the new-event form, whose first box is the event name.

    Every one of those pop-ups is now part of GateKeeper's own screen instead: starting a new event over the one on this device (it says how many hounds it will clear), archiving an event, and removing a judge. The safe answer is selected first, and Escape cancels. Messages that used a pop-up now show as a notice instead: a failed copy of the run order, copying a run card, and problems starting a checkout. A run card that could not be copied used to say nothing at all; it now says so.

    Draw Entry follows ASFA's rules on an owner's hounds

    The entry desk has a new box, Split courses. Tick it for an owner who checked the box on the entry form asking for their hounds to run in different courses.

    Draw Entry now checks an owner's hounds the way the rulebook does (Ch. V §9):

    • Two of one owner's hounds in the same course are flagged only when that owner asked for different courses. Before, Draw Entry flagged them every time and said to separate them, which would have meant changing the club's random draw.
    • In a split stake, every owner's hounds should be spread across the flights, whether or not they asked. That note used to appear only for owners who had asked, and only when every hound was in one flight. It now also catches three in one flight and one in the other.
    • When a stake has only one course, Draw Entry reminds you that the owner's hounds run together unless the owner scratches one, with no refund.

    These are notes, not errors, and they name the hounds by call name. The trial day screen now says how many notes are waiting, so "the order checks out" no longer hides one you have not read.

    A spreadsheet import reads the same box from a column called Separate Courses, Split Courses, Divide Courses or Separate Hounds (Y, Yes, X or 1 means ticked). A hound whose imported entry has it ticked shows the box ticked at the entry desk. A file without that column leaves the box as it was. At an ASFA trial the hound's own record (tap the hound on the results screen) has the box too, so an imported tick can be corrected there.

    Trial 1 and Trial 2 in one event each get their own morning

    An event can hold more than one trial (ASFA's Trial 1 and Trial 2 on the same day, or a Saturday and a Sunday). Until now the trial day screen kept one roll call, one set of inspections, one draw, one entry desk and one delay log for the whole event, so both trials shared them.

    Each trial now has its own. The trial day screen shows which trial you are on, with buttons to switch, and switching trials switches the whole morning. The steward sheet, the flights on the results screen and the records packet all follow the trial you are on. A morning recorded before this update stays with Trial 1.

    In the new-event wizard an ASFA event now says Trials and Add Trial, and no longer asks for an AKC event number. The switch at the top of the trial day, scoring and results screens says Active Trial in an ASFA event.

    Records packet, ribbons and printed results were empty in an event with trials

    When an event has trials, GateKeeper keeps each hound's scores per trial. The records packet, ribbon labels, printed results, running order, inspection sheet, pre-flight check, ASFA results file, the emergency export and the AKC lure coursing file all looked for scores the old way, found none, and came out with every hound listed and no scores or placings. The results screen was never affected.

    All of them now use the scores of the trial you are on. The emergency export includes every trial, one row per hound per trial, with the trial named. The AKC lure coursing export writes one file per trial, like the Fast CAT and Coursing Ability exports already did.

    A records packet that lists hounds but has no score or absence recorded for any of them is now blocked ("No scores have been recorded for this trial") instead of being offered as ready to send.

    Flights you type into Draw Entry now split the placings

    When a regular stake has 20 or more entries, ASFA splits it into flights and each flight gets its own 1st through 4th. Draw Entry has a Flight column for exactly this, but the results screen never read it. A club that split a big stake and typed every hound's flight in still saw one set of placings, and a red "needs a flight split" warning that nothing would clear.

    The results screen, the records packet, the ribbon labels and the ASFA results file now all use the flights recorded in Draw Entry. If only some of a stake's hounds have a flight, the stake is still placed as one and the warning says how many are missing, because splitting a half-recorded stake would hand out a placing nobody won.

    The warning now also says where to fix it ("record flights in Draw Entry"), and a stake that was split but breaks the ten-per-flight rule no longer tells you it "needs a flight split". It says the recorded split cannot stand.

  7. 5.1.11

    The steward sheet now prints the draw your club typed into Draw Entry

    At an ASFA trial the club draws on the grounds and the secretary types the order into Draw Entry. The steward sheet only ever read the computer draw, which ASFA clubs are not offered, so a secretary who had drawn and typed every hound in opened the steward sheet and was told "No courses drawn yet."

    It now prints your club's courses, with the course numbers exactly as drawn (gaps included), split by breed and stake the same way Draw Entry shows them, with the flight shown on a split stake.

    Blanket colours are optional. Draw Entry has a new Blanket column. If your club decides who wears yellow, pink and blue at the draw table, type them in and they print on the sheet. If colours are settled at the chute, leave it blank and the sheet prints an empty box to write the colour in. GateKeeper never fills a colour in for you: a colour on the sheet that disagrees with the club's paper is worse than a blank.

    Two hounds in the same course given the same colour is now flagged as a problem on the Draw Entry screen, and the printed running order shows each recorded colour beside the hound's name.

    The "Email us" line on the pricing screen is now an actual email link

    It read "Questions before you buy? Email us — a real person answers." and nothing happened when you clicked it. That sentence sits above a $199 club licence, aimed at exactly the treasurer who wants to ask something first, and it was a dead end.

    It now opens your mail program with the address and a subject already filled in. It opens in the same window on purpose: in the desktop and portable builds a link that tries to open a new window is blocked and would do nothing, which is how the line came to be text in the first place.

    GateKeeper now says plainly that it is beta, and that no association stands behind it

    Two facts used to live only in the Terms of Service on the website, which is to say they lived where nobody reads them. They are now on the price screen before you spend anything, in Settings under "What GateKeeper is, and is not", and in small print at the bottom of every page the program prints — including the records packet, which leaves the field and travels somewhere GateKeeper cannot follow it to explain what it is. The printed line carries the build number too, so a question about a sheet three weeks later starts with a fact.

    The wording: GateKeeper is independent software. It is not affiliated with, endorsed by, certified or approved by ASFA, AKC, or any sanctioning body. Your association's rules govern your event, and where GateKeeper and the rulebook ever disagree, the rulebook is right.

    Support address is defined once

    The support email was written out in two files that agreed only by luck. One was built from the site domain and one was a literal, so changing the domain would have left every problem report addressed to somewhere nobody reads, with nothing failing to say so. There is one definition now.

  8. 5.1.9

    You can tell us something is wrong without leaving the app

    Field Office → Data Tools → Report a Problem. Write what happened, and it fills in the rest: which build you are on, what kind of event it is, how many hounds and how many runs are recorded. It shows you the whole message before it sends anything, and it sends counts only — no dog names, no owner names, no addresses.

    If your email is not set up on that machine, it copies the message instead so you can paste it anywhere.

    Before this you had to remember the version, and nobody does.

    A licence you were sent no longer needs an account

    Paste it on the first screen and you are in. There is no sign-up, no sign-in and no internet involved — the licence is checked on your own machine.

    It used to be behind a sign-in that a reviewer with no account could not get past, which is the exact opposite of what a signed licence is for. The screen that reports a problem with a saved licence reads as one sentence now, too; it used to run two sentences together into something nobody could parse.

    The app now says so when your computer will not let it save

    If storage is blocked — a locked-down browser, private browsing, a policy on a club laptop — you get a message naming the problem instead of a stack trace on a white screen.

    Worse, some things reported success when nothing had been written. Export Portable Backup said "Backup created." when no file existed. That and two other exports now tell you plainly when a file did not save, and offer the share sheet on a device that has one.

    A portable copy tells you where to get the new one

    A portable build cannot update itself — the file is the app, on your stick — so it checks whether a newer version exists and hands you a link.

    The link used to be missing unless the build had been configured with one, so a secretary at a field was told "replace this file" and given no way to find the file. It now points at the same place the update check just read from, which is the one address the app knows is reachable.

    The logo in the app is the logo in your browser tab

    They were two different drawings. Everything else had been redrawn — the installer icon, the tab icon, the phone and tablet icons, the website — and the one inside the app had been missed.

    You can now see which build you are running

    Settings shows the version in its header, and About this build gives one line — GateKeeper 5.1.1 (desktop, built 2026-09-10) — with a Copy button, to paste into an email when you write in about a problem.

    It was not there before. The version was inside the build the whole time and appeared on no screen, so a club reporting a bug could not say which build they were on and neither could anyone else. Crash reports now carry the same line, so what you read out and what we receive cannot describe different builds.

    High Scoring Singles is awarded now, not worked out at the table

    Ch. VII §2 lists High Scoring Singles — Navy and Gold among the ribbons every host club shall use. GateKeeper knew the colour and never knew whose it was, so you printed a rosette with nobody's name on it and settled it by hand.

    It could not be worked out before. While Singles was scored per breed, six breeds in Singles meant six firsts and six candidates for one ribbon. Now that Singles is one stake across every breed, the high scorer is one hound.

    It is not simply the blue-ribbon winner, and two ordinary cases separate them: a stake split into flights has two firsts and one high score, and an unbroken tie for first can leave a flight with no first at all.

    Two hounds level at the top are shown as tied, not picked between. And a hound under the placement floor cannot take it — a rosette reading "high scoring" on a hound the same sheet of labels says did not qualify is the app arguing with itself.

    The Registered Name column on the packet is no longer always empty

    ASFA matches your records on the registered name. Ch. VII §3 awards every title "as a suffix to the registered name", and the packet has a column for it — which was blank for every hound at every trial. The column existed, the CSV printed it, and nothing in the app ever put anything in it.

    It is filled now, from the registered name on the hound's record, falling back to the name field where that is where your import put it.

    One deliberate blank. If all the app has for a hound is a call name — which is what a quick walk-in leaves behind — the column stays empty rather than repeating the call name. A blank tells the Records Coordinator the name is missing, which is true and fixable. A call name in that column tells them "Ash" is a registered name, which is a wrong answer that looks like a right one.

    Best of Breed and Best in Field points are now on the records packet

    This one under-reported points at every trial. Check anything you have already filed.

    Winning a Best of Breed is worth championship points — Ch. V §7 awards the winner "points equal to the points awarded the highest-placing hound in that breed which it defeated". Winning Best in Field is worth more on top (Ch. V §11(e)). GateKeeper computed neither. It recorded who won, printed the rosette, and then sent ASFA the stake placement alone.

    A hound that took a first in a stake of three and then won its breed off a Field Champion first was worth 20 points and was reported as 12.

    Both are computed now and both are on the packet. Three things worth knowing:

    • Only a Best of Breed run earns points. §7 says so in those words. A breed with one stake winner is settled on combined scores with no run, and earns none — there is no defeated hound to take the points from.
    • The Best in Field winner is capped at 40 for the trial, which is where §11(e) puts the ceiling.
    • A Best of Breed winner is not capped, because the rulebook does not say it is. If your BOB winner's total comes out above 40, the trial day says so and asks you to check with the Records Coordinator rather than quietly trimming it.

    One figure still needs a ruling. §11(e) says Best in Field points are "determined by the number of hounds actually defeated in the BIF run" — it names the quantity and not the multiplier. GateKeeper reads it as four times the hounds defeated, which is the smaller of the two readings, and says on screen which reading produced the number. If ASFA means four times the hounds competing, it is four points a trial higher. Ask before you file a close one.

    Your trial's date was a day early on every screen and every printed sheet

    If you print the race sheet or the roll call sheet, this one was on paper.

    A trial dated 9 May showed as 8 May — in the header, in the sidebar, on the race sheet, on the roll call sheet and on the printable report. Every club west of Greenwich saw it, which is every American club.

    The date is stored as a day. The app was reading it as midnight in London, which is the evening of the day before in Colorado. It is the same mistake that was making clubs a day late for their records deadline, one screen further out.

    The entry desk refused every entry unless you had uploaded a premium

    Check this if the trial day ever told you nothing could be accepted.

    Certification is measured against your closing date, and the trial day looked for that date in one place only: a premium list you had uploaded and built. If you had not — and the closing date is asked for in the new-event wizard, in Settings, and in the developer config — the screen read "25 of 25 entries cannot be accepted as they stand" over a field whose paperwork was complete. The reason it gave was that the trial had no closing date, about a date you had typed in.

    It now falls back to the closing date in your settings. A published premium still wins where there is one: that is the date your exhibitors actually saw.

    Operations is on the phone menu now

    Roll call, the entry desk and the ASFA records packet all live behind Operations, and it was not in the menu bar at the bottom of a phone — only a card on the Dashboard you had to know was there. It is in the bar now, between Judges and Tools.

    Making room meant shortening two labels in that bar: Dashboard reads Home, and the hammer that used to read "Ops" now reads Tools, because Operations needed that word. The sidebar on a laptop is unchanged, and a long-press still says the full name.

    Smaller things

    • The name of the screen you are on no longer collapses to Li... at laptop width. It was losing its space to the event name beside it.
    • On a phone, the stake selector on the Leaderboard no longer prints its last letter through the dropdown arrow.
    • Race Control used to be an empty page with one dropdown on it until you picked a hound. It now says what the screen is for, and tells you where hounds come from if none are entered yet.

    The ASFA CSV on the pre-flight screen had no placements in it

    If you have ever sent this file to anyone, send the records packet instead.

    The pre-flight screen offers a download described as a result summary for ASFA. Its Placement column read one thing only: the box you type in to correct a placement. So on an ordinary trial, where nobody corrected anything, the column was blank for every hound — no first, no NBQ, no points, nothing to say which hound had won. The only rows carrying a placement were the hand-corrected ones.

    It was never built from the results engine, so none of the rulebook work in this release reached it either: not the placement floor, not the mixed Singles stake, not NBQ, not a run-off you recorded.

    It now comes from the same engine as the Leaderboard, the ribbons and the records packet, in the packet's own columns — Placement, Points and Disposition, so a hound with no placement says why rather than sitting blank. A hound with no stake recorded is left blank rather than reported as having run Open.

    The card is now called ASFA Score Summary, because the packet on the Trial Day screen is the document ASFA actually receives — it carries the registered names, the hounds that did not run and the per-capita, and this file has no room for any of it.

    A placement you type now moves the hounds behind it

    Check any trial where you corrected a placement by hand.

    Typing a placement into the Leaderboard rewrote that one row and renumbered nobody. Four hounds with the third-best typed as 1 came out 1st, 2nd, 1st, 4th — two blue ribbons in one stake and no third place at all. The hound you demoted kept its number and its points; the position you emptied was never filled.

    An override now claims its position. The hounds it out-ranks move down one, in score order, and the points follow them. If the position you claim sits in the middle of a tie, the tied hounds contest the positions either side of it, and the tie rule works on those.

    And a placement can no longer be typed against a hound that did not course.

    It used to apply to any row. Typing 1 against a hound a judge had dismissed gave it first place, a full first's points, and a place in its breed's Best of Breed — while the board beside it still read DIS and the packet said 1st. A placement is a fact about coursing: Ch. V §6(e) places "the top five placing hounds", and a hound excused, absent, disqualified or dismissed did not course the stake. If the ruling itself is the mistake, change the ruling.

    The awards bar now says when a placement was not applied, and names the hound, so nothing is refused in silence.

    A hound the recorded score put under the placement floor can still be placed by hand, as before. That is a disagreement about a score, and a secretary holding the judges' sheets is who settles it.

    A run-off now settles one placement, and you are asked about the rest

    Check any trial where three or more hounds tied.

    Ch. V §6(g) puts ties for the top five inside the run-off rule. GateKeeper recorded a run-off as naming a winner — which it does — and then treated the whole tie as finished. The winner took the placement and everybody else was numbered off in the order they happened to sit in the entry list.

    Three hounds tied on 300 in a stake of four, run-off won by c, came out c 1st / a 2nd / b 3rd. Four points between two hounds still level on score, and no second run-off asked for. Swap a and b in the roster and the placements swap with them.

    Winning a run-off does not un-tie the hounds who lost it. They are still level, one position lower, and they need their own run-off. GateKeeper now asks for it. If you run it, the placements come out the way the ground decided. If nobody runs it, Ch. V §6(h) applies as it always has — both hounds take the lowest position the tie could have won, the points for the positions involved are pooled and split evenly, and the fraction is dropped.

    The same now holds for a forfeit. If one hound of three forfeits, the two still standing are awarded ahead of it under Ch. V §6(i) — and they are still tied with each other, so they are reported, not silently ordered.

    Hounds that were entered and did not run are on the packet, and in the per-capita

    Check this one against your own books — it changes what you owe ASFA.

    Ch. VI §1(b) requires the records to include "notations of reasons why hounds who were entered did not run". A hound absent at its stake was already covered. A hound scratched at roll call, or turned away by the Inspection Committee, was not — it left the roster before the packet was built, so it had no line at all. Both now appear, on the results sheet and on the cover sheet, with the reason and no invented scores.

    The per-capita followed the same gap. Ch. VI §1(c) excuses the fee only for an entry "fully refunded to the exhibitor" — and a forfeited fee is not a refund. A no-show forfeits (Ch. I §3); so does a hound that cannot be made to stand for measurement (Ch. II §7.5(d)). GateKeeper counted only the hounds that ran, so a trial with 24 entries and four forfeits declared 20 and paid on 20.

    That is not a rounding error: §1(c) says points are not recorded until the per capita fee is received, so paying short holds up your whole trial's results.

    Genuinely refunded entries — a bitch in season, a hound found lame, a breed disqualification at roll call — still owe nothing, and the cover sheet now says which is which beside each name.

    The placement floor now reads your scores, not just your judge cards

    This changes who places at any trial whose per-judge cards did not survive an import or a sync — which is most of them.

    Ch. VII §1 refuses a placement to a hound scoring under half the total possible. GateKeeper worked out the total possible from whether judge-B cards were present — but the score you see is the panel total, and per-judge cards are exactly what gets lost opening a .kpr or syncing from another machine.

    So a real two-judge trial read as one judge, and the floor came out 100 of 200 instead of 200 of 400. A hound that scored 30% took a placement and points it was not entitled to, while the same screen showed it a combined score of 380 beside a stated maximum of 200.

    One judge scores a course out of 100, so any course total above 100 can only be a panel sum. That is arithmetic rather than a guess, and it settles the normal case. Where it genuinely cannot be settled — no judge cards, and nobody over 100 on a course — one judge is assumed, because assuming two would put every hound at a real one-judge meet under the floor. The awards bar now says when the panel size was assumed, because that assumption decides who gets a ribbon.

    Found alongside it: a club that ran one course and recorded it in the second slot was counted as having run two. It never showed, because the two errors cancelled exactly — and correcting the judge count on its own would have voided those trials outright.

    The Singles stake is one stake across every breed

    This changes placements and points at any trial that ran a Singles stake. Ch. V §5(d): "Singles Stake entries from all breeds shall be combined into one mixed stake, with proficiency points and placements awarded across the breeds."

    GateKeeper was placing it per breed. Four hounds in Singles — two Whippets and two Salukis — came out as two stakes of two: two firsts, two seconds, and two High Scoring Singles, where there is one navy-and-gold rosette to give.

    The points were the worse half. Proficiency points come from the number of hounds competing in the stake, so the real winner of that four-hound Singles earns 16 and was being given 8 — and those are the points a Title of Coursing Proficiency is made of. A hound that actually placed third was recorded as a first.

    The 20-entry flighting threshold now counts the combined Singles entry too, so ten Whippets and ten Salukis is a stake of twenty and splits, as it always should have.

    Every other stake is still one per breed — Ch. V §5(a) is equally explicit that an Open stake is one breed.

    NBQ is one hound again

    Next Best Qualified is the fifth placement and one green rosette (Ch. VII §2; Ch. IV §8.3(d) — ribbons "for all placements - 1st through NBQ"). GateKeeper was labelling every hound from fifth down as NBQ: four of them in a stake of eight, sixteen in a flight of twenty. That went onto the ribbon labels and onto the records submitted to ASFA.

    Three things follow:

    • Only the fifth placing hound is NBQ. Sixth and below take no placement, and the Placement column is blank for them, because the rulebook has no word for it.
    • A tie for NBQ is now reported to you as needing a run-off. Ch. V §6(g) puts ties for "the top five placements" inside the run-off rule, and NBQ is the fifth — so two hounds level on fifth were quietly sharing the one green ribbon with nothing telling you. Left unbroken, both count as sixth and neither takes it.
    • A hound below the 50% qualifying score is no longer labelled "Next Best Qualified". Ch. VII §1 gives it no placement at all; your packet was reading NBQ in the Placement column and "Under the placement floor" in the Disposition column of the same row.

    Ribbon labels follow: asking for NBQ labels prints one, not one per hound that placed nowhere.

    Results, ribbons and the records packet now agree with each other

    If you have run a tie off, this changes what your packet says — and it is a correction. The Leaderboard screen applied your recorded run-offs and Best of Breed decisions. The records packet and the ribbon labels did not. So a club that ran a tie off, recorded it and handed out the blue rosette could export a packet to ASFA showing two second placements, no first, and no Best of Breed — and print ribbon labels from the same unresolved result.

    All three now read the same thing. Nothing about your recorded decisions changed; what changed is that the packet and the labels finally use them.

    Best in Field is no longer awarded to a single hound

    Ch. V §11(d): "Best in Field shall only be run if two or more hounds are in competition."

    GateKeeper was awarding it uncontested whenever one hound reached that stage — a single-breed specialty, or an all-breed trial where the other breeds declined their Best of Breed run-off. That is the Best of Breed rule (Ch. V §7 does allow the last hound standing to take BOB) applied to a section that says the opposite, and Ch. V §11(e) credits the winner with a first placement and championship points, so it was awarding both for defeating nobody.

    Best of Breed is unchanged.

    Your records are no longer "overdue" the day before they are due

    If you are anywhere in North America, the deadline was being worked out in UTC while your clock was not. A trial ending 5 September, records due the 19th, told a secretary in Colorado "1 day overdue — fines accrue daily" at seven o'clock on the evening of the 18th, and "2 days overdue" at eleven at night on the 19th, which is the due date.

    The countdown now uses your own calendar date, which is what a deadline means.

    A breed typed in capitals keeps its Best of Breed

    A roster imported as WHIPPET produced a packet reading "WHIPPET: 2 entered, Best of Breed (not awarded)" for a breed that had one, and two spellings of the same breed split the entry count ASFA reconciles your per-capita fee against.

    The installer says its version to Windows

    Right-click the .exe → Properties → Details. The File version now reads the real version.

    It used to read a build counter: 1 for 5.1.1, 0 for 5.1.0, 20 for 5.0.20. Three consecutive releases whose File version went 20 → 0 → 1, on a field whose whole job is to always increase. The installer filename is deliberately unversioned so the download link never goes stale, which left nowhere at all to read a version off the file.

  9. 5.1.0

    Cloud sync and published results now follow the plan

    This takes something away, and it is the reason this is 5.1 rather than 5.0.21.

    GateKeeper has always had a table saying which plan includes what (src/lib/entitlements.ts): cloud sync and published results belong to the Club Licence, and a day or weekend pass buys the right to score the event. Nothing enforced it. Both features checked only whether the device held a current entitlement stamp, and every paid state writes one — so a $9.99 Day Pass opened the cloud exactly as a $199 perpetual licence did.

    From 5.1.0 the table is what runs:

    • Club Licence, Pro Secretary and the perpetual tiers — cloud sync and publishing, unchanged.
    • Day Pass, Event Weekend, All-Breed Day Pass, All-Breed Event Weekend — score the event, print everything, export everything, keep every record forever. No live cloud sync of runs, and no published results page.

    Cloud backup is untouched and stays available on every plan. Backing up your own event is not a premium feature and will not become one — it is the same promise as "you never pay to read back an event you already recorded".

    Nobody loses access to their own data. Past events stay viewable, printable and exportable on the machine that recorded them, with or without a current plan. That has not changed and will not.

    A club that has already published results can always take them down, plan or no plan. Being unable to remove your own results from the internet is the one failure this could not be allowed to have.

    If you hold a Club Licence and bought it through Stripe

    Redeem the licence key that came with your purchase (Settings → Licence) if you have not already. It is what proves the licence on a laptop in a field with no signal, and from 5.1.0 it is also what keeps your cloud access from lapsing after a month away from the network — a verified perpetual licence now renews its own grace period every time the app opens.

    If you have not got a key, write in and one will be reissued.

    App Check is now registered by the app itself

    It was initialised only in the exhibitor entry form's bundle, never in the file the application uses — which is why the Firebase console reported 0% verified / 100% unverified for Cloud Firestore. Every request the app has ever made counted as unverified.

    Fixed here. After a rebuild and deploy, the verified share of browser traffic should climb.

    Do not switch Cloud Firestore to Enforced yet. The desktop build serves its renderer with loadFile, so its origin is file://, and reCAPTCHA Enterprise attests a registered domain. There is no domain, so there is no token, and no configuration changes that. docs/APPCHECK.md sets out the three ways forward.

    A debug token can be supplied for local testing through the environment variable GK_APPCHECK_DEBUG_TOKEN, read at runtime by the Electron preload — never through a VITE_ variable, which would inline the token into the bundle and ship a permanent project-wide App Check bypass inside every installer. tests/appCheckSecrets.test.ts fails if a token is committed, read from a build variable, or written to a log.

    Corrections made before this shipped

    An independent review of the entitlement change found three defects in the first version of it. They are recorded because each one is a lesson about this kind of change rather than about this code:

    • The gate erased itself after 72 hours. The tier was resolved from passPlan, which only exists for 72 hours after a payment — so a club that bought a Day Pass on Tuesday for a Saturday trial had no tier by Saturday and got the cloud for free, while a club that bought at the gate on Friday night was refused. Same SKU, opposite answers. The resolver now also reads the source of the licence the device already granted itself, which is frozen at grant time and still true on the day of the trial.
    • A perpetual holder could be refused. Freshness was required of every tier. A Club Licence holder whose account read failed — a rules hiccup, a captive portal — was told to re-authenticate in a field, having paid for a licence that says it never expires. A perpetual grant no longer depends on the stamp at all; the stamp still governs everything that recurs.
    • The refusal was invisible. publishResults throws so a person who is watching gets told, and nothing caught it — so the rejection went to the global handler, filed a crash report, and the club saw the spinner stop and nothing else. It is caught and shown now.

    Under the hood

    • New: src/lib/effectiveTier.ts — resolves which tier an install actually holds, from the signed offline licence, the account record, or a recent payment, in that order. Durability, not recency: a club that owns a perpetual licence does not lose the cloud because somebody bought a day pass at the gate.
    • New: entitlements.planHasCapability() — the same question asked away from React, so CloudSync reaches the same answer offline. An install whose tier cannot be determined keeps the previous behaviour rather than being refused; the header explains why that direction is the safe one.
    • useEntitlements now reads the effective tier instead of customers/{uid}.tier, which was null for every Club Licence bought through Stripe.
    • TenantSettings.subscriptionTier caches the resolution beside the existing expiry stamp. Older save files without it load unchanged.
    • Signing out clears the cached tier along with the stamp.
    • ExportForKennelKeeper is recorded as deliberately unmounted, with a test that fails if it is mounted without also updating the marketing copy that currently describes the KeeperSuite handoff as a plan.

Running an older build? The newest one is always on the downloads page.

Downloads