You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Audit the compiler's modules, seams and architecture rules against the scale premise #360
the tests that reach it, its coverage and its mutation score;
its churn (commits touching it since 2026-08-31);
which chapter of the layout in Decide the chapter layout of the rewritten spec it implements, and for each concept chapter (11, 12, 13, 16, 17, 18, 19) how many modules one concept is spread over today.
The output is a cited table in docs/research/, sorted so the cheapest-to-cut items rise to the top. It recommends nothing; the structure is a later decision.
Measured at origin/main4c12851; the cited tables are in docs/research/compiler-at-scale.md on branch research/compiler-at-scale (no pull request yet). It measures and recommends nothing. The gist:
Size and age.src/ is 89 modules and 12,463 lines in ten folders. Ten modules hold 45.6% of the lines. 33 modules have exactly one importer; 14 have ten or more, 10 of them in model/. 83 of the 89 modules first appear at their current path on or after 2026-09-30.
Coverage and mutation do not tell modules apart. Every module that coverage includes has 100% of its lines covered, and two miss one branch each. The mutation break score is 100, so every module scores 100% in a green run. The latest green main run had 6,759 mutants in 78 modules: 6,663 killed, 20 timed out, and 76 ignored through 58 // Stryker disable comments in 21 modules. What does vary is the number of test files reaching a module: median 7, range 1 to 21.
Concept spread. Counting a module when its code names a concept's identifiers ten times or more, Data sits in 21 modules, Secrets and access in 20, Processes in 13, Exposure in 12, and Dependencies, Placement and Observability in 7 each, across 4 to 8 folders. Six modules carry five or six of the seven concepts. This proxy over-counts; the citation proxy gives 1 to 13.
Seams.Hasher has one implementation and no test passes another. Serializer has one implementation plus two inline test stubs. The four ports docs/architecture.md names (PinnedInputSet, FragmentSource, FragmentPublisher, DeliverableWriter) are declared nowhere. The adapter registry holds six adapters; adapters/flux/ is a seventh directory outside it.
Gates, over the whole CI history (618 runs, 546 completed). 11 of the 20 gates were never red: lint, format, boundaries, package contents, decisions, manifests, requirements, rules, docs, agents and meaning. Three were red only for reasons outside the change (an actionlint download, a secret-scan licence, links on a push to main). Six turned a pull request red on its own change and a later commit fixed it: mutation on 7 pull requests, the model-driven build on 4, tests on 4, code scanning on 3, codes on 1 and types on 1. That is 15 of 170 pull requests.
No compiler test ever failed in CI. The 10 red test runs failed in seven test files, all of them repository-contract tests in the root of test/; none under test/model/, test/application/, test/adapters/ or test/cli/. The coverage thresholds never failed a run.
Rules. 7 of the 74 ledger rows have a red CI run on record (RULE-048, 050, 055, 058, 063, 064, 065), six of them on a pull request's own change. The 19 dependency-cruiser rows ran 585 times and the 22 ESLint rows 612 times without one. Two rows are pending on tickets that have closed. The 29 fixture files take 77.1 of the suite's 111.0 summed seconds; the 45 repository-gate test files take 91.2 and the 32 compiler test files 19.8.
Mutation. 79.8% of CI minutes, with shard medians of 9.4 to 17.8 minutes. Of 26 red jobs, 10 were survivors in files the pull request changed (7 pull requests), 14 were survivors the branch did not introduce (two episodes, including two red pushes to main), 1 was a sandbox failure and 1 is on a pull request still open.
Architecture records and residue. 11 of the 14 records never had their enforcing gate red; the three that did are 0063 (mutation), 0067 and 0089. 0059 is cited by nothing outside its register. Of 21 concepts the map has decided to add, 20 have no identifier in src/ yet.
Statements that differ from the tree. Fourteen places where docs/architecture.md, the rule ledger or an architecture record says something the tree does not do are listed in the document's last table: the four undeclared ports, a staging-directory rename that is not in the code, layer rows that omit an import, thresholds described as sitting on what the suite reaches, and RULE-046 and RULE-047 pending on closed tickets.
Caveat on "never red". CI shows only what npm run verify on the author's machine did not already stop.
Not measured: what local verify runs caught; a mutation score per module below 100%; CI minutes per rule; live-estate need per module; test/, scripts/ and emf/ per file. The record-to-rule mapping is a reading of each record's Settled by line, since the ledger has no such column.
Activity
ExtraToast commentedon Oct 12, 2026
Resolution
Measured at
origin/main4c12851; the cited tables are indocs/research/compiler-at-scale.mdon branchresearch/compiler-at-scale(no pull request yet). It measures and recommends nothing. The gist:src/is 89 modules and 12,463 lines in ten folders. Ten modules hold 45.6% of the lines. 33 modules have exactly one importer; 14 have ten or more, 10 of them inmodel/. 83 of the 89 modules first appear at their current path on or after 2026-09-30.mainrun had 6,759 mutants in 78 modules: 6,663 killed, 20 timed out, and 76 ignored through 58// Stryker disablecomments in 21 modules. What does vary is the number of test files reaching a module: median 7, range 1 to 21.Hasherhas one implementation and no test passes another.Serializerhas one implementation plus two inline test stubs. The four portsdocs/architecture.mdnames (PinnedInputSet,FragmentSource,FragmentPublisher,DeliverableWriter) are declared nowhere. The adapter registry holds six adapters;adapters/flux/is a seventh directory outside it.main). Six turned a pull request red on its own change and a later commit fixed it: mutation on 7 pull requests, the model-driven build on 4, tests on 4, code scanning on 3, codes on 1 and types on 1. That is 15 of 170 pull requests.test/; none undertest/model/,test/application/,test/adapters/ortest/cli/. The coverage thresholds never failed a run.main), 1 was a sandbox failure and 1 is on a pull request still open.src/yet.docs/architecture.md, the rule ledger or an architecture record says something the tree does not do are listed in the document's last table: the four undeclared ports, a staging-directory rename that is not in the code, layer rows that omit an import, thresholds described as sitting on what the suite reaches, and RULE-046 and RULE-047 pending on closed tickets.Caveat on "never red". CI shows only what
npm run verifyon the author's machine did not already stop.Not measured: what local
verifyruns caught; a mutation score per module below 100%; CI minutes per rule; live-estate need per module;test/,scripts/andemf/per file. The record-to-rule mapping is a reading of each record'sSettled byline, since the ledger has no such column.The structure itself is decided on Decide the compiler's structure after the rewrite, which this unblocks.