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
Commit f2f2819
Browse filesBrowse the repository at this point in the historyBrowse files
feat(detect): disclose score ties instead of presenting them as a ranking (#85)
The detector breaks equal scores on (module, lineno) — alphabetically. A reader
taking the top ten off a band of eighteen equally-scored candidates was reading
the alphabet, and nothing in the output said so. PR #83 stopped the benchmark
telling itself that story; this stops the product telling it to users.
`modscan detect` now prints, above the table, how many candidates share the
score at the cutoff and how many of them are shown:
**18 candidates score exactly 1.00, and this list shows 12 of them.** The 6
left out are not ranked lower — ties are broken by module name, so the cut
through this band is alphabetical, not evidence-based.
When the band is fully visible the note says so instead of claiming truncation,
and when the cutoff is unambiguous there is no note at all — a warning that
fires on every run is one nobody reads.
`--json` gains `tied_with` per point, since a machine consumer that re-ranks or
truncates the payload needs the same fact and cannot read Markdown. The field is
additive; `modscan diff` compares ids, category and kind, not the payload shape.
Ties are measured on the full ranked list before `--limit` cuts it — computing
them afterwards would describe the truncated list rather than the ranking.
Presentation only: no weight, no signal and no ordering changed. Benchmark
unchanged at 18/34, bounds 6..23.
examples/detect-markdown.md is regenerated from its committed recipe. It was
already stale — it predated the MS-MOD-* signal ids from #56 — and it turns out
to be the exact failure this change fixes: twelve rows shown out of eighteen
tied at 1.00.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: examples/detect-markdown.md
+14-12Lines changed: 14 additions & 12 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,20 +2,22 @@
2
2
3
3
12 candidate(s), ranked by moddability. No LLM was used — this is the static ranking only.
4
4
5
+
**18 candidates score exactly 1.00, and this list shows 12 of them.** The 6 left out are not ranked lower — ties are broken by module name, so the cut through this band is alphabetical, not evidence-based. Widen `--limit` to see the whole band.
6
+
5
7
| # | Extension point | Category | Score | Why |
6
8
|---|---|---|---|---|
7
-
| 1 |`markdown.extensions.abbr:AbbrExtension`| subclass | 1.00 | public class; name ends in 'Extension' — role type; subclasses a 'Extension' role type |
8
-
| 2 |`markdown.extensions.admonition:AdmonitionExtension`| subclass | 1.00 | public class; name ends in 'Extension' — role type; subclasses a 'Extension' role type |
9
-
| 3 |`markdown.extensions.attr_list:AttrListExtension`| subclass | 1.00 | public class; name ends in 'Extension' — role type; subclasses a 'Extension' role type |
10
-
| 4 |`markdown.extensions.codehilite:CodeHiliteExtension`| subclass | 1.00 | public class; name ends in 'Extension' — role type; subclasses a 'Extension' role type |
11
-
| 5 |`markdown.extensions.def_list:DefListExtension`| subclass | 1.00 | public class; name ends in 'Extension' — role type; subclasses a 'Extension' role type |
12
-
| 6 |`markdown.extensions.extra:ExtraExtension`| subclass | 1.00 | public class; name ends in 'Extension' — role type; subclasses a 'Extension' role type |
13
-
| 7 |`markdown.extensions.fenced_code:FencedCodeExtension`| subclass | 1.00 | public class; name ends in 'Extension' — role type; subclasses a 'Extension' role type |
14
-
| 8 |`markdown.extensions.footnotes:FootnoteExtension`| subclass | 1.00 | public class; name ends in 'Extension' — role type; subclasses a 'Extension' role type |
15
-
| 9 |`markdown.extensions.legacy_attrs:LegacyAttrExtension`| subclass | 1.00 | public class; name ends in 'Extension' — role type; subclasses a 'Extension' role type |
16
-
| 10 |`markdown.extensions.legacy_em:LegacyEmExtension`| subclass | 1.00 | public class; name ends in 'Extension' — role type; subclasses a 'Extension' role type |
17
-
| 11 |`markdown.extensions.md_in_html:MarkdownInHtmlExtension`| subclass | 1.00 | public class; name ends in 'Extension' — role type; subclasses a 'Extension' role type |
18
-
| 12 |`markdown.extensions.meta:MetaExtension`| subclass | 1.00 | public class; name ends in 'Extension' — role type; subclasses a 'Extension' role type |
9
+
| 1 |`markdown.extensions.abbr:AbbrExtension`| subclass | 1.00 |[MS-MOD-PUBLIC]public class; [MS-MOD-CLASSROLE]name ends in 'Extension' — role type;[MS-MOD-BASEROLE] subclasses a 'Extension' role type |
10
+
| 2 |`markdown.extensions.admonition:AdmonitionExtension`| subclass | 1.00 |[MS-MOD-PUBLIC]public class; [MS-MOD-CLASSROLE]name ends in 'Extension' — role type;[MS-MOD-BASEROLE] subclasses a 'Extension' role type |
11
+
| 3 |`markdown.extensions.attr_list:AttrListExtension`| subclass | 1.00 |[MS-MOD-PUBLIC]public class; [MS-MOD-CLASSROLE]name ends in 'Extension' — role type;[MS-MOD-BASEROLE] subclasses a 'Extension' role type |
12
+
| 4 |`markdown.extensions.codehilite:CodeHiliteExtension`| subclass | 1.00 |[MS-MOD-PUBLIC]public class; [MS-MOD-CLASSROLE]name ends in 'Extension' — role type;[MS-MOD-BASEROLE] subclasses a 'Extension' role type |
13
+
| 5 |`markdown.extensions.def_list:DefListExtension`| subclass | 1.00 |[MS-MOD-PUBLIC]public class; [MS-MOD-CLASSROLE]name ends in 'Extension' — role type;[MS-MOD-BASEROLE] subclasses a 'Extension' role type |
14
+
| 6 |`markdown.extensions.extra:ExtraExtension`| subclass | 1.00 |[MS-MOD-PUBLIC]public class; [MS-MOD-CLASSROLE]name ends in 'Extension' — role type;[MS-MOD-BASEROLE] subclasses a 'Extension' role type |
15
+
| 7 |`markdown.extensions.fenced_code:FencedCodeExtension`| subclass | 1.00 |[MS-MOD-PUBLIC]public class; [MS-MOD-CLASSROLE]name ends in 'Extension' — role type;[MS-MOD-BASEROLE] subclasses a 'Extension' role type |
16
+
| 8 |`markdown.extensions.footnotes:FootnoteExtension`| subclass | 1.00 |[MS-MOD-PUBLIC]public class; [MS-MOD-CLASSROLE]name ends in 'Extension' — role type;[MS-MOD-BASEROLE] subclasses a 'Extension' role type |
17
+
| 9 |`markdown.extensions.legacy_attrs:LegacyAttrExtension`| subclass | 1.00 |[MS-MOD-PUBLIC]public class; [MS-MOD-CLASSROLE]name ends in 'Extension' — role type;[MS-MOD-BASEROLE] subclasses a 'Extension' role type |
18
+
| 10 |`markdown.extensions.legacy_em:LegacyEmExtension`| subclass | 1.00 |[MS-MOD-PUBLIC]public class; [MS-MOD-CLASSROLE]name ends in 'Extension' — role type;[MS-MOD-BASEROLE] subclasses a 'Extension' role type |
19
+
| 11 |`markdown.extensions.md_in_html:MarkdownInHtmlExtension`| subclass | 1.00 |[MS-MOD-PUBLIC]public class; [MS-MOD-CLASSROLE]name ends in 'Extension' — role type;[MS-MOD-BASEROLE] subclasses a 'Extension' role type |
20
+
| 12 |`markdown.extensions.meta:MetaExtension`| subclass | 1.00 |[MS-MOD-PUBLIC]public class; [MS-MOD-CLASSROLE]name ends in 'Extension' — role type;[MS-MOD-BASEROLE] subclasses a 'Extension' role type |
0 commit comments