Repository navigation
chore(process): measure the process, then fix what the measurement found - #366
Merged
Merged
Conversation
A first Measure -> Analyze -> Change cycle, started from a written review of how this project is
developed (incremental development on XP practices). The review's own order was baseline first,
since it is the cheapest step and the one everything after is judged by, so that is where this
began - and the changes come from what the numbers showed.
Measure. scripts/process-metrics.mjs reads the measures straight out of GitHub and git: no tool
to install, rerunnable each cycle. Baseline, all history / last 30 days:
deployment frequency 32.8 / 39.7 merges a week
CI pass ratio 96.9% / 99.7%
defect escape rate 43.2% / 46.5%
fixes carrying a test 43.6% / 60.4%
Analyze. CI says yes to nearly everything while almost one fix lands per two changes. Fixes
concentrate in App (63 fix-touches; the next file has 11). Over half of all fixes landed
without a test. And two things found on the way:
- CI ran four of the ten gates. ci.yml listed its steps by hand, and every gate added to
`npm run check` since - helper index, unreachable, unused imports, stroke writes, native
dialogs, i18n - bound only on a machine where someone ran it.
- ARCHITECTURE.md did not name 44 of the 152 files under src/ (29%); export/ had no section.
Change.
- CI runs `npm run check` as one step, so the two lists cannot drift apart again.
- scripts/fix-needs-test.mjs: a branch with a fix: commit must change something under test/,
or say why in a No-Test: trailer. The targeted test-first the review asked for.
- scripts/architecture-index.mjs: every file under src/ must be named in ARCHITECTURE.md. The
44 were added.
- A needs-verification label, so deferred device checks are counted (it read 0 while #338
waited, because nothing recorded the wait).
README, README.ko and CONTRIBUTING corrected where they had drifted too: a guard table with its
last row stranded outside it, "six guards" when there were seven, squash-merge where the
repository rebase-merges, and "npm run check is what CI runs", which was not true until now.
The record, with what each change is expected to move at the next measurement, is in
docs/process/2026-10-14.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A first Measure → Analyze → Change cycle on the development process itself. It starts from a written review of how this project is built — incremental development run on XP practices, checked practice by practice, ending in a risk plan and five steps. The review ordered those steps with the measurement baseline first: it is the cheapest, and every other step is judged by it. So that is where this began, and the changes below were chosen from what the numbers showed, not from the list.
The full record is
docs/process/2026-10-14.md.Measure
scripts/process-metrics.mjsreads the DevOps measures straight out of the repository's own records — merged PRs, issues, Actions runs, git history. Nothing to install; rerunnable at the end of each cycle, with--jsonsaved beside the record for diffing.Three corrections were needed before the numbers could be trusted — 55 PR titles written as prose and counted as nothing,
App.jsx/App.tsxsplit across two names, translation tables ranking as "hotspots" — and the escape rate moved from 48.5% to 43.2% because of them. The record lists each.Analyze
ci.ymlclaimed to runnpm run checkand instead listed four steps by hand. Every gate added locally since — helper index, unreachable, unused imports, stroke writes, native dialogs, i18n — bound only on a machine where someone ran it. CONTRIBUTING said "npm run checkis what CI runs"; it was not.ARCHITECTURE.mdnamed 108 of 152 files undersrc/;export/had no section.Change
scripts/fix-needs-test.mjs— a branch with afix:commit must changetest/, or carry aNo-Test:trailer with a reasonscripts/architecture-index.mjs— everysrc/file must be named in the map; the 44 addednpm run checkas one step — one list cannot drift from itselfneeds-verificationlabel on #338 and #4, counted by the metricsThe expected directions are written into the record now, so the next measurement is checked against a prediction rather than fitted to it afterwards.
Verification
npm run checkgreen locally: 1312 tests; both new gates run in it.fix:with no test fails; aNo-Test:reason passes; an emptyNo-Test:fails; a fix with its test in a separate commit on the same branch passes.npm run checkwith full history, so thecheckjob here is what proves C1 and C3 work in Actions.Also corrected because they were the same drift: README's guard table with its last row stranded outside it, "six static guards" (there were seven; now nine), CONTRIBUTING's squash-merge where the repository rebase-merges, and "read it before editing App.jsx".
🤖 Generated with Claude Code