The Milton Record

Corrections

Every error this site has published and corrected, with what caused it and what now prevents it. Errors are corrected within 48 hours of being reported and are never removed quietly.

22 September 2026

Galen Naidoo Harris answered all 26 questions; his page published six answers, three of them under the wrong questions, and one of them a passage of this site's own invitation letter printed as his words.

Who reported it
Galen Naidoo Harris
Reported
22 September 2026
Corrected
22 September 2026
What this site published
His page showed six answers and twenty questions pending. Answers 1, 2 and 3 were his and were correct. Under question 4 (“Milton is hitting its housing targets…”) the page printed his answer about Halton Region decisions; under question 5 (first-time buyers and renters) it printed his answer about regional priorities; and under question 25 it printed “And if anything on your page is wrong, just tell me and I will fix it within 48 hours…”, which is a sentence from the letter this site sent him on 24 August, not anything he wrote.
What is correct
He answered all 26 questions put to a candidate for Regional Councillor. All 26 are now on his page, each under the question he answered, word for word as he sent them, including “No.” to whether Milton's urban boundary should expand further within this term.
What caused it
He numbered his answers 1 to 3 within each themed section, which is how the questionnaire reads on screen, rather than 1 to 26 straight through. The parser reads numbers in ascending order and treats a restart as our own email quoted back below the reply, so twenty of his answers were discarded and the numbers that did rise were matched to the wrong questions. He had echoed every question verbatim above its answer, so the message said plainly where each answer belonged while the numbers did not.
How it is prevented now
The parser now reads a reply a third way, by matching the question echoed above each answer, and that reading wins when it places more answers; placement no longer depends on the writer's numbering. Two faults it exposed are fixed with it: a short answer such as “No.” is no longer dropped by a twenty-character floor when its placement is certain, and the rule that removes an echoed question no longer cuts inside a word when a candidate restates the question and runs it into their own sentence. A check now refuses to pass while any published answer carries a sentence of this site's own letters or opens with another question's text.
What else it affected
None. Every published answer from every candidate was re-parsed and compared with what is on the site; no other answer was misplaced or carried text that was not the candidate's.
Pages corrected
cand-galen-naidoo-harris-regional-councillor

14 September 2026

Two candidates' questionnaire pages carried text that was not theirs: Adil Khalqi's answer 26 ran on into his signature and five thousand characters of this site's own invitation letter, his page showed an answer to question 27 that was a sentence from that letter, and Maliha K. Ahmed's answer 23 ended with the line Gmail writes above a quoted message.

Who reported it
Found in review
Reported
14 September 2026
Corrected
14 September 2026
What this site published
On Mr Khalqi's page, answer 26 was 5,228 characters long: his one-sentence answer, then “Respectfully, Councillor Adil Khalqi”, his phone number and website, then the whole of the letter this site had sent him on 24 August, quoted back by his mail client, printed as his words. Under question 27, which he did not answer, the page printed “Thank you for the work you do on Council, and good luck with the campaign.” — the closing line of that same letter — as his answer. On Ms Ahmed's page, answer 23 ended with “On Sun, 30 Aug 2026 at 9:31 AM, The Milton Record wrote:”.
What is correct
Mr Khalqi's answer 26 is one sentence: “I will have more to share if I am re-elected.” He did not answer question 27, and his page now shows it as pending. Ms Ahmed's answer 23 ends at her own last sentence. Nothing else on either page changed, and no other candidate's answers were affected: every reply on file was read again with the corrected parser and compared with what is published.
What caused it
Both candidates answered at the top of their reply and their mail client quoted this site's invitation underneath, questions and all. The parser knew to stop the last answer at a sign-off, but Mr Khalqi's answer 26 was not his last: the parser saw the “27.” in the quoted letter, took it for his next answer, and ran answer 26 up to it. The quoted line that followed became answer 27. Ms Ahmed's last answer stopped at the next thing the parser recognised, which was after the quote header rather than before it. A third candidate's reply on 13 September had the same shape and was caught before publication, which is how these two were found.
How it is prevented now
Everything below the line a mail client writes above a quoted message — “On <date> <sender> wrote:” — is now discarded before the reply is read, when that line sits below the candidate's answers; a candidate who answers inside the quote, under each question, is read as before. A bare name on the last line of a reply is treated as a signature. Both rules have tests drawn from the three replies concerned.
What else it affected
Nothing else.
Pages corrected
election, cand-adil-khalqi-town-councillor, cand-maliha-k-ahmed-mayor, responses, ward-3

12 September 2026

Six of Mr Zafar's twenty-three answers were published with a stray asterisk on the end that he did not write, and this site reported his campaign website silent on twenty-one of the questions he had answered when it had only read about a quarter of that website.

Who reported it
Salman Zafar, candidate for Regional Councillor, Ward 3
Reported
12 September 2026
Corrected
12 September 2026
What this site published
Six answers on his page ended in a full stop followed by a space and an asterisk, published verbatim under his name as though he had typed them. Separately, his page said his website took no position on twenty-one of the twenty-three questions, and carried a single general sentence from his home page as a quotation against many of those questions, with no link to the page it came from.
What is correct
The asterisks were ours. He sent his answers with the questionnaire's section headings in bold, and Gmail transmits bold as asterisks; the parser removed the heading text but left the marker that opened it attached to the answer above. Exactly one answer per heading was affected. His website is not silent on those questions: read in full it takes a position on ten of the twenty-three, including the community centre commitment on his home page that he pointed out. Those ten now appear, each quoted from the page it is on and linked to it. Where the site genuinely says nothing, no quotation is shown at all.
What caused it
Two faults. The parser trimmed a trailing section heading but not the emphasis marker that introduced it. And the code that reads a candidate's website ordered their pages longest first and cut the total at forty thousand characters, so for a site of twenty-eight pages only the largest three were ever read. Two of those three were the same post, because WordPress serves each one at both a numeric address and a readable one and the crawler had captured both. A third fault sat behind them: a quotation was only checked against the captured page when a position had been found, so a verdict of silent stored whatever text came back unverified and unsourced.
How it is prevented now
Pages are now deduplicated on the text captured, and the passages sent for comparison are chosen by the question being asked rather than by length, so no part of a site is unreadable merely because it is short or far down a page. A silent verdict now stores no quotation. Three checks run on every build: that no stored quotation lacks the page it came from, that no published answer ends in a formatting marker, and the existing rule that a quotation absent from the captured page is never published. Four tests cover the heading parser and five cover the page selection, including this exact case.
What else it affected
The same website-reading fault degraded the comparison for every candidate whose site ran past the limit: John Challinor, Adejisola Atiba, Adil Khalqi and Ginni Malik. Fifty-eight unsourced quotations were removed from their records and all four have been re-read in full. Mr Challinor's themes were the subject of the correction published on 28 August; that fix repaired the theme extractor and left this per-question comparison untouched.
Pages corrected
election, cand-salman-zafar-regional-councillor, ward-3

29 August 2026

This site showed Councillor Challinor with no published position on five of the seven themes. He had published on all seven. The fault was in this site's crawler, not in what he wrote.

Who reported it
Councillor John Challinor II, Ward 2
Reported
28 August 2026
Corrected
29 August 2026
What this site published
The theme table on /election, /ward/2 and his own page showed a dash against Councillor Challinor for housing, transit, community services, rural Milton and governance. A dash was explained on those pages as meaning that a candidate had not published a website and had not replied. He has had a website since 2018.
What is correct
His website states a position on all seven themes, and all seven now appear, quoted from his own pages. He has also answered the questionnaire in full — all 23 of the 23 questions put to a Regional Councillor candidate. — Amended 29 August: this entry first said he had answered "23 of the 25" and had left questions 22 and 23 unanswered. That was wrong and unfair to him. The questionnaire has 27 questions, not 25, and they are scoped by office: 21 go to everyone, 22 and 23 to candidates for Mayor only, 24 and 25 to Regional Councillor candidates, 26 and 27 to Town Councillor candidates. He was never asked 22 or 23. His reply runs 1–21 then 24–25 for that reason, and the same is true of Adejisola Atiba's. Both answered everything they were asked.
What caused it
The crawler read one page of his site and never reached the rest. His site links internally with bare hostnames — href="johnchallinor.ca/community-news/" rather than "/community-news/" — and a link with no scheme is treated by urljoin as a path relative to the current page. It produced /johnchallinor.ca/community-news/, then compounded that 404 into longer ones. His community news and FAQ, the two pages he asked us to read, were unreachable by construction. After the fix the crawler reads 25 pages of his site instead of one. — The amendment above has a separate cause: the numbering in a reply skips the questions that were never put to that candidate, because the mailer sends only the applicable ones and keeps their canonical numbers. Reading a gap in that sequence as a question ducked is a mistake about the candidate, and it was made here.
How it is prevented now
Links are now resolved through a function that recognises a bare hostname for what it is, and that reads both quote styles. Separately, a page that answers with too little text to read is now recorded with the reason instead of being dropped in silence — that fault hid three other candidates' sites entirely, and their pages now say so and name the cause rather than showing the same blank as a candidate who published nothing. A check now refuses to let any correction on this site state a number of answered or unanswered questions that the database contradicts.
What else it affected
Nadeem Akbar, Youssef Roshdy and Patrick Murphy, whose sites are built in the browser and cannot be read this way, and Sajid Chaudhry, whose filed web address does not resolve. All four showed as though they had published nothing; their pages now state that this site could not read their site, and why.
Pages corrected
election, cand-john-challinor-regional-councillor, cand-nadeem-akbar-mayor, cand-patrick-murphy-town-councillor, cand-sajid-chaudhry-regional-councillor, cand-youssef-roshdy-regional-councillor, ward-2

28 August 2026

The correction published yesterday about attendance gave the wrong cause. Milton's minutes do record who was absent. The fault was in this site's parser, and it has been fixed — recorded absences are published again, still with no attendance rate.

Who reported it
Found by Claude, the AI assistant that builds this site, while rebuilding attendance from the minutes at the operator's direction
Reported
28 August 2026
Corrected
28 August 2026
What this site published
Yesterday's correction said “Council minutes list who was present and never who was absent”, and concluded that attendance could not be reported from this source at all. Both statements went out on the corrections page and at the foot of all ten council member pages.
What is correct
Milton's council minutes carry an explicit “Members Absent:” line naming who was away. 16 meetings in this term have one, recording 18 absences between them. Those are now published on each member's page as specific meetings with a link to the minutes that state it. No attendance rate is published, and none will be: the counts that would form its denominator still cannot be established honestly, and a rate is the form of the figure most likely to be repeated without it. Councillor Khalqi is recorded absent from 5 meetings, all of them Council Workshops, and present at every other meeting whose attendance list could be read.
What caused it
The parser read the “Members Present” list and stopped at the word “Absent”, which left the word “Members” inside what it had captured. Its name pattern then read that trailing word as part of the last person's surname, producing “Khalqi Members”, “Marshall Members” and “Minakakis Members”. Those matched nobody, so no attendance row was written, and a missing row was rendered as an absence. It happened nine times to Councillor Khalqi, four times to Councillor Marshall and twice to Councillor Minakakis — always to whoever the Town happened to list last, which is why it fell so heavily on one person. Yesterday's investigation stopped at the symptom, the short lists, and did not read the line immediately after them.
How it is prevented now
Absence is now read from the minutes and never inferred from a gap. A check fails the build if any absence is stored without saying which document states it, and the existing check that fails the build on any published attendance rate stays permanently — it is no longer a temporary hold but a standing rule. Each meeting's reading is recorded as one of parsed, no minutes, could not fetch, or no attendance section, so “we do not know” can no longer look like “nobody was absent”. A member with no row is unknown, never absent.
What else it affected
The corrections page and the foot of all ten council member pages carried the wrong cause. Each member page now shows the meetings the minutes record them as absent from, in place of the note saying attendance could not be reported. Motions moved, seconded, notices of motion and recorded votes were never affected. These figures were themselves published wrong for part of 28 August: the correction was drafted before two further parser faults were fixed and was not re-derived afterwards, so it said 12 meetings, 22 absences and 3 absences for Councillor Khalqi. A check now re-derives every figure a correction asserts from the database on each build, and fails the build if the published text and the record disagree.
Pages corrected
council, person-adil-khalqi, person-colin-best, person-george-minakakis, person-gordon-a-krantz, person-john-challinor-ii, person-kristina-tesser-derksen, person-rick-malboeuf, person-sameera-ali, person-sammy-ijaz, person-sarah-marshall

27 August 2026

Thirty-two motions were missing from the record, and the note describing how complete the record was counted meetings this site does not cover.

Who reported it
Found by Claude, the AI assistant that builds this site, while answering a question from the operator about the coverage note
Reported
27 August 2026
Corrected
27 August 2026
What this site published
Every council member's page carried a note reading “Partial record. Covers 114 of 119 meetings… the remaining 5 meetings have no published minutes yet or failed to parse.” Motion counts on those pages were short by 32 motions in total.
What is correct
All 67 council meetings held so far have been read. The 119 figure counted 47 Committee of Adjustment meetings, which this site says on the same page it excludes entirely, two advisory-committee meetings, and three council meetings that had not yet taken place. The 32 recovered motions are now attributed to the members who moved and seconded them.
What caused it
Two faults in how motions were stored. The resolution number was required, so a motion the minutes record without one could not be saved at all — that accounts for 31 of the 32. And motions were identified by meeting and number, so when the Town numbered two different motions Res. 057-26 at the meeting of 13 April 2026 — different seconders, different reports — the second was silently discarded. Separately, the coverage note was measured against every row in the meetings table rather than against council meetings, which is what the counts are drawn from.
How it is prevented now
Motions are now identified by their content rather than their number, so neither an absent number nor a number the Town reuses can lose one. The resolution table was rebuilt to allow this, with every row identifier preserved so the 151 recorded votes and 110 file links attached to them stayed attached; row counts were verified before and after, and the database was backed up first. Coverage is now counted against council meetings that have actually happened.
What else it affected
All ten council member pages carried the coverage note and the understated counts. The Council summary page carried the note. Attendance is unaffected — it was withdrawn earlier the same day for a different reason. Recorded votes, notices of motion and declared conflicts were not affected.
Pages corrected
council, person-adil-khalqi, person-colin-best, person-george-minakakis, person-gordon-a-krantz, person-john-challinor-ii, person-kristina-tesser-derksen, person-rick-malboeuf, person-sameera-ali, person-sammy-ijaz, person-sarah-marshall

27 August 2026

This site published attendance figures for all ten council members that it could not support. They have been removed.

Who reported it
Councillor Adil Khalqi, Ward 3
Reported
27 August 2026
Corrected
27 August 2026
What this site published
Every council member's page carried an attendance rate. Councillor Khalqi's said he was present at 43 of 57 council meetings — 75%. Nine other members carried figures between 91% and 100%.
What is correct
Councillor Khalqi has not missed a council meeting that can be verified from the minutes: he is recorded present at all 38 meetings whose attendance list this site read in full. No attendance rate is published for any member now, because the minutes cannot support one. Anyone wanting attendance should read the minutes. — Superseded: the parser fault that produced this was found on 28 August and fixed. The minutes do record absence, and they name Councillor Khalqi absent from 5 Council Workshops. See the correction below.
What caused it
Council minutes list who was present and never who was absent. This site counted a member as absent whenever their name was missing from a meeting's list — which also happens when the list is published in a format the parser reads only partly. Nineteen of the 57 meetings gave a list of six or seven of the nine members, and every missing name became an absence. Fourteen of those fell on Councillor Khalqi, which accounted for all of his supposed absences. — This explanation was itself wrong, and is corrected below. The minutes do record who was absent; the real fault was in this site's parser. See the correction of 28 August 2026.
How it is prevented now
Two things. A check now fails the build if any page states an attendance rate, so it cannot return quietly. And the underlying measure was tested before being abandoned: counting only meetings with a complete list makes every member 100%, because a meeting recording all nine is a meeting where nobody was absent — the figure cannot be rescued, only withheld.
What else it affected
All ten council member pages and the Council summary page carried the figure. No other page or figure used attendance: motions moved, seconded, notices of motion and recorded votes are counted separately and are unaffected.
Pages corrected
council, person-adil-khalqi, person-colin-best, person-george-minakakis, person-gordon-a-krantz, person-john-challinor-ii, person-kristina-tesser-derksen, person-rick-malboeuf, person-sameera-ali, person-sammy-ijaz, person-sarah-marshall

Found something wrong?

Tell me and it will be corrected within 48 hours, and recorded here. That stands whether you are a candidate, a member of council, a member of staff or a resident. Write to themiltonrecord@gmail.com.