Back to the This site page

Requirements traceability matrix

63 requirements: 59 tested, 4 manual with a written reason, 0 gaps. 977 tests, 977 linked to a requirement.

Generated 2026-10-28 17:43 UTC from commit 3ceb6ea. Requirements are GitHub issues labelled requirement; tests name them with @req-N tags. See the README for the convention.

No problems: every requirement has a test or a written reason, and every test names a real requirement.

RequirementCoverageTestsLast result
#314 Resume data stays consistentTested
5 tests in 1 file
  • passed resume.spec.ts:5 every bullet a version lists exists, is public, and has a known role [site]
  • passed resume.spec.ts:21 every bullet group names existing public bullets, and every included group exists [site]
  • passed resume.spec.ts:39 no version lists a bullet twice, even across its groups [site]
  • passed resume.spec.ts:47 a bullet in a group shows up in every version that includes the group [site]
  • passed resume.spec.ts:58 repeated opening verbs are reported, not forced [site]
passed 5 passed
#315 Each resume version renders its own content on the webTested
74 tests in 2 files
  • passed resume-details.spec.ts:134 prints a range, a single year, and an ongoing role the way the resume does [site]
  • passed resume-details.spec.ts:140 puts ongoing roles first, then the latest to finish, then the latest to start [site]
  • passed resume-details.spec.ts:158 the data has the kinds of role the checks below are meant to cover [site]
  • passed resume-details.spec.ts:184 lists its roles newest first, each with its bullets in order [site]
  • passed resume-details.spec.ts:195 shows each role's dates, title, note, and positions [site]
  • passed resume-details.spec.ts:226 shows the education and certifications in order, with school and dates [site]
  • passed resume-details.spec.ts:184 lists its roles newest first, each with its bullets in order [site]
  • passed resume-details.spec.ts:195 shows each role's dates, title, note, and positions [site]
  • passed resume-details.spec.ts:226 shows the education and certifications in order, with school and dates [site]
  • passed resume-details.spec.ts:184 lists its roles newest first, each with its bullets in order [site]
  • passed resume-details.spec.ts:195 shows each role's dates, title, note, and positions [site]
  • passed resume-details.spec.ts:226 shows the education and certifications in order, with school and dates [site]
  • passed resume-details.spec.ts:184 lists its roles newest first, each with its bullets in order [site]
  • passed resume-details.spec.ts:195 shows each role's dates, title, note, and positions [site]
  • passed resume-details.spec.ts:226 shows the education and certifications in order, with school and dates [site]
  • passed resume-details.spec.ts:184 lists its roles newest first, each with its bullets in order [site]
  • passed resume-details.spec.ts:195 shows each role's dates, title, note, and positions [site]
  • passed resume-details.spec.ts:226 shows the education and certifications in order, with school and dates [site]
  • passed resume-details.spec.ts:184 lists its roles newest first, each with its bullets in order [site]
  • passed resume-details.spec.ts:195 shows each role's dates, title, note, and positions [site]
  • passed resume-details.spec.ts:226 shows the education and certifications in order, with school and dates [site]
  • passed resume-details.spec.ts:184 lists its roles newest first, each with its bullets in order [site]
  • passed resume-details.spec.ts:195 shows each role's dates, title, note, and positions [site]
  • passed resume-details.spec.ts:226 shows the education and certifications in order, with school and dates [site]
  • passed resume-details.spec.ts:184 lists its roles newest first, each with its bullets in order [site]
  • passed resume-details.spec.ts:195 shows each role's dates, title, note, and positions [site]
  • passed resume-details.spec.ts:226 shows the education and certifications in order, with school and dates [site]
  • passed resume-details.spec.ts:184 lists its roles newest first, each with its bullets in order [site]
  • passed resume-details.spec.ts:195 shows each role's dates, title, note, and positions [site]
  • passed resume-details.spec.ts:226 shows the education and certifications in order, with school and dates [site]
  • passed resume-details.spec.ts:184 lists its roles newest first, each with its bullets in order [site]
  • passed resume-details.spec.ts:195 shows each role's dates, title, note, and positions [site]
  • passed resume-details.spec.ts:226 shows the education and certifications in order, with school and dates [site]
  • passed resume-details.spec.ts:184 lists its roles newest first, each with its bullets in order [site]
  • passed resume-details.spec.ts:195 shows each role's dates, title, note, and positions [site]
  • passed resume-details.spec.ts:226 shows the education and certifications in order, with school and dates [site]
  • passed resume-details.spec.ts:184 lists its roles newest first, each with its bullets in order [site]
  • passed resume-details.spec.ts:195 shows each role's dates, title, note, and positions [site]
  • passed resume-details.spec.ts:226 shows the education and certifications in order, with school and dates [site]
  • passed resume-details.spec.ts:184 lists its roles newest first, each with its bullets in order [site]
  • passed resume-details.spec.ts:195 shows each role's dates, title, note, and positions [site]
  • passed resume-details.spec.ts:226 shows the education and certifications in order, with school and dates [site]
  • passed resume-details.spec.ts:184 lists its roles newest first, each with its bullets in order [site]
  • passed resume-details.spec.ts:195 shows each role's dates, title, note, and positions [site]
  • passed resume-details.spec.ts:226 shows the education and certifications in order, with school and dates [site]
  • passed resume.spec.ts:188 /resume/ sends visitors to the first resume, the QA lane [site]
  • passed resume.spec.ts:75 web page shows the summary, skills, experience, and education [site]
  • passed resume.spec.ts:90 shows exactly the skills meant for this version [site]
  • passed resume.spec.ts:100 marks the current version and links to its PDF [site]
  • passed resume.spec.ts:115 web page uses real organization names [site]
  • passed resume.spec.ts:75 web page shows the summary, skills, experience, and education [site]
  • passed resume.spec.ts:90 shows exactly the skills meant for this version [site]
  • passed resume.spec.ts:100 marks the current version and links to its PDF [site]
  • passed resume.spec.ts:115 web page uses real organization names [site]
  • passed resume.spec.ts:75 web page shows the summary, skills, experience, and education [site]
  • passed resume.spec.ts:90 shows exactly the skills meant for this version [site]
  • passed resume.spec.ts:100 marks the current version and links to its PDF [site]
  • passed resume.spec.ts:115 web page uses real organization names [site]
  • passed resume.spec.ts:75 web page shows the summary, skills, experience, and education [site]
  • passed resume.spec.ts:90 shows exactly the skills meant for this version [site]
  • passed resume.spec.ts:100 marks the current version and links to its PDF [site]
  • passed resume.spec.ts:115 web page uses real organization names [site]
  • passed resume.spec.ts:75 web page shows the summary, skills, experience, and education [site]
  • passed resume.spec.ts:90 shows exactly the skills meant for this version [site]
  • passed resume.spec.ts:100 marks the current version and links to its PDF [site]
  • passed resume.spec.ts:115 web page uses real organization names [site]
  • passed resume.spec.ts:75 web page shows the summary, skills, experience, and education [site]
  • passed resume.spec.ts:90 shows exactly the skills meant for this version [site]
  • passed resume.spec.ts:100 marks the current version and links to its PDF [site]
  • passed resume.spec.ts:115 web page uses real organization names [site]
  • passed resume.spec.ts:75 web page shows the summary, skills, experience, and education [site]
  • passed resume.spec.ts:90 shows exactly the skills meant for this version [site]
  • passed resume.spec.ts:100 marks the current version and links to its PDF [site]
  • passed resume.spec.ts:115 web page uses real organization names [site]
passed 74 passed
#316 Resume print routes match the web page and fit the paperTested
22 tests in 2 files
  • passed resume-details.spec.ts:15 the print route of "qa" shows everything, readable, within the page [site]
  • passed resume-details.spec.ts:15 the print route of "sdet" shows everything, readable, within the page [site]
  • passed resume-details.spec.ts:15 the print route of "con" shows everything, readable, within the page [site]
  • passed resume-details.spec.ts:15 the print route of "adp" shows everything, readable, within the page [site]
  • passed resume-details.spec.ts:15 the print route of "pmba" shows everything, readable, within the page [site]
  • passed resume-details.spec.ts:15 the print route of "it" shows everything, readable, within the page [site]
  • passed resume-details.spec.ts:15 the print route of "creative" shows everything, readable, within the page [site]
  • skipped resume.spec.ts:169 a neutral version shows alternate organization names in print and real names on the web [site]
  • passed resume.spec.ts:122 print route carries the version's summary, bullets, and skills [site]
  • passed resume.spec.ts:136 print route follows the version's label mode and has no site chrome [site]
  • passed resume.spec.ts:122 print route carries the version's summary, bullets, and skills [site]
  • passed resume.spec.ts:136 print route follows the version's label mode and has no site chrome [site]
  • passed resume.spec.ts:122 print route carries the version's summary, bullets, and skills [site]
  • passed resume.spec.ts:136 print route follows the version's label mode and has no site chrome [site]
  • passed resume.spec.ts:122 print route carries the version's summary, bullets, and skills [site]
  • passed resume.spec.ts:136 print route follows the version's label mode and has no site chrome [site]
  • passed resume.spec.ts:122 print route carries the version's summary, bullets, and skills [site]
  • passed resume.spec.ts:136 print route follows the version's label mode and has no site chrome [site]
  • passed resume.spec.ts:122 print route carries the version's summary, bullets, and skills [site]
  • passed resume.spec.ts:136 print route follows the version's label mode and has no site chrome [site]
  • passed resume.spec.ts:122 print route carries the version's summary, bullets, and skills [site]
  • passed resume.spec.ts:136 print route follows the version's label mode and has no site chrome [site]
passed 21 passed, 1 skipped
#317 Each resume version has a real PDFTested
24 tests in 1 file
  • passed pdfs.spec.ts:28 was generated by the build [site]
  • passed pdfs.spec.ts:34 is served as a real PDF with a sensible page count [site]
  • passed pdfs.spec.ts:48 was printed from its own version, not another one [site]
  • passed pdfs.spec.ts:28 was generated by the build [site]
  • passed pdfs.spec.ts:34 is served as a real PDF with a sensible page count [site]
  • passed pdfs.spec.ts:48 was printed from its own version, not another one [site]
  • passed pdfs.spec.ts:28 was generated by the build [site]
  • passed pdfs.spec.ts:34 is served as a real PDF with a sensible page count [site]
  • passed pdfs.spec.ts:48 was printed from its own version, not another one [site]
  • passed pdfs.spec.ts:28 was generated by the build [site]
  • passed pdfs.spec.ts:34 is served as a real PDF with a sensible page count [site]
  • passed pdfs.spec.ts:48 was printed from its own version, not another one [site]
  • passed pdfs.spec.ts:28 was generated by the build [site]
  • passed pdfs.spec.ts:34 is served as a real PDF with a sensible page count [site]
  • passed pdfs.spec.ts:48 was printed from its own version, not another one [site]
  • passed pdfs.spec.ts:28 was generated by the build [site]
  • passed pdfs.spec.ts:34 is served as a real PDF with a sensible page count [site]
  • passed pdfs.spec.ts:48 was printed from its own version, not another one [site]
  • passed pdfs.spec.ts:28 was generated by the build [site]
  • passed pdfs.spec.ts:34 is served as a real PDF with a sensible page count [site]
  • passed pdfs.spec.ts:48 was printed from its own version, not another one [site]
  • passed pdfs.spec.ts:62 steve-johnson-resume-qa.pdf is a copy of steve-johnson-resume-lane-qa.pdf [site]
  • passed pdfs.spec.ts:62 steve-johnson-resume-consulting.pdf is a copy of steve-johnson-resume-lane-con.pdf [site]
  • passed pdfs.spec.ts:62 steve-johnson-resume-adoption.pdf is a copy of steve-johnson-resume-lane-adp.pdf [site]
passed 24 passed
#318 Lane resumes show the right bullets in two pages or fewerTested
51 tests in 1 file
  • passed lane-resumes.spec.ts:148 the fit pages used to measure lanes are not part of the site [site]
  • passed lane-resumes.spec.ts:155 the old Consulting and Adoption addresses forward to the lane resumes that replaced them [site]
  • passed lane-resumes.spec.ts:44 every lane has a saved fit that is on two pages or fewer [site]
  • passed lane-resumes.spec.ts:57 the print route shows exactly the fitted bullets, by role newest first, in tier and position order [site]
  • passed lane-resumes.spec.ts:73 shows every tier 1 bullet for the lane, on its own or inside a combined bullet [site]
  • passed lane-resumes.spec.ts:86 keeps the role floors, and shows only bullets tagged for the lane [site]
  • passed lane-resumes.spec.ts:98 carries the lane summary, its skills, real organization names, and the education list [site]
  • passed lane-resumes.spec.ts:109 has a PDF of two pages or fewer, printed from this lane [site]
  • passed lane-resumes.spec.ts:119 with print media on, the content ends before the end of page 2 [site]
  • passed lane-resumes.spec.ts:127 the print route is kept out of search and out of the sitemap, and is not linked [site]
  • passed lane-resumes.spec.ts:136 the web page is a real page of the site: searchable, in the sitemap, with a version switcher entry and its PDF [site]
  • passed lane-resumes.spec.ts:57 the print route shows exactly the fitted bullets, by role newest first, in tier and position order [site]
  • passed lane-resumes.spec.ts:73 shows every tier 1 bullet for the lane, on its own or inside a combined bullet [site]
  • passed lane-resumes.spec.ts:86 keeps the role floors, and shows only bullets tagged for the lane [site]
  • passed lane-resumes.spec.ts:98 carries the lane summary, its skills, real organization names, and the education list [site]
  • passed lane-resumes.spec.ts:109 has a PDF of two pages or fewer, printed from this lane [site]
  • passed lane-resumes.spec.ts:119 with print media on, the content ends before the end of page 2 [site]
  • passed lane-resumes.spec.ts:127 the print route is kept out of search and out of the sitemap, and is not linked [site]
  • passed lane-resumes.spec.ts:136 the web page is a real page of the site: searchable, in the sitemap, with a version switcher entry and its PDF [site]
  • passed lane-resumes.spec.ts:57 the print route shows exactly the fitted bullets, by role newest first, in tier and position order [site]
  • passed lane-resumes.spec.ts:73 shows every tier 1 bullet for the lane, on its own or inside a combined bullet [site]
  • passed lane-resumes.spec.ts:86 keeps the role floors, and shows only bullets tagged for the lane [site]
  • passed lane-resumes.spec.ts:98 carries the lane summary, its skills, real organization names, and the education list [site]
  • passed lane-resumes.spec.ts:109 has a PDF of two pages or fewer, printed from this lane [site]
  • passed lane-resumes.spec.ts:119 with print media on, the content ends before the end of page 2 [site]
  • passed lane-resumes.spec.ts:127 the print route is kept out of search and out of the sitemap, and is not linked [site]
  • passed lane-resumes.spec.ts:136 the web page is a real page of the site: searchable, in the sitemap, with a version switcher entry and its PDF [site]
  • passed lane-resumes.spec.ts:57 the print route shows exactly the fitted bullets, by role newest first, in tier and position order [site]
  • passed lane-resumes.spec.ts:73 shows every tier 1 bullet for the lane, on its own or inside a combined bullet [site]
  • passed lane-resumes.spec.ts:86 keeps the role floors, and shows only bullets tagged for the lane [site]
  • passed lane-resumes.spec.ts:98 carries the lane summary, its skills, real organization names, and the education list [site]
  • passed lane-resumes.spec.ts:109 has a PDF of two pages or fewer, printed from this lane [site]
  • passed lane-resumes.spec.ts:119 with print media on, the content ends before the end of page 2 [site]
  • passed lane-resumes.spec.ts:127 the print route is kept out of search and out of the sitemap, and is not linked [site]
  • passed lane-resumes.spec.ts:136 the web page is a real page of the site: searchable, in the sitemap, with a version switcher entry and its PDF [site]
  • passed lane-resumes.spec.ts:57 the print route shows exactly the fitted bullets, by role newest first, in tier and position order [site]
  • passed lane-resumes.spec.ts:73 shows every tier 1 bullet for the lane, on its own or inside a combined bullet [site]
  • passed lane-resumes.spec.ts:86 keeps the role floors, and shows only bullets tagged for the lane [site]
  • passed lane-resumes.spec.ts:98 carries the lane summary, its skills, real organization names, and the education list [site]
  • passed lane-resumes.spec.ts:109 has a PDF of two pages or fewer, printed from this lane [site]
  • passed lane-resumes.spec.ts:119 with print media on, the content ends before the end of page 2 [site]
  • passed lane-resumes.spec.ts:127 the print route is kept out of search and out of the sitemap, and is not linked [site]
  • passed lane-resumes.spec.ts:136 the web page is a real page of the site: searchable, in the sitemap, with a version switcher entry and its PDF [site]
  • passed lane-resumes.spec.ts:57 the print route shows exactly the fitted bullets, by role newest first, in tier and position order [site]
  • passed lane-resumes.spec.ts:73 shows every tier 1 bullet for the lane, on its own or inside a combined bullet [site]
  • passed lane-resumes.spec.ts:86 keeps the role floors, and shows only bullets tagged for the lane [site]
  • passed lane-resumes.spec.ts:98 carries the lane summary, its skills, real organization names, and the education list [site]
  • passed lane-resumes.spec.ts:109 has a PDF of two pages or fewer, printed from this lane [site]
  • passed lane-resumes.spec.ts:119 with print media on, the content ends before the end of page 2 [site]
  • passed lane-resumes.spec.ts:127 the print route is kept out of search and out of the sitemap, and is not linked [site]
  • passed lane-resumes.spec.ts:136 the web page is a real page of the site: searchable, in the sitemap, with a version switcher entry and its PDF [site]
passed 51 passed
#319 The lane fit plan never cuts tier 1Tested
24 tests in 1 file
  • passed lane-fit.spec.ts:60 keeps public bullets tagged for the lane, tier first and then position, inside each role [site]
  • passed lane-fit.spec.ts:66 leaves out bullets that are not public, not tagged for the lane, or tagged only for another lane [site]
  • passed lane-fit.spec.ts:78 breaks position ties by the order the bullets are written in the file [site]
  • passed lane-fit.spec.ts:85 cuts tier 3 before tier 2, least relevant role first, and the lowest position first inside a role [site]
  • passed lane-fit.spec.ts:95 never cuts tier 1: with no floors only the tier 1 bullets are left [site]
  • passed lane-fit.spec.ts:101 equal ranks fall back to print order, so the older role gives up bullets first [site]
  • passed lane-fit.spec.ts:107 a role with no rank for the lane is treated as the least relevant [site]
  • passed lane-fit.spec.ts:112 a role floor stops the cuts in that role and the rest carry on [site]
  • passed lane-fit.spec.ts:121 a floor larger than the tier 1 count keeps lower tiers too, and tier 1 still never goes [site]
  • passed lane-fit.spec.ts:127 the same input always gives the same plan [site]
  • passed lane-fit.spec.ts:143 swaps come first, and the combined bullet takes the best tier and position of the bullets it replaces [site]
  • passed lane-fit.spec.ts:154 the biggest saving is swapped first [site]
  • passed lane-fit.spec.ts:163 a combined bullet takes the best tier of its parts when it is cut, and one with a tier 1 part is never cut [site]
  • passed lane-fit.spec.ts:172 ignores a combined bullet that is not for the lane, replaces a bullet the lane does not use, or is not shorter [site]
  • passed lane-fit.spec.ts:185 a bullet is only swapped out once, and a swap that would take a role below its floor is skipped [site]
  • passed lane-fit.spec.ts:194 state 0 is the starting list, each state only removes content, and the last k is checked [site]
  • passed lane-fit.spec.ts:208 the fingerprint is stable, and changes with wording, order, tags, and the extra detail [site]
  • passed lane-fit.spec.ts:237 QA: the plan keeps every tier 1 bullet in every state and respects the floors [site]
  • passed lane-fit.spec.ts:237 SDET: the plan keeps every tier 1 bullet in every state and respects the floors [site]
  • passed lane-fit.spec.ts:237 CON: the plan keeps every tier 1 bullet in every state and respects the floors [site]
  • passed lane-fit.spec.ts:237 ADP: the plan keeps every tier 1 bullet in every state and respects the floors [site]
  • passed lane-fit.spec.ts:237 PMBA: the plan keeps every tier 1 bullet in every state and respects the floors [site]
  • passed lane-fit.spec.ts:237 IT: the plan keeps every tier 1 bullet in every state and respects the floors [site]
  • passed lane-fit.spec.ts:258 every lane has something to cut [site]
passed 24 passed
#320 Lane data is validatedTested
22 tests in 1 file
  • passed lane-data.spec.ts:43 the real data files pass [site]
  • passed lane-data.spec.ts:54 accepts a sound set, and accepts data with no lane tags and no ranks at all [site]
  • passed lane-data.spec.ts:63 accepts a combo that replaces a single bullet (a shorter wording of it) [site]
  • passed lane-data.spec.ts:95 rejects a lane id listed twice [site]
  • passed lane-data.spec.ts:95 rejects a lane code listed twice [site]
  • passed lane-data.spec.ts:95 rejects a lane floor for a role that does not exist [site]
  • passed lane-data.spec.ts:95 rejects a bullet tagged for an unknown lane [site]
  • passed lane-data.spec.ts:95 rejects a role ranking an unknown lane [site]
  • passed lane-data.spec.ts:95 rejects a role missing a rank once others have ranks [site]
  • passed lane-data.spec.ts:95 rejects a role with no ranks at all once others have ranks [site]
  • passed lane-data.spec.ts:95 rejects a combo that replaces a bullet that does not exist [site]
  • passed lane-data.spec.ts:95 rejects a combo that replaces no bullets [site]
  • passed lane-data.spec.ts:95 rejects a combo that lists a bullet twice [site]
  • passed lane-data.spec.ts:95 rejects a combo that mixes roles [site]
  • passed lane-data.spec.ts:95 rejects a combo that replaces a bullet that is not public [site]
  • passed lane-data.spec.ts:95 rejects a combo used in a lane where a replaced bullet is not tagged [site]
  • passed lane-data.spec.ts:95 rejects a combo with an unknown lane [site]
  • passed lane-data.spec.ts:95 rejects a combo with no lanes [site]
  • passed lane-data.spec.ts:95 rejects a combo with an unknown role [site]
  • passed lane-data.spec.ts:95 rejects a combo with the same id as a bullet [site]
  • passed lane-data.spec.ts:95 rejects a combo listed twice [site]
  • passed lane-data.spec.ts:95 rejects two combos replacing the same bullet in one lane [site]
passed 22 passed
#321 The bank importer is safe and repeatableTested
31 tests in 1 file
  • passed import-lanes.spec.ts:42 check mode reports and writes nothing [site]
  • passed import-lanes.spec.ts:54 --write sets lanes, role ranks, and combos, and leaves everything else alone [site]
  • passed import-lanes.spec.ts:91 a second --write changes nothing [site]
  • passed import-lanes.spec.ts:101 keeps Windows line endings [site]
  • passed import-lanes.spec.ts:112 a later run drops lanes the bank no longer lists, and removes the line when the list is emptied [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for an id that is not in bullets.yaml [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for a lane code that does not exist [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for a tier of 4 [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for a position of 0 [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for a lane listed twice on a bullet [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for a tag that is not a lane tag [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for a role heading missing a lane rank [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for a role heading with no rank tag at all [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for a role heading with a rank of 0 [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for a role with no heading in the bank [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for a new bullet that is not in bullets.yaml [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for a new bullet that matches two bullets [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for the same bullet tagged twice with different tags [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for a public bullet with no tagged line [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for a combined bullet that replaces a bullet that does not exist [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for a combined bullet that mixes roles [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for a combined bullet used in a lane a replaced bullet is not tagged for [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for a combined bullet with an unknown lane [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for a combined bullet that does not start with a past-tense verb [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for a combined bullet with a double hyphen [site]
  • passed import-lanes.spec.ts:162 exits 1 and writes nothing for an unreadable tag [site]
  • passed import-lanes.spec.ts:175 a missing bank file explains how to refresh it [site]
  • passed import-lanes.spec.ts:183 a bullet under the wrong role heading is only a warning: it still imports by its id [site]
  • passed import-lanes.spec.ts:194 check mode lists changed wording, and --write alone leaves it [site]
  • passed import-lanes.spec.ts:204 --apply-text copies it, keeps the id, and stays rewrapped as a folded block [site]
  • passed import-lanes.spec.ts:213 --apply-text refuses wording that breaks the copy rules, and writes nothing [site]
passed 31 passed
#322 The add-resume-bullet skill enforces the bullet rulesTested
17 tests in 1 file
  • passed add-resume-bullet-skill.spec.ts:24 accepts a clean bullet [site]
  • passed add-resume-bullet-skill.spec.ts:41 rejects a weak verb (Reviewed) [site]
  • passed add-resume-bullet-skill.spec.ts:41 rejects a weak verb (Asked) [site]
  • passed add-resume-bullet-skill.spec.ts:41 rejects a weak verb (Helped) [site]
  • passed add-resume-bullet-skill.spec.ts:41 rejects a weak verb (Worked on) [site]
  • passed add-resume-bullet-skill.spec.ts:41 rejects a verb that is not past tense [site]
  • passed add-resume-bullet-skill.spec.ts:41 rejects an em dash [site]
  • passed add-resume-bullet-skill.spec.ts:41 rejects an en dash [site]
  • passed add-resume-bullet-skill.spec.ts:41 rejects a double hyphen [site]
  • passed add-resume-bullet-skill.spec.ts:41 rejects a phone number [site]
  • passed add-resume-bullet-skill.spec.ts:41 rejects a project count without a plus sign [site]
  • passed add-resume-bullet-skill.spec.ts:46 accepts counts written as a floor, and an exact count when told it is final [site]
  • passed add-resume-bullet-skill.spec.ts:51 rejects an unknown role or version and a missing version [site]
  • passed add-resume-bullet-skill.spec.ts:57 warns, without failing, when the verb is already used in the same role, and suggests others [site]
  • passed add-resume-bullet-skill.spec.ts:69 every suggested alternative passes the schema verb check [site]
  • passed add-resume-bullet-skill.spec.ts:74 the command line exits 1 on a bad bullet, 0 on a good one, and writes nothing [site]
  • passed add-resume-bullet-skill.spec.ts:88 the schema and the skill use the same copy rules file [site]
passed 17 passed
#323 Every link, anchor, and asset resolvesTested
1 test in 1 file
  • passed links.spec.ts:7 every internal link, anchor, and asset resolves, and no page is orphaned [site]
passed 1 passed
#324 Site navigation works on wide screens and phonesTested
37 tests in 1 file
  • passed navigation.spec.ts:13 the navigation holds the pages the site is meant to have [site]
  • passed navigation.spec.ts:30 shows one row of top-level links and no Menu button, with the pages under Creative tucked away [site]
  • passed navigation.spec.ts:39 "Home" opens / and is marked as the current page [site]
  • passed navigation.spec.ts:39 "Resume" opens /resume/ and is marked as the current page [site]
  • passed navigation.spec.ts:39 "Development & QA" opens /development-qa/ and is marked as the current page [site]
  • passed navigation.spec.ts:39 "Communication Board" opens /development-qa/care-communication-board/ and is marked as the current page [site]
  • passed navigation.spec.ts:39 "TPD Excel Add-in" opens /development-qa/tpd-excel-addin/ and is marked as the current page [site]
  • passed navigation.spec.ts:39 "This site" opens /development-qa/this-site/ and is marked as the current page [site]
  • passed navigation.spec.ts:39 "Creative" opens /creative/ and is marked as the current page [site]
  • passed navigation.spec.ts:39 "Audio" opens /audio/ and is marked as the current page [site]
  • passed navigation.spec.ts:39 "Art" opens /art/ and is marked as the current page [site]
  • passed navigation.spec.ts:39 "Jabroni Fest" opens /jabroni-fest/ and is marked as the current page [site]
  • passed navigation.spec.ts:39 "Contact" opens /contact/ and is marked as the current page [site]
  • passed navigation.spec.ts:51 Resume stays marked on the pages inside it [site]
  • passed navigation.spec.ts:68 is closed until the link is hovered, then lists its pages in order [site]
  • passed navigation.spec.ts:75 stays open while the pointer moves down from the link onto an item [site]
  • passed navigation.spec.ts:86 opens from the keyboard, can be walked through with Tab, and closes with Escape [site]
  • passed navigation.spec.ts:99 Escape closes a list opened by the pointer, and it opens again when the pointer returns [site]
  • passed navigation.spec.ts:110 is marked as the current section, not the current page, while one of its pages is open [site]
  • passed navigation.spec.ts:118 only the list that is hovered is open [site]
  • passed navigation.spec.ts:125 has a page of its own that links to every page under it [site]
  • passed navigation.spec.ts:68 is closed until the link is hovered, then lists its pages in order [site]
  • passed navigation.spec.ts:75 stays open while the pointer moves down from the link onto an item [site]
  • passed navigation.spec.ts:86 opens from the keyboard, can be walked through with Tab, and closes with Escape [site]
  • passed navigation.spec.ts:99 Escape closes a list opened by the pointer, and it opens again when the pointer returns [site]
  • passed navigation.spec.ts:110 is marked as the current section, not the current page, while one of its pages is open [site]
  • passed navigation.spec.ts:118 only the list that is hovered is open [site]
  • passed navigation.spec.ts:125 has a page of its own that links to every page under it [site]
  • passed navigation.spec.ts:141 has one entry per project, in the order the Development & QA page lists them, under their short names [site]
  • passed navigation.spec.ts:154 on a project page, Development & QA is the current section and the project is the current page [site]
  • passed navigation.spec.ts:171 shows one Menu button instead of the row, on a single line [site]
  • passed navigation.spec.ts:181 the menu opens and closes from the keyboard without moving the page [site]
  • passed navigation.spec.ts:199 Escape closes the open menu and puts focus back on the Menu button [site]
  • passed navigation.spec.ts:219 the open menu lists every page, with the pages under a section listed beneath its link [site]
  • passed navigation.spec.ts:232 choosing a page from the menu goes there and marks it current [site]
  • passed navigation.spec.ts:419 from the resume it returns to the page the visitor came from, not through the redirect again [site]
  • passed navigation.spec.ts:429 changing filters does not add history entries, so Back leaves the archive [site]
passed 37 passed
#325 The Home page introduces and routes visitorsTested
6 tests in 1 file
  • passed navigation.spec.ts:244 shows the portrait with its alt text and the picture really loads, or the placeholder [site]
  • passed navigation.spec.ts:259 offers "View my resume" and "Get in touch", pointing to the Resume and Contact pages [site]
  • passed navigation.spec.ts:269 the cards appear in the order set in src/data/home-cards.yaml, with their words [site]
  • passed navigation.spec.ts:278 "Development & QA" links to /development-qa/ [site]
  • passed navigation.spec.ts:278 "Audio" links to /audio/ [site]
  • passed navigation.spec.ts:278 "Art" links to /art/ [site]
passed 6 passed
#326 The Creative page lists the pages under itTested
3 tests in 1 file
  • passed navigation.spec.ts:334 shows its lead and paragraphs from src/data/intros.yaml, in order [site]
  • passed navigation.spec.ts:342 has one card for each page under Creative, in the navigation order, with the words from the file [site]
  • passed navigation.spec.ts:355 a card opens its page [site]
passed 3 passed
#327 Renamed sections keep workingTested
6 tests in 1 file
  • passed navigation.spec.ts:363 the page is called Jabroni Fest in its heading and title [site]
  • passed navigation.spec.ts:370 the old /events/ address forwards to the new page and is kept out of search [site]
  • passed navigation.spec.ts:379 no navigation link is still called Events [site]
  • passed navigation.spec.ts:386 the page, the header, and a project page all use the new name [site]
  • passed navigation.spec.ts:397 the Home card is called Development & QA and opens the new page [site]
  • passed navigation.spec.ts:404 the old /development/ address and every old project address forward to the new one and stay out of search [site]
passed 6 passed
#328 Page text and titles come from the data filesTested
20 tests in 2 files
  • passed copy.spec.ts:22 home: the title and description match [site]
  • passed copy.spec.ts:22 art: the title and description match [site]
  • passed copy.spec.ts:22 audio: the title and description match [site]
  • passed copy.spec.ts:22 contact: the title and description match [site]
  • passed copy.spec.ts:22 creative: the title and description match [site]
  • passed copy.spec.ts:22 jabroni-fest: the title and description match [site]
  • passed copy.spec.ts:22 development-qa: the title and description match [site]
  • passed copy.spec.ts:22 not-found: the title and description match [site]
  • passed copy.spec.ts:34 the Creative, Jabroni Fest, and Development & QA leads come from the file [site]
  • passed copy.spec.ts:43 the Audio page links down to the studio rates, in the words from the file [site]
  • passed copy.spec.ts:52 the Contact page ends with its closing line and a working link to the resume [site]
  • passed copy.spec.ts:67 fill puts the name and area from site.ts into {name} and {area} [site]
  • passed copy.spec.ts:73 linkParts splits [words](/path) links from plain text [site]
  • passed copy.spec.ts:122 audio: no match shows the message from the file [site]
  • passed copy.spec.ts:122 development-qa: no match shows the message from the file [site]
  • passed navigation.spec.ts:294 the Home page shows the tagline and paragraphs from the file, in order [site]
  • passed navigation.spec.ts:301 the Art page shows the lead and the statement from the file, in order [site]
  • passed navigation.spec.ts:308 the Audio page shows its lead from the file [site]
  • passed navigation.spec.ts:313 the Contact page shows its email note and lead, with the area filled in from site.ts [site]
  • passed navigation.spec.ts:320 the 404 page shows its heading, lead, button, and list heading from the file [site]
passed 20 passed
#329 Archive filters work on Development & QA and AudioTested
20 tests in 1 file
  • passed filters.spec.ts:226 Development & QA filters by tag only, and each card still shows its year and type [site]
  • passed filters.spec.ts:77 the data has enough variety to test [site]
  • passed filters.spec.ts:81 with scripts off, the form is hidden and every item is listed [site]
  • passed filters.spec.ts:90 with scripts on, the Filters panel starts closed and opens with a click to show the form [site]
  • passed filters.spec.ts:107 the closed panel says how many filters are in use, even after a reload or a shared link [site]
  • passed filters.spec.ts:140 picking tags requires every tag, and an empty result says so [site]
  • passed filters.spec.ts:163 Clear filters restores the full list and the plain URL [site]
  • skipped filters.spec.ts:180 a value in the link that the drop-downs do not offer is ignored, and each shows its first option [site]
  • passed filters.spec.ts:193 the selection lives in the URL and survives a reload [site]
  • passed filters.spec.ts:77 the data has enough variety to test [site]
  • passed filters.spec.ts:81 with scripts off, the form is hidden and every item is listed [site]
  • passed filters.spec.ts:90 with scripts on, the Filters panel starts closed and opens with a click to show the form [site]
  • passed filters.spec.ts:107 the closed panel says how many filters are in use, even after a reload or a shared link [site]
  • passed filters.spec.ts:127 each year value shows exactly the matching items [site]
  • passed filters.spec.ts:127 each band value shows exactly the matching items [site]
  • passed filters.spec.ts:127 each role value shows exactly the matching items [site]
  • passed filters.spec.ts:140 picking tags requires every tag, and an empty result says so [site]
  • passed filters.spec.ts:163 Clear filters restores the full list and the plain URL [site]
  • passed filters.spec.ts:180 a value in the link that the drop-downs do not offer is ignored, and each shows its first option [site]
  • passed filters.spec.ts:193 the selection lives in the URL and survives a reload [site]
passed 19 passed, 1 skipped
#330 Development & QA project pages show their project fileTested
16 tests in 1 file
  • passed projects.spec.ts:12 there are projects to check, and with and without a demo link [site]
  • passed projects.spec.ts:23 has its own title and description [site]
  • passed projects.spec.ts:29 shows the heading, the year and type, the summary, and a way back [site]
  • passed projects.spec.ts:37 shows its headline facts, or none [site]
  • passed projects.spec.ts:49 shows the problem, what was built, the stack, and the outcome [site]
  • passed projects.spec.ts:69 links to the code and the demo it has, and shows no button for one it lacks [site]
  • passed projects.spec.ts:23 has its own title and description [site]
  • passed projects.spec.ts:29 shows the heading, the year and type, the summary, and a way back [site]
  • passed projects.spec.ts:37 shows its headline facts, or none [site]
  • passed projects.spec.ts:49 shows the problem, what was built, the stack, and the outcome [site]
  • passed projects.spec.ts:69 links to the code and the demo it has, and shows no button for one it lacks [site]
  • passed projects.spec.ts:23 has its own title and description [site]
  • passed projects.spec.ts:29 shows the heading, the year and type, the summary, and a way back [site]
  • passed projects.spec.ts:37 shows its headline facts, or none [site]
  • passed projects.spec.ts:49 shows the problem, what was built, the stack, and the outcome [site]
  • passed projects.spec.ts:69 links to the code and the demo it has, and shows no button for one it lacks [site]
passed 16 passed
#331 The Art gallery shows every piece correctlyTested
41 tests in 1 file
  • passed art.spec.ts:9 shows every piece, and every image has real alt text [site]
  • passed art.spec.ts:20 pieces keep their own aspect ratio (no stretched or cropped images) [site]
  • passed art.spec.ts:32 a piece with no story or extra images has no expand control [site]
  • passed art.spec.ts:41 bands, venues, and tags on a piece are lowercase-kebab-case and none is repeated [site]
  • passed art.spec.ts:50 the control says Read more, never "the story behind" [site]
  • passed art.spec.ts:61 each Signals Midwest and Friends with Jennafits flier is its own piece in the gallery [site]
  • passed art.spec.ts:84 the first piece on the page shows its date and keeps its extra images under Read more [site]
  • passed art.spec.ts:106 the gallery runs newest first by date, from the first piece to the last [site]
  • passed art.spec.ts:129 every date is in the same year as the piece, so the order can be trusted [site]
  • passed art.spec.ts:136 under an image there is only the title, date, and format; every caption is under Read more [site]
  • passed art.spec.ts:152 with a single group there is no group heading, but the gallery is still a named region [site]
  • passed art.spec.ts:159 a piece with a story opens and closes from the keyboard [site]
  • passed art.spec.ts:176 a series reveals its extra images inside the control [site]
  • passed art.spec.ts:316 titles fit in two lines, and the date and Read more sit at the same height in every tile (320px) [site]
  • passed art.spec.ts:316 titles fit in two lines, and the date and Read more sit at the same height in every tile (375px) [site]
  • passed art.spec.ts:316 titles fit in two lines, and the date and Read more sit at the same height in every tile (430px) [site]
  • passed art.spec.ts:316 titles fit in two lines, and the date and Read more sit at the same height in every tile (500px) [site]
  • passed art.spec.ts:316 titles fit in two lines, and the date and Read more sit at the same height in every tile (620px) [site]
  • passed art.spec.ts:316 titles fit in two lines, and the date and Read more sit at the same height in every tile (768px) [site]
  • passed art.spec.ts:316 titles fit in two lines, and the date and Read more sit at the same height in every tile (1100px) [site]
  • passed art.spec.ts:316 titles fit in two lines, and the date and Read more sit at the same height in every tile (1600px) [site]
  • passed art.spec.ts:364 every flyer sits whole in the same frame (phone, small) [site]
  • passed art.spec.ts:382 cards in the same row end at the same place (phone, small) [site]
  • passed art.spec.ts:364 every flyer sits whole in the same frame (phone) [site]
  • passed art.spec.ts:382 cards in the same row end at the same place (phone) [site]
  • passed art.spec.ts:364 every flyer sits whole in the same frame (large phone) [site]
  • passed art.spec.ts:382 cards in the same row end at the same place (large phone) [site]
  • passed art.spec.ts:364 every flyer sits whole in the same frame (two columns) [site]
  • passed art.spec.ts:382 cards in the same row end at the same place (two columns) [site]
  • passed art.spec.ts:364 every flyer sits whole in the same frame (two columns, wide) [site]
  • passed art.spec.ts:382 cards in the same row end at the same place (two columns, wide) [site]
  • passed art.spec.ts:364 every flyer sits whole in the same frame (tablet) [site]
  • passed art.spec.ts:382 cards in the same row end at the same place (tablet) [site]
  • passed art.spec.ts:364 every flyer sits whole in the same frame (tablet, wide) [site]
  • passed art.spec.ts:382 cards in the same row end at the same place (tablet, wide) [site]
  • passed art.spec.ts:364 every flyer sits whole in the same frame (laptop) [site]
  • passed art.spec.ts:382 cards in the same row end at the same place (laptop) [site]
  • passed art.spec.ts:364 every flyer sits whole in the same frame (desktop) [site]
  • passed art.spec.ts:382 cards in the same row end at the same place (desktop) [site]
  • passed art.spec.ts:402 rows still line up when the text is wider, whatever the font [site]
  • passed art.spec.ts:424 opening Read more still grows only that card [site]
passed 41 passed
#332 Art images open in a larger viewTested
7 tests in 1 file
  • passed art.spec.ts:203 every image is a link to a larger version, which is served as an image [site]
  • passed art.spec.ts:220 nothing is added to the page until an image is clicked [site]
  • passed art.spec.ts:225 clicking an image fills the page with a larger version, and the X closes it [site]
  • passed art.spec.ts:255 Escape and a click on the dark area close it too [site]
  • passed art.spec.ts:274 opens from the keyboard, and shows the right picture for each image [site]
  • passed art.spec.ts:288 the extra images in a series open full page too [site]
  • passed art.spec.ts:302 with scripts off, an image is a plain link to the larger version [site]
passed 7 passed
#333 Art sort and filters workTested
17 tests in 1 file
  • passed art-filters.spec.ts:88 the data has enough variety to test [site]
  • passed art-filters.spec.ts:94 values in the link that the drop-downs do not offer are ignored, and each shows its first option [site]
  • passed art-filters.spec.ts:105 with scripts off, the panel is hidden and every piece is listed [site]
  • passed art-filters.spec.ts:114 the Filters panel starts closed and offers Sort by, Year, and Format [site]
  • passed art-filters.spec.ts:130 Oldest first is exactly the newest first list turned around, and Clear puts it back [site]
  • passed art-filters.spec.ts:152 the sort order survives a reload and a shared link [site]
  • passed art-filters.spec.ts:166 each year shows exactly that year's pieces, still newest first [site]
  • passed art-filters.spec.ts:177 each format shows exactly the pieces of that shape [site]
  • passed art-filters.spec.ts:187 year, format, and sort work together, and a link restores them [site]
  • passed art-filters.spec.ts:208 a combination with no pieces shows the message from the file [site]
  • passed art-filters.spec.ts:222 bands, venues, and tags show together as one Tags group with proper labels [site]
  • passed art-filters.spec.ts:239 a piece shows when it has any of the picked names, whichever list they are in [site]
  • passed art-filters.spec.ts:274 cards in a row still end at the same place after filtering and sorting (375px) [site]
  • passed art-filters.spec.ts:274 cards in a row still end at the same place after filtering and sorting (700px) [site]
  • passed art-filters.spec.ts:274 cards in a row still end at the same place after filtering and sorting (1100px) [site]
  • passed art-filters.spec.ts:274 cards in a row still end at the same place after filtering and sorting (1600px) [site]
  • passed art-filters.spec.ts:305 the larger view still opens the right picture after the pieces are re-sorted [site]
passed 17 passed
#334 Audio releases play in Bandcamp players that behaveTested
14 tests in 1 file
  • passed audio.spec.ts:21 every release has a light and a dark Bandcamp player, and no button or Bandcamp link around them [site]
  • passed audio.spec.ts:39 players are marked lazy, so the browser loads them as the visitor scrolls [site]
  • passed audio.spec.ts:84 with scripts off, each release still shows one player for the system theme [site]
  • passed audio.spec.ts:162 each card shows its release type, and there is no Kind dropdown [site]
  • passed audio.spec.ts:172 the Band dropdown lists every band alphabetically, and a split shows under each of its bands [site]
  • passed audio.spec.ts:195 the genre group is titled just Genre [site]
  • passed audio.spec.ts:200 the studio story is shown near the top, above the releases [site]
  • passed audio.spec.ts:209 the studio rates section is linked from the top and reachable [site]
  • passed audio.spec.ts:48 only the light players show, and the dark ones are never requested [site]
  • passed audio.spec.ts:64 only the dark players show, and the light ones are never requested [site]
  • passed audio.spec.ts:73 the theme button switches the players, and the choice holds [site]
  • passed audio.spec.ts:107 clicking into a second player resets the first, and leaves a player nobody touched alone [site]
  • passed audio.spec.ts:126 clicking in the same player again does not reset it [site]
  • passed audio.spec.ts:139 switching theme after using a player removes the hidden copy, so it cannot keep playing [site]
passed 14 passed
#335 Audio cards, filters, and studio rates show their dataTested
5 tests in 2 files
  • passed audio.spec.ts:232 there are releases with a role line to check [site]
  • passed audio.spec.ts:237 each card shows its artist, year, type, my role, and genre chips [site]
  • passed audio.spec.ts:253 shows every rate, what is included, and how to prepare, in order [site]
  • passed filters.spec.ts:47 bandSlug makes a short, space-free value [site]
  • passed filters.spec.ts:56 bandsOf lists the bands of a split, or just the artist [site]
passed 5 passed
#336 The Jabroni Fest page shows events.yamlTested
5 tests in 1 file
  • passed jabroni-fest.spec.ts:11 there is at least one organization to check [site]
  • passed jabroni-fest.spec.ts:18 shows the name, summary, and role [site]
  • passed jabroni-fest.spec.ts:27 shows every fact with its label [site]
  • passed jabroni-fest.spec.ts:37 lists every point under "How it runs", in order [site]
  • passed jabroni-fest.spec.ts:46 names the cause and says what it is [site]
passed 5 passed
#337 Contact details are right everywhereTested
16 tests in 1 file
  • passed contact.spec.ts:15 site.ts still holds the details the pages are meant to show [site]
  • passed contact.spec.ts:25 the Contact page offers the email, LinkedIn, and GitHub [site]
  • passed contact.spec.ts:39 the resume "qa" header shows the pronouns, area, email, LinkedIn, and GitHub [site]
  • passed contact.spec.ts:39 the print route "lane-qa" header shows the pronouns, area, email, LinkedIn, and GitHub [site]
  • passed contact.spec.ts:39 the resume "sdet" header shows the pronouns, area, email, LinkedIn, and GitHub [site]
  • passed contact.spec.ts:39 the print route "lane-sdet" header shows the pronouns, area, email, LinkedIn, and GitHub [site]
  • passed contact.spec.ts:39 the resume "con" header shows the pronouns, area, email, LinkedIn, and GitHub [site]
  • passed contact.spec.ts:39 the print route "lane-con" header shows the pronouns, area, email, LinkedIn, and GitHub [site]
  • passed contact.spec.ts:39 the resume "adp" header shows the pronouns, area, email, LinkedIn, and GitHub [site]
  • passed contact.spec.ts:39 the print route "lane-adp" header shows the pronouns, area, email, LinkedIn, and GitHub [site]
  • passed contact.spec.ts:39 the resume "pmba" header shows the pronouns, area, email, LinkedIn, and GitHub [site]
  • passed contact.spec.ts:39 the print route "lane-pmba" header shows the pronouns, area, email, LinkedIn, and GitHub [site]
  • passed contact.spec.ts:39 the resume "it" header shows the pronouns, area, email, LinkedIn, and GitHub [site]
  • passed contact.spec.ts:39 the print route "lane-it" header shows the pronouns, area, email, LinkedIn, and GitHub [site]
  • passed contact.spec.ts:39 the resume "creative" header shows the pronouns, area, email, LinkedIn, and GitHub [site]
  • passed contact.spec.ts:39 the print route "creative" header shows the pronouns, area, email, LinkedIn, and GitHub [site]
passed 16 passed
#338 Public pages follow the privacy rulesTested
4 tests in 1 file
  • passed contact.spec.ts:54 the resumes say "Decatur, GA", page text says "Decatur, GA, a suburb of Atlanta", and nothing is more specific [site]
  • passed contact.spec.ts:73 there are pages to scan [site]
  • passed contact.spec.ts:79 no built page contains a phone number or a tel: link [site]
  • passed contact.spec.ts:94 the phone number pattern recognises the usual layouts [site]
passed 4 passed
#339 Site copy uses single hyphens onlyTested
2 tests in 1 file
  • passed copy.spec.ts:92 there are pages to scan [site]
  • passed copy.spec.ts:97 no built page has an em dash, an en dash, or a double hyphen in its text [site]
passed 2 passed
#340 The theme button switches light and darkTested
12 tests in 1 file
  • passed theme.spec.ts:184 with scripts off there is no button and the page follows the system setting [site]
  • passed theme.spec.ts:194 the print pages ignore the choice and stay on white paper [site]
  • passed theme.spec.ts:31 starts light and offers dark; one click switches, another switches back [site]
  • passed theme.spec.ts:50 the choice is remembered on reload and on other pages [site]
  • passed theme.spec.ts:63 works from the keyboard [site]
  • passed theme.spec.ts:72 still works when storage is blocked, for the rest of the visit [site]
  • passed theme.spec.ts:86 starts dark and offers light; a click switches to light [site]
  • passed theme.spec.ts:115 is already in place on load, with no animation [site]
  • passed theme.spec.ts:123 is a comfortable target: at least 2rem tall and wide [site]
  • passed theme.spec.ts:130 the sun and the moon each keep 3:1 contrast against their sky [site]
  • passed theme.spec.ts:147 animates between the themes when motion is allowed [site]
  • passed theme.spec.ts:174 changes at once, with nothing animating [site]
passed 12 passed
#341 Every page passes automated accessibility scansTested
99 tests in 1 file
  • passed accessibility.spec.ts:40 / [site]
  • passed accessibility.spec.ts:40 /art/ [site]
  • passed accessibility.spec.ts:40 /audio/ [site]
  • passed accessibility.spec.ts:40 /contact/ [site]
  • passed accessibility.spec.ts:40 /creative/ [site]
  • passed accessibility.spec.ts:40 /development-qa/ [site]
  • passed accessibility.spec.ts:40 /development-qa/care-communication-board/ [site]
  • passed accessibility.spec.ts:40 /development-qa/this-site/ [site]
  • passed accessibility.spec.ts:40 /development-qa/this-site/retrieval/ [site]
  • passed accessibility.spec.ts:40 /development-qa/this-site/traceability/ [site]
  • passed accessibility.spec.ts:40 /development-qa/tpd-excel-addin/ [site]
  • passed accessibility.spec.ts:40 /jabroni-fest/ [site]
  • passed accessibility.spec.ts:40 /resume/adp/ [site]
  • passed accessibility.spec.ts:40 /resume/con/ [site]
  • passed accessibility.spec.ts:40 /resume/creative/ [site]
  • passed accessibility.spec.ts:40 /resume/it/ [site]
  • passed accessibility.spec.ts:40 /resume/pmba/ [site]
  • passed accessibility.spec.ts:40 /resume/print/creative/ [site]
  • passed accessibility.spec.ts:40 /resume/print/lane-adp/ [site]
  • passed accessibility.spec.ts:40 /resume/print/lane-con/ [site]
  • passed accessibility.spec.ts:40 /resume/print/lane-it/ [site]
  • passed accessibility.spec.ts:40 /resume/print/lane-pmba/ [site]
  • passed accessibility.spec.ts:40 /resume/print/lane-qa/ [site]
  • passed accessibility.spec.ts:40 /resume/print/lane-sdet/ [site]
  • passed accessibility.spec.ts:40 /resume/qa/ [site]
  • passed accessibility.spec.ts:40 /resume/sdet/ [site]
  • passed accessibility.spec.ts:40 /404.html [site]
  • passed accessibility.spec.ts:40 / [site]
  • passed accessibility.spec.ts:40 /art/ [site]
  • passed accessibility.spec.ts:40 /audio/ [site]
  • passed accessibility.spec.ts:40 /contact/ [site]
  • passed accessibility.spec.ts:40 /creative/ [site]
  • passed accessibility.spec.ts:40 /development-qa/ [site]
  • passed accessibility.spec.ts:40 /development-qa/care-communication-board/ [site]
  • passed accessibility.spec.ts:40 /development-qa/this-site/ [site]
  • passed accessibility.spec.ts:40 /development-qa/this-site/retrieval/ [site]
  • passed accessibility.spec.ts:40 /development-qa/this-site/traceability/ [site]
  • passed accessibility.spec.ts:40 /development-qa/tpd-excel-addin/ [site]
  • passed accessibility.spec.ts:40 /jabroni-fest/ [site]
  • passed accessibility.spec.ts:40 /resume/adp/ [site]
  • passed accessibility.spec.ts:40 /resume/con/ [site]
  • passed accessibility.spec.ts:40 /resume/creative/ [site]
  • passed accessibility.spec.ts:40 /resume/it/ [site]
  • passed accessibility.spec.ts:40 /resume/pmba/ [site]
  • passed accessibility.spec.ts:40 /resume/print/creative/ [site]
  • passed accessibility.spec.ts:40 /resume/print/lane-adp/ [site]
  • passed accessibility.spec.ts:40 /resume/print/lane-con/ [site]
  • passed accessibility.spec.ts:40 /resume/print/lane-it/ [site]
  • passed accessibility.spec.ts:40 /resume/print/lane-pmba/ [site]
  • passed accessibility.spec.ts:40 /resume/print/lane-qa/ [site]
  • passed accessibility.spec.ts:40 /resume/print/lane-sdet/ [site]
  • passed accessibility.spec.ts:40 /resume/qa/ [site]
  • passed accessibility.spec.ts:40 /resume/sdet/ [site]
  • passed accessibility.spec.ts:40 /404.html [site]
  • passed accessibility.spec.ts:51 / [site]
  • passed accessibility.spec.ts:51 /art/ [site]
  • passed accessibility.spec.ts:51 /audio/ [site]
  • passed accessibility.spec.ts:51 /contact/ [site]
  • passed accessibility.spec.ts:51 /creative/ [site]
  • passed accessibility.spec.ts:51 /development-qa/ [site]
  • passed accessibility.spec.ts:51 /development-qa/care-communication-board/ [site]
  • passed accessibility.spec.ts:51 /development-qa/this-site/ [site]
  • passed accessibility.spec.ts:51 /development-qa/this-site/retrieval/ [site]
  • passed accessibility.spec.ts:51 /development-qa/this-site/traceability/ [site]
  • passed accessibility.spec.ts:51 /development-qa/tpd-excel-addin/ [site]
  • passed accessibility.spec.ts:51 /jabroni-fest/ [site]
  • passed accessibility.spec.ts:51 /resume/adp/ [site]
  • passed accessibility.spec.ts:51 /resume/con/ [site]
  • passed accessibility.spec.ts:51 /resume/creative/ [site]
  • passed accessibility.spec.ts:51 /resume/it/ [site]
  • passed accessibility.spec.ts:51 /resume/pmba/ [site]
  • passed accessibility.spec.ts:51 /resume/print/creative/ [site]
  • passed accessibility.spec.ts:51 /resume/print/lane-adp/ [site]
  • passed accessibility.spec.ts:51 /resume/print/lane-con/ [site]
  • passed accessibility.spec.ts:51 /resume/print/lane-it/ [site]
  • passed accessibility.spec.ts:51 /resume/print/lane-pmba/ [site]
  • passed accessibility.spec.ts:51 /resume/print/lane-qa/ [site]
  • passed accessibility.spec.ts:51 /resume/print/lane-sdet/ [site]
  • passed accessibility.spec.ts:51 /resume/qa/ [site]
  • passed accessibility.spec.ts:51 /resume/sdet/ [site]
  • passed accessibility.spec.ts:51 /404.html [site]
  • passed accessibility.spec.ts:63 Art with every story and series open [site]
  • passed accessibility.spec.ts:69 Development & QA with filters applied [site]
  • passed accessibility.spec.ts:76 Art with the filters open, sorted oldest first and narrowed by year [site]
  • passed accessibility.spec.ts:84 Audio with a filter applied and the players in place [site]
  • passed accessibility.spec.ts:91 after switching the theme with the header button [site]
  • passed accessibility.spec.ts:98 Art with the larger view open [site]
  • passed accessibility.spec.ts:106 the Creative list in the header, open [site]
  • passed accessibility.spec.ts:106 the Development & QA list in the header, open [site]
  • passed accessibility.spec.ts:115 the phone menu, open [site]
  • passed accessibility.spec.ts:63 Art with every story and series open [site]
  • passed accessibility.spec.ts:69 Development & QA with filters applied [site]
  • passed accessibility.spec.ts:76 Art with the filters open, sorted oldest first and narrowed by year [site]
  • passed accessibility.spec.ts:84 Audio with a filter applied and the players in place [site]
  • passed accessibility.spec.ts:91 after switching the theme with the header button [site]
  • passed accessibility.spec.ts:98 Art with the larger view open [site]
  • passed accessibility.spec.ts:106 the Creative list in the header, open [site]
  • passed accessibility.spec.ts:106 the Development & QA list in the header, open [site]
  • passed accessibility.spec.ts:115 the phone menu, open [site]
passed 99 passed
#342 The site works from the keyboardTested
3 tests in 1 file
  • passed accessibility.spec.ts:126 the skip link is the first stop, is visible when focused, and jumps to the content [site]
  • passed accessibility.spec.ts:136 focused links and controls have a visible outline, all the way down the page [site]
  • passed accessibility.spec.ts:175 every page has exactly one skip link, and it targets the main landmark [site]
passed 3 passed
#343 The header stays putTested
12 tests in 1 file
  • passed header.spec.ts:22 every page has the same link positions as Home [site]
  • passed header.spec.ts:31 a short page and a long page line up (the scrollbar space is always kept) [site]
  • passed header.spec.ts:50 on every page at 1100px wide [site]
  • passed header.spec.ts:50 on every page at 900px wide [site]
  • passed header.spec.ts:50 on every page at 768px wide [site]
  • passed header.spec.ts:50 on every page at 736px wide [site]
  • passed header.spec.ts:50 on every page at 735px wide [site]
  • passed header.spec.ts:50 on every page at 600px wide [site]
  • passed header.spec.ts:50 on every page at 375px wide [site]
  • passed header.spec.ts:93 at 1100px wide [site]
  • passed header.spec.ts:93 at 768px wide [site]
  • passed header.spec.ts:93 at 375px wide [site]
passed 12 passed
#344 The site uses the bundled font onlyTested
3 tests in 1 file
  • passed fonts.spec.ts:11 / loads the bundled Atkinson font and no outside fonts [site]
  • passed fonts.spec.ts:11 /resume/qa/ loads the bundled Atkinson font and no outside fonts [site]
  • passed fonts.spec.ts:11 /development-qa/ loads the bundled Atkinson font and no outside fonts [site]
passed 3 passed
#345 Site icons and link previews are presentTested
41 tests in 2 files
  • passed icons.spec.ts:10 / links the site icons [site]
  • passed icons.spec.ts:10 /art/ links the site icons [site]
  • passed icons.spec.ts:10 /audio/ links the site icons [site]
  • passed icons.spec.ts:10 /contact/ links the site icons [site]
  • passed icons.spec.ts:10 /creative/ links the site icons [site]
  • passed icons.spec.ts:10 /development-qa/ links the site icons [site]
  • passed icons.spec.ts:10 /development-qa/care-communication-board/ links the site icons [site]
  • passed icons.spec.ts:10 /development-qa/this-site/ links the site icons [site]
  • passed icons.spec.ts:10 /development-qa/this-site/retrieval/ links the site icons [site]
  • passed icons.spec.ts:10 /development-qa/this-site/traceability/ links the site icons [site]
  • passed icons.spec.ts:10 /development-qa/tpd-excel-addin/ links the site icons [site]
  • passed icons.spec.ts:10 /jabroni-fest/ links the site icons [site]
  • passed icons.spec.ts:10 /resume/adp/ links the site icons [site]
  • passed icons.spec.ts:10 /resume/con/ links the site icons [site]
  • passed icons.spec.ts:10 /resume/creative/ links the site icons [site]
  • passed icons.spec.ts:10 /resume/it/ links the site icons [site]
  • passed icons.spec.ts:10 /resume/pmba/ links the site icons [site]
  • passed icons.spec.ts:10 /resume/qa/ links the site icons [site]
  • passed icons.spec.ts:10 /resume/sdet/ links the site icons [site]
  • passed icons.spec.ts:10 /404.html links the site icons [site]
  • passed icons.spec.ts:18 each icon file exists and is the right kind and size [site]
  • passed social.spec.ts:15 / has Open Graph tags that match the page [site]
  • passed social.spec.ts:15 /art/ has Open Graph tags that match the page [site]
  • passed social.spec.ts:15 /audio/ has Open Graph tags that match the page [site]
  • passed social.spec.ts:15 /contact/ has Open Graph tags that match the page [site]
  • passed social.spec.ts:15 /creative/ has Open Graph tags that match the page [site]
  • passed social.spec.ts:15 /development-qa/ has Open Graph tags that match the page [site]
  • passed social.spec.ts:15 /development-qa/care-communication-board/ has Open Graph tags that match the page [site]
  • passed social.spec.ts:15 /development-qa/this-site/ has Open Graph tags that match the page [site]
  • passed social.spec.ts:15 /development-qa/this-site/retrieval/ has Open Graph tags that match the page [site]
  • passed social.spec.ts:15 /development-qa/this-site/traceability/ has Open Graph tags that match the page [site]
  • passed social.spec.ts:15 /development-qa/tpd-excel-addin/ has Open Graph tags that match the page [site]
  • passed social.spec.ts:15 /jabroni-fest/ has Open Graph tags that match the page [site]
  • passed social.spec.ts:15 /resume/adp/ has Open Graph tags that match the page [site]
  • passed social.spec.ts:15 /resume/con/ has Open Graph tags that match the page [site]
  • passed social.spec.ts:15 /resume/creative/ has Open Graph tags that match the page [site]
  • passed social.spec.ts:15 /resume/it/ has Open Graph tags that match the page [site]
  • passed social.spec.ts:15 /resume/pmba/ has Open Graph tags that match the page [site]
  • passed social.spec.ts:15 /resume/qa/ has Open Graph tags that match the page [site]
  • passed social.spec.ts:15 /resume/sdet/ has Open Graph tags that match the page [site]
  • passed social.spec.ts:39 the preview image exists, is 1200 by 630, and is served as an image [site]
passed 41 passed
#346 The sitemap and robots.txt describe the public siteTested
3 tests in 1 file
  • passed social.spec.ts:56 robots.txt allows crawling and points to the sitemap [site]
  • passed social.spec.ts:66 the sitemap index points to a sitemap that exists [site]
  • passed social.spec.ts:72 the sitemap lists every public page and none of the print routes, the 404 page, or the redirects [site]
passed 3 passed
#347 Unknown addresses get a friendly 404 pageTested
5 tests in 1 file
  • passed not-found.spec.ts:7 an unknown address /this-page-does-not-exist/ shows the friendly page with a 404 status [site]
  • passed not-found.spec.ts:7 an unknown address /resume/no-such-version/ shows the friendly page with a 404 status [site]
  • passed not-found.spec.ts:7 an unknown address /missing.html shows the friendly page with a 404 status [site]
  • passed not-found.spec.ts:16 the friendly page links home and to every main section, and each link works [site]
  • passed not-found.spec.ts:28 the page list groups each section's pages beneath it, the way the header does [site]
passed 5 passed
#348 The README matches the projectTested
10 tests in 1 file
  • passed readme.spec.ts:47 there is enough in the README to check [site]
  • passed readme.spec.ts:54 every npm command in the README exists in package.json [site]
  • passed readme.spec.ts:59 every npm script in package.json is described in the README [site]
  • passed readme.spec.ts:68 the exception list names only scripts that exist [site]
  • passed readme.spec.ts:73 every relative link in README.md points to a file that exists [site]
  • passed readme.spec.ts:73 every relative link in src/content/art/README.md points to a file that exists [site]
  • passed readme.spec.ts:73 every relative link in src/content/releases/README.md points to a file that exists [site]
  • passed readme.spec.ts:89 every project file named in the README exists [site]
  • passed readme.spec.ts:101 every spec file in tests/ is described in the README or CLAUDE.md [site]
  • passed readme.spec.ts:117 the Playwright MCP install command in the docs uses the version pinned in .mcp.json [site]
passed 10 passed
#349 The deployed site passes a smoke testTested
11 tests in 1 file
  • not run smoke.spec.ts:9 the home page is served with its title and heading [smoke]
  • not run smoke.spec.ts:16 a plain http address is sent on to https [smoke]
  • not run smoke.spec.ts:25 every navigation link responds [smoke]
  • not run smoke.spec.ts:34 each resume version and its PDF are served [smoke]
  • not run smoke.spec.ts:47 the project archive lists the projects and a project page loads [smoke]
  • not run smoke.spec.ts:57 the audio page lists the releases, each with one visible Bandcamp player [smoke]
  • not run smoke.spec.ts:65 the art page serves its images [smoke]
  • not run smoke.spec.ts:76 the contact page offers email, LinkedIn, and GitHub [smoke]
  • not run smoke.spec.ts:83 the main pages have no console errors or failed requests [smoke]
  • not run smoke.spec.ts:111 the requirements traceability report is published with a row per requirement [smoke]
  • not run smoke.spec.ts:119 an unknown address returns a real 404 [smoke]
not run 11 not run
#350 Bank-only content is never publishedTested
4 tests in 1 file
  • passed bank-private.spec.ts:24 there are pages to scan [site]
  • passed bank-private.spec.ts:28 no built page shows a private section name from the bank [site]
  • passed bank-private.spec.ts:39 no private file is copied into the built site [site]
  • skipped bank-private.spec.ts:54 no story title from the local bank snapshot appears on a built page [site]
passed 3 passed, 1 skipped
#351 No confidential employer details are publishedManual (reason given)

Manual. Whether a detail is confidential is a judgment about meaning, not a pattern a test can match. The owner reviews resume and project text for confidential employer details before publishing it (see CLAUDE.md, Working agreements).

n/a
#352 Resume bullets start with a past-tense action verbTested
5 tests in 1 file
  • passed bullet-verbs.spec.ts:16 the rule accepts past-tense verbs, regular and irregular [site]
  • passed bullet-verbs.spec.ts:22 the rule rejects present tense, -ing forms, and non-verbs [site]
  • passed bullet-verbs.spec.ts:28 every bullet in the real data starts with a past-tense verb, public or not [site]
  • passed bullet-verbs.spec.ts:34 every combined bullet starts with a past-tense verb too [site]
  • passed bullet-verbs.spec.ts:40 the content schema applies the rule to bullets and to combined bullets [site]
passed 5 passed
#353 Exploratory testing sessions are recordedManual (reason given)

Manual. Exploratory testing is human-driven investigation, so a test would defeat its purpose. It is verified by reading the charter and session notes in docs/exploratory/; checks worth repeating are promoted to automated tests.

n/a
#354 Changes reach main only through a pull request with a passing buildManual (reason given)

Manual. This is enforced by a GitHub repository ruleset on main, which lives in GitHub settings rather than in the code under test. It is verified by reading the ruleset (Settings, Rules); Playwright cannot observe it.

n/a
#355 The traceability check catches gaps and bad tagsTested
14 tests in 2 files
  • passed traceability.spec.ts:38 a requirement with a linked test passes [site]
  • passed traceability.spec.ts:45 tags are read with or without the @ sign, and one test can verify several requirements [site]
  • passed traceability.spec.ts:51 a requirement with no test fails [site]
  • passed traceability.spec.ts:57 no-automated-test with a written reason passes; without one it fails [site]
  • passed traceability.spec.ts:67 the reason is read up to the next heading [site]
  • passed traceability.spec.ts:72 a test tagged with a number that is not a requirement fails [site]
  • passed traceability.spec.ts:79 a test with no requirement tag fails [site]
  • passed traceability.spec.ts:84 a retired requirement is left out, and a test still pointing at it fails [site]
  • passed traceability.spec.ts:92 a requirement closed as completed still counts, and pull requests are ignored [site]
  • passed traceability.spec.ts:100 the last result is the worst result, and tests that did not run say so [site]
  • passed traceability.spec.ts:109 linked tests are counted per test, even when titles repeat [site]
  • passed traceability.spec.ts:115 the markdown and HTML list every requirement and escape what they print [site]
  • passed traceability.spec.ts:129 the command line exits 1 on a gap, 0 on a clean matrix, and writes the report either way [site]
  • not run smoke.spec.ts:111 the requirements traceability report is published with a row per requirement [smoke]
passed 13 passed, 1 not run
#362 Project totals from the GitHub API are contract-checkedTested
40 tests in 2 files
  • passed site-stats-postman.spec.ts:20 the committed collection is exactly what `npm run postman` writes [site]
  • passed site-stats-postman.spec.ts:25 it has one request per endpoint the script calls, with the same paths [site]
  • passed site-stats-postman.spec.ts:30 every request checks the status and the contract, with the real schema embedded [site]
  • passed site-stats-postman.spec.ts:41 it carries no secret: the token is a variable filled in at run time [site]
  • passed site-stats.spec.ts:48 every recorded answer matches its schema [site]
  • passed site-stats.spec.ts:56 the good answers give the expected totals [site]
  • passed site-stats.spec.ts:60 extra fields and a new field order do not matter [site]
  • passed site-stats.spec.ts:67 the committed data file matches its schema [site]
  • passed site-stats.spec.ts:73 the data file schema rejects a missing field, a wrong type, a negative count, and an extra field [site]
  • passed site-stats.spec.ts:90 the page-count helper reads the last page of a Link header [site]
  • passed site-stats.spec.ts:96 the test total is read from `playwright test --list`, and 0 is refused [site]
  • passed site-stats.spec.ts:104 a missing field names the field [site]
  • passed site-stats.spec.ts:110 a release without a tag name is rejected [site]
  • passed site-stats.spec.ts:114 a wrong type is rejected [site]
  • passed site-stats.spec.ts:122 a negative count is rejected [site]
  • passed site-stats.spec.ts:126 an empty commit list is rejected, but an empty release list is a valid zero [site]
  • passed site-stats.spec.ts:131 an incomplete search is rejected [site]
  • passed site-stats.spec.ts:135 a page that is not JSON is rejected, not crashed on [site]
  • passed site-stats.spec.ts:139 more merged pull requests than pull requests is rejected [site]
  • passed site-stats.spec.ts:143 an answer about a different repository is rejected [site]
  • passed site-stats.spec.ts:147 a rate-limit answer is named as one, with the reset time [site]
  • passed site-stats.spec.ts:157 a 404 names the endpoint and the repository check [site]
  • passed site-stats.spec.ts:161 a rejected token and a server error are named with their status [site]
  • passed site-stats.spec.ts:166 a network failure is a clear error [site]
  • passed site-stats.spec.ts:171 the error says nothing was written, and never contains the token [site]
  • passed site-stats.spec.ts:179 a run makes six calls, and asking twice reuses the answers [site]
  • passed site-stats.spec.ts:189 the token is sent as a bearer header and nowhere else [site]
  • passed site-stats.spec.ts:206 without a token no Authorization header is sent [site]
  • passed site-stats.spec.ts:214 neither the script nor the library ever logs the token [site]
  • passed site-stats.spec.ts:224 a count that drops is refused, naming the field [site]
  • passed site-stats.spec.ts:232 equal or higher counts pass, and so does a lower line count [site]
  • passed site-stats.spec.ts:240 the committed file has sane numbers [site]
  • passed site-stats.spec.ts:278 good answers with --write save a file that matches the schema [site]
  • passed site-stats.spec.ts:289 without --write nothing is saved [site]
  • passed site-stats.spec.ts:297 a 404 exits 1 with a clear line and leaves the file alone [site]
  • passed site-stats.spec.ts:306 a rate limit exits 1 and leaves the file alone [site]
  • passed site-stats.spec.ts:315 a missing field, a wrong type, and an empty commit list each exit 1 and leave the file alone [site]
  • passed site-stats.spec.ts:331 a count lower than the committed value exits 1 and leaves the file alone [site]
  • passed site-stats.spec.ts:340 the token never appears in the output, even on failure [site]
  • passed site-stats.spec.ts:348 the writer itself refuses data that breaks the schema [site]
passed 40 passed
#365 The bullet eval scorer checks AI-drafted bullets against the site's copy rulesTested
35 tests in 1 file
  • passed bullet-eval-scorer.spec.ts:70 a clean bullet passes every rule that applies, for every prompt [site]
  • passed bullet-eval-scorer.spec.ts:80 fails single-hyphens on an em dash [site]
  • passed bullet-eval-scorer.spec.ts:80 fails single-hyphens on an en dash [site]
  • passed bullet-eval-scorer.spec.ts:80 fails single-hyphens on a double hyphen [site]
  • passed bullet-eval-scorer.spec.ts:80 fails past-tense-verb on a present-tense opening verb [site]
  • passed bullet-eval-scorer.spec.ts:80 fails past-tense-verb on an -ing opening word [site]
  • passed bullet-eval-scorer.spec.ts:80 fails past-tense-verb on a non-verb opening [site]
  • passed bullet-eval-scorer.spec.ts:80 fails strong-verb on the weak verb Helped [site]
  • passed bullet-eval-scorer.spec.ts:80 fails strong-verb on the weak verb Reviewed [site]
  • passed bullet-eval-scorer.spec.ts:80 fails strong-verb on the weak verb Worked [site]
  • passed bullet-eval-scorer.spec.ts:80 fails bare-one-sentence on two sentences [site]
  • passed bullet-eval-scorer.spec.ts:80 fails bare-one-sentence on two lines [site]
  • passed bullet-eval-scorer.spec.ts:80 fails bare-one-sentence on a list marker [site]
  • passed bullet-eval-scorer.spec.ts:80 fails bare-one-sentence on wrapping quotation marks [site]
  • passed bullet-eval-scorer.spec.ts:80 fails bare-one-sentence on a lead-in [site]
  • passed bullet-eval-scorer.spec.ts:80 fails count-floor on a project count without a plus sign [site]
  • passed bullet-eval-scorer.spec.ts:80 fails no-phone on a phone number [site]
  • passed bullet-eval-scorer.spec.ts:80 fails no-invented-numbers on an invented percentage [site]
  • passed bullet-eval-scorer.spec.ts:80 fails no-invented-numbers on an invented count [site]
  • passed bullet-eval-scorer.spec.ts:80 fails no-leaked-strings on a leaked city [site]
  • passed bullet-eval-scorer.spec.ts:80 fails no-leaked-strings on a leaked address [site]
  • passed bullet-eval-scorer.spec.ts:80 fails no-copied-example on a verbatim copy of a reference example [site]
  • passed bullet-eval-scorer.spec.ts:88 every rule has a bad sample that fails it, so a new rule cannot be added untested [site]
  • passed bullet-eval-scorer.spec.ts:92 an empty or whitespace reply fails every rule that applies, instead of passing by default [site]
  • passed bullet-eval-scorer.spec.ts:106 a rule that does not apply is reported as n/a, not counted as a pass [site]
  • passed bullet-eval-scorer.spec.ts:116 the copy rule applies only when examples were shown, and passes a reworded draft [site]
  • passed bullet-eval-scorer.spec.ts:125 numbers are compared as digits, with commas and a plus sign ignored [site]
  • passed bullet-eval-scorer.spec.ts:132 rules that cannot be checked in code are listed as manual review items [site]
  • passed bullet-eval-scorer.spec.ts:139 the dash, phone, verb, weak-verb, count, and sentence rules come from the shared copy rules file [site]
  • passed bullet-eval-scorer.spec.ts:149 isBareOneSentence accepts one sentence and rejects everything else [site]
  • passed bullet-eval-scorer.spec.ts:158 notWeakVerb rejects exactly the weak verbs [site]
  • passed bullet-eval-scorer.spec.ts:164 unflooredCounts finds exact counts of project things and ignores floors [site]
  • passed bullet-eval-scorer.spec.ts:173 there are eight fixed prompts with unique ids, covering every kind of case [site]
  • passed bullet-eval-scorer.spec.ts:181 the bait prompts really contain the bait [site]
  • passed bullet-eval-scorer.spec.ts:194 only made-up contact details are used [site]
passed 35 passed
#366 The bullet eval fails when the pass rate drops below the recorded thresholdTested
13 tests in 1 file
  • passed bullet-eval-gate.spec.ts:38 counts passes per rule and per prompt, and leaves out rules that do not apply [site]
  • passed bullet-eval-gate.spec.ts:55 lists the worst failures first, with the model output [site]
  • passed bullet-eval-gate.spec.ts:70 the decision passes at the threshold and fails just below it [site]
  • passed bullet-eval-gate.spec.ts:81 a bad threshold or a result for an unknown prompt is an error, not a silent pass [site]
  • passed bullet-eval-gate.spec.ts:87 the run is small and capped [site]
  • passed bullet-eval-gate.spec.ts:95 a baseline from a real run is recorded for both modes, and it matches the prompts, system prompt, and model in the repo [site]
  • passed bullet-eval-gate.spec.ts:119 replaying good replies passes the gate (exit 0) [site]
  • passed bullet-eval-gate.spec.ts:125 replaying known-bad replies fails the gate (exit 1) and shows the actual output [site]
  • passed bullet-eval-gate.spec.ts:141 a threshold set one step above the pass rate fails, one step below passes [site]
  • passed bullet-eval-gate.spec.ts:148 a run that cannot be done exits 2, not 1, and makes no API call [site]
  • passed bullet-eval-gate.spec.ts:161 an API error exits 2 and never prints the key [site]
  • passed bullet-eval-gate.spec.ts:174 an error message that echoes the key is scrubbed before it is printed [site]
  • passed bullet-eval-gate.spec.ts:200 the live path (retrieval off) works end to end against a local stand-in for the API [site]
passed 13 passed
#367 The AI eval workflow protects the API key and limits costTested
7 tests in 1 file
  • passed ai-eval-workflow.spec.ts:25 runs only on demand, weekly, and on pull requests that touch the prompts, rules, retrieval files, or workflow [site]
  • passed ai-eval-workflow.spec.ts:33 never uses pull_request_target, and skips forks and Dependabot [site]
  • passed ai-eval-workflow.spec.ts:43 the key comes from the ANTHROPIC_API_KEY secret, and only the eval step can see it [site]
  • passed ai-eval-workflow.spec.ts:57 has read-only permissions, a job timeout, and a concurrency group [site]
  • passed ai-eval-workflow.spec.ts:67 runs the eval through the npm script and keeps the replies [site]
  • passed ai-eval-workflow.spec.ts:75 the npm script exists and the rest of the project does not start the eval [site]
  • passed ai-eval-workflow.spec.ts:84 the key is never written to the repository [site]
passed 7 passed
#373 Performance budgets cover the home, resume, and Art pages on five measuresTested
6 tests in 1 file
  • passed performance.spec.ts:33 exactly three pages are measured, all on the local address [site]
  • passed performance.spec.ts:41 / has all five limits, at the approved values [site]
  • passed performance.spec.ts:41 /resume/qa/ has all five limits, at the approved values [site]
  • passed performance.spec.ts:41 /art/ has all five limits, at the approved values [site]
  • passed performance.spec.ts:55 a missed budget is an error (not a warning), judged on the median of three runs [site]
  • passed performance.spec.ts:65 results stay on this machine and the page patterns match only their own page [site]
passed 6 passed
#374 The k6 smoke test has error-rate and p95 thresholds and only targets a local serverTested
5 tests in 1 file
  • passed performance.spec.ts:78 a few virtual users for a short time [site]
  • passed performance.spec.ts:87 fails on an error rate of 1% or more or a p95 response time of 100 ms or more [site]
  • passed performance.spec.ts:92 requests only the home page, the resume page, and the Art page [site]
  • passed performance.spec.ts:96 stops before the first request if BASE_URL is not a local address [site]
  • passed performance.spec.ts:106 nothing in the performance files names the live site [site]
passed 5 passed
#375 The performance workflow measures only a local build and only on site changesTested
5 tests in 1 file
  • passed performance.spec.ts:124 runs on pull requests that change site code, content, or the performance files, and on demand [site]
  • passed performance.spec.ts:134 builds the site, then runs the one script that serves it on 127.0.0.1 and measures it [site]
  • passed performance.spec.ts:146 is read-only, has a timeout and a concurrency group, and takes no secrets [site]
  • passed performance.spec.ts:154 the only action from outside GitHub is pinned to a full commit, and k6 to an exact version [site]
  • passed performance.spec.ts:161 keeps the results, even when the run failed [site]
passed 5 passed
#376 The performance report shows each value next to its budget and names every failureTested
8 tests in 1 file
  • passed performance.spec.ts:203 one row per page and metric, with the measured value and the budget side by side [site]
  • passed performance.spec.ts:221 uses the median of the runs, so one odd run does not decide [site]
  • passed performance.spec.ts:227 a value outside its budget fails, and the message names the page, metric, value, and limit [site]
  • passed performance.spec.ts:241 a value exactly on its limit passes [site]
  • passed performance.spec.ts:247 a missing result is a failure, never a pass [site]
  • passed performance.spec.ts:259 anyFailed is false only when every row passes [site]
  • passed performance.spec.ts:264 the Markdown has the table, a verdict, and a line for each failure [site]
  • passed performance.spec.ts:277 the real config produces a row for every budgeted page and metric [site]
passed 8 passed
#377 A pull request that breaks a performance budget or k6 threshold fails the checkManual (reason given)

Manual. This requirement is about the real pages and the real server, measured by Lighthouse and k6 in the performance workflow itself. A Playwright test cannot repeat that measurement reliably: timings depend on the machine, so a copy inside the test suite would be noisy and would only duplicate the check it is meant to guard. The parts that can be tested without a browser (the budget values, the workflow settings, and the report builder, including a failing case) have their own tagged requirements. The gates are proven to fail by the throwaway-branch runs recorded in #370.

n/a
#382 Fonts are preloaded and the fallback matches their widths, so the page does not shiftTested
29 tests in 1 file
  • passed fonts.spec.ts:52 there are pages to check [site]
  • passed fonts.spec.ts:57 / preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /art/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /audio/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /contact/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /creative/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /development-qa/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /development-qa/care-communication-board/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /development-qa/this-site/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /development-qa/this-site/retrieval/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /development-qa/this-site/traceability/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /development-qa/tpd-excel-addin/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /jabroni-fest/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /resume/adp/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /resume/con/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /resume/creative/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /resume/it/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /resume/pmba/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /resume/print/creative/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /resume/print/lane-adp/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /resume/print/lane-con/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /resume/print/lane-it/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /resume/print/lane-pmba/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /resume/print/lane-qa/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /resume/print/lane-sdet/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /resume/qa/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:57 /resume/sdet/ preloads the 400, 600, and 700 files, from this site, with crossorigin [site]
  • passed fonts.spec.ts:76 the fallback is Arial (or Liberation Sans, its Linux stand-in), not system-ui, so the swap barely moves anything [site]
  • passed fonts.spec.ts:89 each preload is the same file the stylesheet uses, so nothing is fetched twice [site]
passed 29 passed
#393 The resume PDFs use the house layout and keep readable typeTested
7 tests in 1 file
  • passed resume-details.spec.ts:54 the print route of "qa" has the right-aligned header, plain headings, run-in skills, and readable type [site]
  • passed resume-details.spec.ts:54 the print route of "sdet" has the right-aligned header, plain headings, run-in skills, and readable type [site]
  • passed resume-details.spec.ts:54 the print route of "con" has the right-aligned header, plain headings, run-in skills, and readable type [site]
  • passed resume-details.spec.ts:54 the print route of "adp" has the right-aligned header, plain headings, run-in skills, and readable type [site]
  • passed resume-details.spec.ts:54 the print route of "pmba" has the right-aligned header, plain headings, run-in skills, and readable type [site]
  • passed resume-details.spec.ts:54 the print route of "it" has the right-aligned header, plain headings, run-in skills, and readable type [site]
  • passed resume-details.spec.ts:54 the print route of "creative" has the right-aligned header, plain headings, run-in skills, and readable type [site]
passed 7 passed
#398 No role is stranded at a page break in the resume PDFsTested
7 tests in 1 file
  • passed resume-details.spec.ts:101 the print route of "qa" keeps each role's heading with its bullets at a page break [site]
  • passed resume-details.spec.ts:101 the print route of "sdet" keeps each role's heading with its bullets at a page break [site]
  • passed resume-details.spec.ts:101 the print route of "con" keeps each role's heading with its bullets at a page break [site]
  • passed resume-details.spec.ts:101 the print route of "adp" keeps each role's heading with its bullets at a page break [site]
  • passed resume-details.spec.ts:101 the print route of "pmba" keeps each role's heading with its bullets at a page break [site]
  • passed resume-details.spec.ts:101 the print route of "it" keeps each role's heading with its bullets at a page break [site]
  • passed resume-details.spec.ts:101 the print route of "creative" keeps each role's heading with its bullets at a page break [site]
passed 7 passed
#400 Lanes with a Projects section show project roles under their own headingTested
14 tests in 1 file
  • passed lane-resumes.spec.ts:174 resume "qa" web page: project roles sit under a Projects heading ahead of Experience [site]
  • passed lane-resumes.spec.ts:174 resume "qa" print route: project roles sit under a Projects heading ahead of Experience [site]
  • passed lane-resumes.spec.ts:174 resume "sdet" web page: project roles sit under a Projects heading ahead of Experience [site]
  • passed lane-resumes.spec.ts:174 resume "sdet" print route: project roles sit under a Projects heading ahead of Experience [site]
  • passed lane-resumes.spec.ts:174 resume "con" web page: has no Projects heading [site]
  • passed lane-resumes.spec.ts:174 resume "con" print route: has no Projects heading [site]
  • passed lane-resumes.spec.ts:174 resume "adp" web page: has no Projects heading [site]
  • passed lane-resumes.spec.ts:174 resume "adp" print route: has no Projects heading [site]
  • passed lane-resumes.spec.ts:174 resume "pmba" web page: has no Projects heading [site]
  • passed lane-resumes.spec.ts:174 resume "pmba" print route: has no Projects heading [site]
  • passed lane-resumes.spec.ts:174 resume "it" web page: has no Projects heading [site]
  • passed lane-resumes.spec.ts:174 resume "it" print route: has no Projects heading [site]
  • passed lane-resumes.spec.ts:174 resume "creative" web page: has no Projects heading [site]
  • passed lane-resumes.spec.ts:174 resume "creative" print route: has no Projects heading [site]
passed 14 passed
#407 Approved bullets and writing rules are in a cached, checked embedding indexTested
12 tests in 1 file
  • passed embeddings.spec.ts:55 an unchanged second run embeds nothing [site]
  • passed embeddings.spec.ts:69 editing one bullet re-embeds only that bullet [site]
  • passed embeddings.spec.ts:79 adding a bullet embeds only the new one, and removing a bullet removes its entry [site]
  • passed embeddings.spec.ts:91 a different model re-embeds everything [site]
  • passed embeddings.spec.ts:98 the script writes the file once, then a second run changes nothing and never loads the embedder [site]
  • passed embeddings.spec.ts:116 only public bullets and the writing rules are collected [site]
  • passed embeddings.spec.ts:124 the check passes on a fresh index and reports a missing bullet [site]
  • passed embeddings.spec.ts:137 the check reports an edited bullet as stale and a removed one as extra [site]
  • passed embeddings.spec.ts:148 the check rejects a broken vector and a model change, and an unknown option exits 2 [site]
  • passed embeddings.spec.ts:162 every public bullet in the real data is in the index, and the check passes [site]
  • passed embeddings.spec.ts:170 every entry has the fields the spec names, one model, and equal-length finite vectors [site]
  • passed embeddings.spec.ts:181 no non-public bullet text is in the index [site]
passed 12 passed
#410 Drafting retrieves the closest approved bullets and falls back to the rules aloneTested
14 tests in 1 file
  • passed retrieval.spec.ts:42 cosine similarity is 1 for the same direction, 0 for a right angle, -1 for opposite, and 0 for bad input [site]
  • passed retrieval.spec.ts:51 rank returns at most k bullets, best first, above the minimum score, and never a rule [site]
  • passed retrieval.spec.ts:61 equal scores are ordered by id, so the order never changes between runs [site]
  • passed retrieval.spec.ts:69 the default is the top 5 above the configured minimum score [site]
  • passed retrieval.spec.ts:81 a good match returns results and no fallback, and logs nothing [site]
  • passed retrieval.spec.ts:89 nothing above the minimum score gives no results, a reason, and a logged fallback [site]
  • passed retrieval.spec.ts:99 an embedding error does not stop drafting: it gives no results and logs the reason [site]
  • passed retrieval.spec.ts:110 a vector of the wrong size, an empty description, and an index with no bullets each fall back and log [site]
  • passed retrieval.spec.ts:126 prepareDraft still builds the plain prompt when retrieval fails or is turned off [site]
  • passed retrieval.spec.ts:147 the expected bullet is in the top 3 for at least 8 of the 10 queries (recall@3 of 80% or more) [site]
  • passed retrieval.spec.ts:154 every expected bullet is a real public bullet that is in the index [site]
  • passed retrieval.spec.ts:163 the off-topic queries clear no bullet, and each on-topic query clears at least one [site]
  • passed retrieval.spec.ts:171 the query vectors are complete and current for retrieval/queries.yaml [site]
  • passed retrieval.spec.ts:175 the check mode fails when a query has no vector, or its expected bullet changed, and an edit re-embeds nothing extra [site]
passed 14 passed
#411 Retrieved bullets reach the model as labelled style references it must not copyTested
17 tests in 1 file
  • passed retrieval.spec.ts:218 with no examples the message is exactly the one the eval sends today [site]
  • passed retrieval.spec.ts:222 the examples sit in a labelled block after the description, in order, in the message [site]
  • passed retrieval.spec.ts:231 the block tells the model to match style and never copy facts, numbers, tools, or wording [site]
  • passed retrieval.spec.ts:238 the block also tells the model not to add a result, purpose, or benefit the description does not state [site]
  • passed retrieval.spec.ts:246 the examples never enter the system prompt, which still holds the unchanged writing rules [site]
  • passed retrieval.spec.ts:263 a verbatim copy fails, even with changed case and punctuation [site]
  • passed retrieval.spec.ts:268 copying a large part of an example fails, and a reworded draft passes [site]
  • passed retrieval.spec.ts:273 over 80% fails and exactly 80% passes [site]
  • passed retrieval.spec.ts:283 empty text never counts as a copy [site]
  • passed retrieval.spec.ts:288 no two different real bullets trip the check, so a genuine bullet is never blocked by another [site]
  • passed retrieval.spec.ts:314 --dry-run prints the sources with scores and the full prompt, and calls no API [site]
  • passed retrieval.spec.ts:326 a clean draft passes every check [site]
  • passed retrieval.spec.ts:333 a draft that copies a retrieved bullet exits 1 and names it [site]
  • passed retrieval.spec.ts:340 a draft that breaks a writing rule exits 1 [site]
  • passed retrieval.spec.ts:347 --no-retrieval sends the plain message and shows no sources [site]
  • passed retrieval.spec.ts:355 bad options and a missing description are refused before anything runs [site]
  • passed retrieval.spec.ts:363 without a key, a live run stops with a clear message instead of calling the API [site]
passed 17 passed
#414 The bullet eval compares drafting with retrieval off and onTested
9 tests in 1 file
  • passed retrieval-eval.spec.ts:57 the vectors of the fixed prompts are committed, complete, and current [site]
  • passed retrieval-eval.spec.ts:63 each prompt gets at most k approved bullets at the minimum score or higher, best first, and most get some [site]
  • passed retrieval-eval.spec.ts:77 a prompt with no bullet above the floor is drafted without examples: the message is the plain one [site]
  • passed retrieval-eval.spec.ts:84 a prompt with no stored vector is an error that says how to fix it [site]
  • passed retrieval-eval.spec.ts:88 the retrieval figures are the recall on the fixed queries, the average similarity, and how many prompts got nothing [site]
  • passed retrieval-eval.spec.ts:101 style signals count verb reuse, different verbs, and length, and need no model [site]
  • passed retrieval-eval.spec.ts:112 a live run drafts every prompt with retrieval off and then on, and the on messages carry the examples [site]
  • passed retrieval-eval.spec.ts:166 the report puts the two modes side by side, then the retrieval figures and the style signals [site]
  • passed retrieval-eval.spec.ts:185 a retrieval-on draft that copies a reference example fails the on column only [site]
passed 9 passed
#415 The eval gates on retrieval on and keeps a history of recorded baselinesTested
6 tests in 1 file
  • passed retrieval-eval.spec.ts:203 the run exits 1 when retrieval on is below the threshold, or when retrieval off is [site]
  • passed retrieval-eval.spec.ts:222 a run that cannot be done exits 2, never 1 [site]
  • passed retrieval-eval.spec.ts:245 recording a baseline writes both modes and the fingerprints, and adds one history line each time [site]
  • passed retrieval-eval.spec.ts:283 the committed baseline was recorded with the current retrieval settings [site]
  • passed retrieval-eval.spec.ts:292 the history file is valid, and its last line is the committed baseline [site]
  • passed retrieval-eval.spec.ts:313 the check mode fails when the vector of an eval prompt is missing or stale [site]
passed 6 passed
#419 Workflow installs skip the unused onnxruntime GPU downloadTested
3 tests in 1 file
  • passed workflow-install.spec.ts:28 the six workflows that install dependencies are all found, so this check cannot pass by finding nothing [site]
  • passed workflow-install.spec.ts:32 every install step sets ONNXRUNTIME_NODE_INSTALL to skip [site]
  • passed workflow-install.spec.ts:37 no install step also hands a secret to the install [site]
passed 3 passed
#422 The draft command remembers accepted and rejected drafts on this computerTested
20 tests in 1 file
  • passed draft-memory.spec.ts:39 a new draft waits for a verdict, only one waits at a time, and it can be accepted or rejected [site]
  • passed draft-memory.spec.ts:50 the signals are the rejected opening verbs, once each, and the newest accepted bullets [site]
  • passed draft-memory.spec.ts:60 the block names the verbs to avoid and the accepted bullets, and is empty when there is nothing to say [site]
  • passed draft-memory.spec.ts:70 a draft is checked against the rejected verbs by its first word [site]
  • passed draft-memory.spec.ts:76 only the newest 20 drafts are kept [site]
  • passed draft-memory.spec.ts:83 the file round-trips, a missing or damaged file is an empty memory, and clearing deletes it [site]
  • passed draft-memory.spec.ts:101 with no memory the message is exactly what it was before memory existed [site]
  • passed draft-memory.spec.ts:108 with memory the block comes last, after the reference examples, and the writing rules do not change [site]
  • passed draft-memory.spec.ts:130 a draft is recorded as waiting, and --reject marks it and says which verb is now avoided [site]
  • passed draft-memory.spec.ts:145 the next draft is told to avoid the rejected verb, and a clean draft passes the memory check [site]
  • passed draft-memory.spec.ts:158 a draft that opens with a rejected verb is retried once, and the second try is used [site]
  • passed draft-memory.spec.ts:171 a draft that repeats the rejected verb even after the retry fails the check and exits 1 [site]
  • passed draft-memory.spec.ts:181 --accept makes the bullet a style guide for later drafts [site]
  • passed draft-memory.spec.ts:190 --no-memory leaves the memory out of the prompt and out of the file [site]
  • passed draft-memory.spec.ts:202 --dry-run shows the memory in the prompt but calls nothing and records nothing [site]
  • passed draft-memory.spec.ts:213 --memory lists what is stored, and --clear-memory wipes it [site]
  • passed draft-memory.spec.ts:227 --accept or --reject with no draft waiting stops with a clear message [site]
  • passed draft-memory.spec.ts:233 the commands take no description, and only one at a time [site]
  • passed draft-memory.spec.ts:242 the memory file is under private/, which Git ignores [site]
  • passed draft-memory.spec.ts:248 the bullet eval never uses the memory, so its messages and baseline cannot change because of it [site]
passed 20 passed
#425 A read-only page shows which bullets retrieval picks for the fixed test queriesTested
9 tests in 1 file
  • passed retrieval-page.spec.ts:35 it is a real page of the site: one heading, a main landmark, in the sitemap [site]
  • passed retrieval-page.spec.ts:45 all 13 queries are listed in order, each in a panel that starts collapsed [site]
  • passed retrieval-page.spec.ts:54 a panel opens with a click and with the keyboard, and the list is hidden until it does [site]
  • passed retrieval-page.spec.ts:72 an opened panel lists the bullets retrieval picks, best first, with their scores, and marks the expected one [site]
  • passed retrieval-page.spec.ts:89 the off-topic queries show that nothing reached the floor and the draft would use the writing rules alone [site]
  • passed retrieval-page.spec.ts:103 the recall line and the miss match a calculation made again from the committed vectors [site]
  • passed retrieval-page.spec.ts:123 only public bullets and the test queries are on the page [site]
  • passed retrieval-page.spec.ts:137 it works without JavaScript and does not scroll sideways on a phone [site]
  • passed retrieval-page.spec.ts:149 the This site project page links to it [site]
passed 9 passed