docs(manuscript): evidence matrix with a mechanically enforced anonymisation rule - #569
Merged
Merged
Conversation
…isation rule Step 3 of the lessons-learned manuscript plan. 23 incidents from F1-F10, E1-E3 and nine operational findings not previously catalogued, one row each: date, phase, lesson, sites, symptom, root cause, impact, evidence pointer, issue, PR, job id, preventive change, general lesson. Every row carries at least one of evidence / issue / PR / job id. The validator reports any that does not as [UNSOURCED] rather than letting it look established. The anonymisation rule is enforced rather than intended. The plan commits to naming sites where the fact is neutral and verifiable and pseudonymising them wherever the variable describes participation -- response latency, unavailable periods, support burden. Each row declares attribution_kind, and the validator fails if a participation row names its site anywhere in the prose, not just in the site column. Verified by injecting a violation: it is caught and the offending column is named, exit code 1. The pseudonym mapping is deliberately not ordered by dataset size. Those sizes are published under real names in the data-by-site deck, so a size-ordered mapping would re-identify every anonymised row on sight. Coverage is reported per lesson, and two gaps are surfaced rather than hidden: lessons 1 (governance) and 8 (prototype-to-consortium redesign) have no incident rows, because those arguments are carried by correspondence and architecture. The manuscript must not imply the matrix supports them. Nine rows are new to any catalogue: the DERP relay, the deploy-test port collision, the skipped nvflare tests, the handbook tests that have never run (#565), the CI concurrency eviction (#554), the four wrong join dates, the zero-rendered-as-blank class count, the cost of robust aggregation under 94-fold data imbalance (#566), and the active-learning calibration finding. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.
Step 3 of the lessons-learned manuscript plan: the evidence matrix, which is both the analysis instrument and the paper's appendix.
23 incidents, one row each — date, phase, lesson, sites, symptom, root cause, impact, evidence pointer, issue, PR, job id, preventive change, general lesson. Seeded from F1–F10 and E1–E3, plus nine operational findings not previously in any catalogue:
importorskiphiding the collector tests through two live 8-site runsThe anonymisation rule is enforced, not intended
The plan commits to naming sites where the fact is neutral and verifiable, and pseudonymising them wherever the variable describes participation — response latency, unavailable periods, support burden. Each row declares
attribution_kind, and the validator fails if a participation row names its site anywhere in the prose, not merely in the site column.Verified by injecting a violation:
CI-usable as-is. A validator that cannot fail is worth nothing — which is the same lesson as O3 and O4 in the matrix itself.
The pseudonym mapping is deliberately not ordered by dataset size. Those sizes are published under real names in the data-by-site deck, so a size-ordered mapping would re-identify every anonymised row on sight.
Sourcing
Every row carries at least one of evidence / issue / PR / job id. Any that did not would be reported as
[UNSOURCED]rather than left to look established. Currently: none.Coverage gaps are surfaced, not hidden
Lessons 1 and 8 have no incident rows, because those arguments are carried by correspondence and architecture rather than by incidents. The tool says so explicitly so the manuscript does not imply the matrix supports them.
Contents
docs/manuscript/evidence_matrix.csv— the datadocs/manuscript/evidence_matrix_public.md— generated appendix, grouped by lessonscripts/manuscript/build_evidence_matrix.py— validate (default) or--publishDocs and one script; no runtime code touched.
🤖 Generated with Claude Code