paperlint 9.0.1 โ 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +68 -128
- package/dist/build.d.ts +1 -1
- package/dist/build.js +1 -1
- package/dist/cli.d.ts +5 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +52 -6
- package/dist/cli.js.map +1 -1
- package/dist/domain/layout-tree.d.ts +19 -0
- package/dist/domain/layout-tree.d.ts.map +1 -0
- package/dist/domain/layout-tree.js +32 -0
- package/dist/domain/layout-tree.js.map +1 -0
- package/dist/domain/lookup-cache.d.ts +2 -2
- package/dist/domain/lookup-cache.js +2 -2
- package/dist/domain/paper-layout.d.ts +81 -0
- package/dist/domain/paper-layout.d.ts.map +1 -0
- package/dist/domain/paper-layout.js +259 -0
- package/dist/domain/paper-layout.js.map +1 -0
- package/dist/domain/repro-layout.d.ts +80 -0
- package/dist/domain/repro-layout.d.ts.map +1 -0
- package/dist/domain/repro-layout.js +247 -0
- package/dist/domain/repro-layout.js.map +1 -0
- package/dist/domain/scaffold-layout.d.ts +28 -0
- package/dist/domain/scaffold-layout.d.ts.map +1 -0
- package/dist/domain/scaffold-layout.js +81 -0
- package/dist/domain/scaffold-layout.js.map +1 -0
- package/dist/eslint-rules/prereg-coverage.d.ts +98 -0
- package/dist/eslint-rules/prereg-coverage.d.ts.map +1 -0
- package/dist/eslint-rules/prereg-coverage.js +274 -0
- package/dist/eslint-rules/prereg-coverage.js.map +1 -0
- package/dist/folder-layout-hook.d.ts +21 -0
- package/dist/folder-layout-hook.d.ts.map +1 -0
- package/dist/folder-layout-hook.js +117 -0
- package/dist/folder-layout-hook.js.map +1 -0
- package/dist/folder-layout-rule.d.ts +22 -0
- package/dist/folder-layout-rule.d.ts.map +1 -0
- package/dist/folder-layout-rule.js +107 -0
- package/dist/folder-layout-rule.js.map +1 -0
- package/dist/init.js +1 -1
- package/dist/init.js.map +1 -1
- package/dist/new-paper.d.ts +4 -1
- package/dist/new-paper.d.ts.map +1 -1
- package/dist/new-paper.js +40 -6
- package/dist/new-paper.js.map +1 -1
- package/dist/references.d.ts +1 -1
- package/dist/references.d.ts.map +1 -1
- package/dist/references.js +2 -2
- package/dist/references.js.map +1 -1
- package/dist/repro-layout-rule.d.ts +16 -0
- package/dist/repro-layout-rule.d.ts.map +1 -0
- package/dist/repro-layout-rule.js +81 -0
- package/dist/repro-layout-rule.js.map +1 -0
- package/docs/ci.md +60 -0
- package/docs/configuration.md +2 -0
- package/docs/e2e.md +2 -2
- package/docs/install.md +20 -16
- package/docs/layout.md +154 -0
- package/docs/optional-rules.md +5 -4
- package/docs/references.md +5 -2
- package/docs/rules/paper/allowed-files-only.md +192 -0
- package/docs/rules/repro/allowed-files-only.md +128 -0
- package/docs/rules/study/declare-sample.md +146 -0
- package/docs/rules.md +53 -50
- package/docs/skills.md +6 -3
- package/docs/venues.md +94 -0
- package/eslint-rules/prereg-coverage.test.ts +448 -0
- package/eslint-rules/prereg-coverage.ts +419 -0
- package/lib/skill-trigger-cases.harness.mjs +51 -5
- package/lib/skill-trigger-cases.mjs +53 -15
- package/package.json +1 -1
- package/plugin/hooks/hooks.json +9 -0
- package/skills/analyze-sibling-paper/SKILL.md +2 -2
- package/skills/analyze-sibling-paper/SKILL.md.spec.ts +1 -1
- package/skills/build-benchmark/SKILL.md +14 -1
- package/skills/build-benchmark/SKILL.md.spec.ts +13 -0
- package/skills/build-label-page/SKILL.md +118 -0
- package/skills/build-label-page/SKILL.md.spec.ts +129 -0
- package/skills/build-label-page/build-label-page.eval.mjs +15 -0
- package/skills/build-label-page/build-label-page.test.ts +959 -0
- package/skills/build-label-page/references/checklist.md +148 -0
- package/skills/build-label-page/references/example-generator.py +803 -0
- package/skills/find-venue/SKILL.md +5 -3
- package/skills/find-venue/SKILL.md.spec.ts +4 -2
- package/skills/grade-paper-writing/SKILL.md +7 -7
- package/skills/grade-paper-writing/SKILL.md.spec.ts +6 -6
- package/skills/map-prior-work/SKILL.md +2 -2
- package/skills/map-prior-work/SKILL.md.spec.ts +1 -1
- package/skills/paper-pipeline/SKILL.md +8 -6
- package/skills/paper-pipeline/SKILL.md.spec.ts +7 -5
- package/skills/paper-pipeline/grade-paper-writing-ablation.eval.mjs +19 -9
- package/skills/paper-pipeline/references/acceptance-gate.md +19 -19
- package/skills/paper-pipeline/references/artifact-checklist.md +5 -0
- package/skills/paper-pipeline/references/pipeline-status-template.md +30 -1
- package/skills/paper-pipeline/repro/2026-08-07-fork-check.log +1 -1
- package/skills/paper-pipeline/repro/2026-08-07-fork-check2.log +1 -1
- package/skills/paper-pipeline/repro/2026-08-07-language-eval-pilot.log +1 -1
- package/skills/paper-pipeline/repro/2026-08-07-language-eval-raw.log +1 -1
- package/skills/paper-pipeline/repro/2026-08-08-framing-vs-vocabulary-oracle.log +48 -48
- package/skills/paper-pipeline/repro/2026-08-08-grade-paper-writing-ablation-A6-oracle.log +8 -8
- package/skills/paper-pipeline/repro/2026-08-08-grade-paper-writing-ablation-oracle.log +48 -48
- package/skills/paper-pipeline/repro/2026-08-08-parent-replication-gpw.log +2 -2
- package/skills/paper-pipeline/repro/2026-08-08-parent-replication.mjs +3 -3
- package/skills/paper-pipeline/repro/2026-10-13-grade-paper-writing-ablation-preflight-after.log +81 -0
- package/skills/paper-pipeline/repro/2026-10-13-grade-paper-writing-ablation-preflight-before.log +81 -0
- package/skills/paper-pipeline/repro/2026-10-13-grade-paper-writing-ablation-setupdiff.log +59 -0
- package/skills/paper-pipeline/repro/2026-10-13-grade-paper-writing-trigger.jsonl +1 -0
- package/skills/paper-pipeline/repro/2026-10-13-grade-paper-writing-trigger.log +22 -0
- package/skills/paper-pipeline/repro/README.md +4 -0
- package/skills/paper-pipeline/scripts/extract-ref-facts.harness.mjs +2 -2
- package/skills/paper-pipeline/scripts/extract-ref-facts.mjs +2 -2
- package/skills/paper-pipeline/scripts/extract-ref-facts.test.mjs +4 -2
- package/skills/paper-pipeline/scripts/generated-code.harness.mjs +7 -2
- package/skills/paper-pipeline/scripts/generated-code.mjs +8 -4
- package/skills/paper-pipeline/scripts/generated-code.test.ts +15 -1
- package/skills/paper-status/SKILL.md +2 -2
- package/skills/paper-status/SKILL.md.spec.ts +1 -1
- package/skills/study-accepted-papers/SKILL.md +163 -161
- package/skills/study-accepted-papers/SKILL.md.spec.ts +167 -165
- package/skills/study-accepted-papers/references/base-rates.md +69 -0
- package/skills/study-accepted-papers/references/mechanisms.md +181 -0
- package/skills/verify-citations/SKILL.md +2 -2
- package/skills/verify-citations/SKILL.md.spec.ts +1 -1
- package/src/build.ts +1 -1
- package/src/cli.harness.mjs +42 -0
- package/src/cli.test.ts +90 -6
- package/src/cli.ts +78 -5
- package/src/domain/layout-tree.test.ts +32 -0
- package/src/domain/layout-tree.ts +47 -0
- package/src/domain/lookup-cache.ts +2 -2
- package/src/domain/paper-layout.test.ts +264 -0
- package/src/domain/paper-layout.ts +336 -0
- package/src/domain/repro-layout.test.ts +222 -0
- package/src/domain/repro-layout.ts +311 -0
- package/src/domain/scaffold-layout.ts +104 -0
- package/src/folder-layout-hook.test.ts +214 -0
- package/src/folder-layout-hook.ts +141 -0
- package/src/folder-layout-rule.test.ts +235 -0
- package/src/folder-layout-rule.ts +151 -0
- package/src/hooks-settings.harness.ts +9 -8
- package/src/init.ts +1 -1
- package/src/layout-docs.test.ts +52 -0
- package/src/new-paper.harness.mjs +23 -1
- package/src/new-paper.test.ts +299 -6
- package/src/new-paper.ts +51 -5
- package/src/paper-files.test.ts +9 -6
- package/src/references.test.ts +5 -5
- package/src/references.ts +2 -2
- package/src/repro-layout-rule.test.ts +114 -0
- package/src/repro-layout-rule.ts +121 -0
- package/src/rule-cases.test.ts +98 -0
- package/templates/paper/PIPELINE-STATUS.md +41 -7
package/skills/paper-pipeline/repro/2026-10-13-grade-paper-writing-ablation-preflight-before.log
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
|
|
2
|
+
26 skills installed โ 25 competitors per run
|
|
3
|
+
|
|
4
|
+
ARMS โ description length, word-set delta vs A0, mean prompt overlap
|
|
5
|
+
arm label chars words โ + ovAH ovSH
|
|
6
|
+
A0 baseline (verbatim) 1371 103 0 0 0.85 0.78
|
|
7
|
+
A1 short (sentences 1-2 only) 618 51 52 0 0.71 0.78
|
|
8
|
+
A2 no-subordination 1189 94 9 0 0.85 0.78
|
|
9
|
+
A3 no-negation 1141 92 11 0 0.85 0.78
|
|
10
|
+
A4 no-machinery 670 45 58 0 0.44 0.35
|
|
11
|
+
A5 renamed (description identical) 1371 103 0 0 0.85 0.78
|
|
12
|
+
A6 persona-only (A1's mirror) 298 28 75 0 0.23 0.42
|
|
13
|
+
|
|
14
|
+
โ ovAH/ovSH FALL AS TEXT IS DELETED โ caveat 2 in the header, quantified. The deletion arms carry
|
|
15
|
+
a vocabulary handicap against the parent's dominant factor. A rising deletion arm rose DESPITE it;
|
|
16
|
+
a flat one may be a real gain cancelled by it, and this design cannot tell. A5 is the only arm
|
|
17
|
+
with zero handicap (identical word set).
|
|
18
|
+
|
|
19
|
+
WORD-SET DELTAS (stemmed content words removed from A0 โ none may be added)
|
|
20
|
+
|
|
21
|
+
A0 baseline (verbatim)
|
|
22
|
+
removed (0): โ
|
|
23
|
+
added (0): โ
|
|
24
|
+
|
|
25
|
+
A1 short (sentences 1-2 only)
|
|
26
|
+
removed (52): run cold stall pas committ persona non academic engineer per section workshop reviewer skimm introduction conclusion inventory rubric number readability gate skill consume panel review adversarial harden default blind multi grader mandate claim preservation diff row content defect structural cut plan tighten first bloat strength reward study compose call generative counterpart render
|
|
27
|
+
added (0): โ
|
|
28
|
+
|
|
29
|
+
A2 no-subordination
|
|
30
|
+
removed (9): inventory rubric number readability gate skill consume harden call
|
|
31
|
+
added (0): โ
|
|
32
|
+
|
|
33
|
+
A3 no-negation
|
|
34
|
+
removed (11): content defect structural cut plan tighten first bloat strength reward study
|
|
35
|
+
added (0): โ
|
|
36
|
+
|
|
37
|
+
A4 no-machinery
|
|
38
|
+
removed (58): title abstract intro architecture structure prose clarity discipline land point figure economy honesty without hedge stack register distance peyton jone mcenerney gopen swan exemplar trust carlini greshake cold stall pas committ persona non academic engineer per section workshop reviewer skimm introduction conclusion inventory rubric number readability gate skill consume default blind multi grader mandate claim preservation diff row
|
|
39
|
+
added (0): โ
|
|
40
|
+
|
|
41
|
+
A5 renamed (description identical)
|
|
42
|
+
removed (0): โ
|
|
43
|
+
added (0): โ
|
|
44
|
+
|
|
45
|
+
A6 persona-only (A1's mirror)
|
|
46
|
+
removed (75): grade craft ten dimension title intro architecture structure prose clarity discipline land point figure economy honesty without hedge stack register distance target venue best written peyton jone mcenerney gopen swan exemplar trust carlini greshake accept nam offend sentence fix inventory rubric number readability gate skill consume panel review adversarial harden default blind multi grader mandate claim preservation diff row content defect structural cut plan tighten first bloat strength reward study compose call generative counterpart render
|
|
47
|
+
added (0): โ
|
|
48
|
+
|
|
49
|
+
RESULTING DESCRIPTIONS
|
|
50
|
+
|
|
51
|
+
โโ A0 (grade-paper-writing, 1371 chars)
|
|
52
|
+
Use when asking "does this paper read well?" / "is the writing any good?" / "it reads like a wall of text and jargon" / "grade the writing" on a draft. Grades WRITING CRAFT only โ ten dimensions 1โ5 (Title, Abstract, Intro architecture, Structure, Prose clarity, Jargon discipline, Landing-the-point, Figure economy, Honesty-without-hedge-stacking, Register distance to the target venue) against how the best-written papers read (Peyton Jones, McEnerney, Gopen & Swan; exemplars Trusting Trust, Carlini, Greshake) AND against 2โ3 accepted papers of the target venue, naming the offending sentence and the fix for each. Runs the cold-read stall pass with TWO committed personas (a non-academic engineer per section, and a workshop reviewer skimming abstract, introduction and conclusion) whose stall inventory โ not the rubric number โ is the readability gate other skills consume (pc-panel-review, paper-adversarial-review, harden-paper). Defaults to a blind multi-grader panel; after fixes, mandates the claims-preservation diff (row `claims`). NOT a content/defect review (paper-adversarial-review / pc-panel-review), NOT a structural cut plan (tighten-paper โ run that first on a bloated draft), NOT content strength against what the venue rewards (study-accepted-papers). Compose with harden-paper (which calls it), draft-paper (generative counterpart), render-paper.
|
|
53
|
+
|
|
54
|
+
โโ A1 (grade-paper-writing, 618 chars)
|
|
55
|
+
Use when asking "does this paper read well?" / "is the writing any good?" / "it reads like a wall of text and jargon" / "grade the writing" on a draft. Grades WRITING CRAFT only โ ten dimensions 1โ5 (Title, Abstract, Intro architecture, Structure, Prose clarity, Jargon discipline, Landing-the-point, Figure economy, Honesty-without-hedge-stacking, Register distance to the target venue) against how the best-written papers read (Peyton Jones, McEnerney, Gopen & Swan; exemplars Trusting Trust, Carlini, Greshake) AND against 2โ3 accepted papers of the target venue, naming the offending sentence and the fix for each.
|
|
56
|
+
|
|
57
|
+
โโ A2 (grade-paper-writing, 1189 chars)
|
|
58
|
+
Use when asking "does this paper read well?" / "is the writing any good?" / "it reads like a wall of text and jargon" / "grade the writing" on a draft. Grades WRITING CRAFT only โ ten dimensions 1โ5 (Title, Abstract, Intro architecture, Structure, Prose clarity, Jargon discipline, Landing-the-point, Figure economy, Honesty-without-hedge-stacking, Register distance to the target venue) against how the best-written papers read (Peyton Jones, McEnerney, Gopen & Swan; exemplars Trusting Trust, Carlini, Greshake) AND against 2โ3 accepted papers of the target venue, naming the offending sentence and the fix for each. Runs the cold-read stall pass with TWO committed personas (a non-academic engineer per section, and a workshop reviewer skimming abstract, introduction and conclusion). Defaults to a blind multi-grader panel; after fixes, mandates the claims-preservation diff (row `claims`). NOT a content/defect review (paper-adversarial-review / pc-panel-review), NOT a structural cut plan (tighten-paper โ run that first on a bloated draft), NOT content strength against what the venue rewards (study-accepted-papers). Compose with draft-paper (generative counterpart), render-paper.
|
|
59
|
+
|
|
60
|
+
โโ A3 (grade-paper-writing, 1141 chars)
|
|
61
|
+
Use when asking "does this paper read well?" / "is the writing any good?" / "it reads like a wall of text and jargon" / "grade the writing" on a draft. Grades WRITING CRAFT only โ ten dimensions 1โ5 (Title, Abstract, Intro architecture, Structure, Prose clarity, Jargon discipline, Landing-the-point, Figure economy, Honesty-without-hedge-stacking, Register distance to the target venue) against how the best-written papers read (Peyton Jones, McEnerney, Gopen & Swan; exemplars Trusting Trust, Carlini, Greshake) AND against 2โ3 accepted papers of the target venue, naming the offending sentence and the fix for each. Runs the cold-read stall pass with TWO committed personas (a non-academic engineer per section, and a workshop reviewer skimming abstract, introduction and conclusion) whose stall inventory โ not the rubric number โ is the readability gate other skills consume (pc-panel-review, paper-adversarial-review, harden-paper). Defaults to a blind multi-grader panel; after fixes, mandates the claims-preservation diff (row `claims`). Compose with harden-paper (which calls it), draft-paper (generative counterpart), render-paper.
|
|
62
|
+
|
|
63
|
+
โโ A4 (grade-paper-writing, 670 chars)
|
|
64
|
+
Use when asking "does this paper read well?" / "is the writing any good?" / "it reads like a wall of text and jargon" / "grade the writing" on a draft. Grades WRITING CRAFT only โ ten dimensions 1โ5 against how the best-written papers read AND against 2โ3 accepted papers of the target venue, naming the offending sentence and the fix for each. NOT a content/defect review (paper-adversarial-review / pc-panel-review), NOT a structural cut plan (tighten-paper โ run that first on a bloated draft), NOT content strength against what the venue rewards (study-accepted-papers). Compose with harden-paper (which calls it), draft-paper (generative counterpart), render-paper.
|
|
65
|
+
|
|
66
|
+
โโ A5 (paper-readability-review, 1371 chars)
|
|
67
|
+
Use when asking "does this paper read well?" / "is the writing any good?" / "it reads like a wall of text and jargon" / "grade the writing" on a draft. Grades WRITING CRAFT only โ ten dimensions 1โ5 (Title, Abstract, Intro architecture, Structure, Prose clarity, Jargon discipline, Landing-the-point, Figure economy, Honesty-without-hedge-stacking, Register distance to the target venue) against how the best-written papers read (Peyton Jones, McEnerney, Gopen & Swan; exemplars Trusting Trust, Carlini, Greshake) AND against 2โ3 accepted papers of the target venue, naming the offending sentence and the fix for each. Runs the cold-read stall pass with TWO committed personas (a non-academic engineer per section, and a workshop reviewer skimming abstract, introduction and conclusion) whose stall inventory โ not the rubric number โ is the readability gate other skills consume (pc-panel-review, paper-adversarial-review, harden-paper). Defaults to a blind multi-grader panel; after fixes, mandates the claims-preservation diff (row `claims`). NOT a content/defect review (paper-adversarial-review / pc-panel-review), NOT a structural cut plan (tighten-paper โ run that first on a bloated draft), NOT content strength against what the venue rewards (study-accepted-papers). Compose with harden-paper (which calls it), draft-paper (generative counterpart), render-paper.
|
|
68
|
+
|
|
69
|
+
โโ A6 (grade-paper-writing, 298 chars)
|
|
70
|
+
Use when asking "does this paper read well?" / "is the writing any good?" / "it reads like a wall of text and jargon" on a draft. Runs the cold-read stall pass with TWO committed personas (a non-academic engineer per section, and a workshop reviewer skimming abstract, introduction and conclusion).
|
|
71
|
+
|
|
72
|
+
building each arm's skills dir under <scratch>/gpw-ablation (no real file is written) โฆ
|
|
73
|
+
A0 โ <scratch>/gpw-ablation/arm-A0
|
|
74
|
+
A1 โ <scratch>/gpw-ablation/arm-A1
|
|
75
|
+
A2 โ <scratch>/gpw-ablation/arm-A2
|
|
76
|
+
A3 โ <scratch>/gpw-ablation/arm-A3
|
|
77
|
+
A4 โ <scratch>/gpw-ablation/arm-A4
|
|
78
|
+
A5 โ <scratch>/gpw-ablation/arm-A5
|
|
79
|
+
A6 โ <scratch>/gpw-ablation/arm-A6
|
|
80
|
+
|
|
81
|
+
ALL PREFLIGHT GUARDS PASSED. No tokens spent. Run --mode main next.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
|
|
2
|
+
26 skills installed โ 25 competitors per run
|
|
3
|
+
|
|
4
|
+
ARMS โ description length, word-set delta vs A0, mean prompt overlap
|
|
5
|
+
arm label chars words โ + ovAH ovSH
|
|
6
|
+
A0 baseline (verbatim) 1371 103 0 0 0.85 0.78
|
|
7
|
+
A1 short (sentences 1-2 only) 618 51 52 0 0.71 0.78
|
|
8
|
+
A2 no-subordination 1189 94 9 0 0.85 0.78
|
|
9
|
+
A3 no-negation 1141 92 11 0 0.85 0.78
|
|
10
|
+
A4 no-machinery 670 45 58 0 0.44 0.35
|
|
11
|
+
A5 renamed (description identical) 1371 103 0 0 0.85 0.78
|
|
12
|
+
A6 persona-only (A1's mirror) 298 28 75 0 0.23 0.42
|
|
13
|
+
|
|
14
|
+
โ ovAH/ovSH FALL AS TEXT IS DELETED โ caveat 2 in the header, quantified. The deletion arms carry
|
|
15
|
+
a vocabulary handicap against the parent's dominant factor. A rising deletion arm rose DESPITE it;
|
|
16
|
+
a flat one may be a real gain cancelled by it, and this design cannot tell. A5 is the only arm
|
|
17
|
+
with zero handicap (identical word set).
|
|
18
|
+
|
|
19
|
+
HARNESS OPTIONS โ this file vs the parent (extracted from both sources)
|
|
20
|
+
option ablation parent
|
|
21
|
+
allowedTools ["Skill" ["Skill"
|
|
22
|
+
trials TRIALS TRIALS
|
|
23
|
+
concurrency 3 3
|
|
24
|
+
spacingSec 2 2
|
|
25
|
+
timeoutMs 180000 180000
|
|
26
|
+
minPrompts 4 4
|
|
27
|
+
fixture /.exec(src)?.[0] ?? "" FIXTURE
|
|
28
|
+
skillsDir dir SKILLS_DIR
|
|
29
|
+
|
|
30
|
+
fixture sha256/16 ablation 89d1b720c4cedde6
|
|
31
|
+
FIXTURE source block identical to the parent's: YES
|
|
32
|
+
fired predicate identical (modulo the id it matches): YES
|
|
33
|
+
firedSkills() helper identical: YES
|
|
34
|
+
|
|
35
|
+
ARM DIR INTEGRITY โ sha256/16 of each SKILL.md frontmatter vs the real .claude/skills
|
|
36
|
+
A0 26 skills ยท unintended frontmatter diffs: none
|
|
37
|
+
A1 26 skills ยท unintended frontmatter diffs: none
|
|
38
|
+
A2 26 skills ยท unintended frontmatter diffs: none
|
|
39
|
+
A3 26 skills ยท unintended frontmatter diffs: none
|
|
40
|
+
A4 26 skills ยท unintended frontmatter diffs: none
|
|
41
|
+
A5 26 skills ยท unintended frontmatter diffs: none
|
|
42
|
+
A6 26 skills ยท unintended frontmatter diffs: none
|
|
43
|
+
|
|
44
|
+
ROW BY ROW โ parent (8 prompts) vs this file's A0 (8 prompts)
|
|
45
|
+
cell parent A0 ฮ prompt
|
|
46
|
+
AH 0/3 1/3 +1 grade the writing craft in this draft and name the off
|
|
47
|
+
AH 3/3 3/3 0 run the blind multi-grader panel over the prose clarit
|
|
48
|
+
AH 0/3 3/3 +3 score the title, the abstract and the intro architectu
|
|
49
|
+
AH 0/3 0/3 0 grade how well this reads, hedge stacking included, an
|
|
50
|
+
SH 0/3 0/3 0 the abstract reads like a wall of jargon
|
|
51
|
+
SH 0/3 2/3 +2 the intro architecture is fine but the prose clarity i
|
|
52
|
+
SH 0/3 2/3 +2 there is hedge stacking everywhere and the point never
|
|
53
|
+
SH 2/3 2/3 0 the writing does not read well even though the draft i
|
|
54
|
+
5/24 13/24 +8 TOTAL
|
|
55
|
+
|
|
56
|
+
3 of 8 prompts moved by โฅ2 of 3 trials. Spread across many prompts โ a global shift
|
|
57
|
+
(session, load, model routing). Concentrated in one or two โ something prompt-specific.
|
|
58
|
+
|
|
59
|
+
SETUPDIFF COMPLETE. No tokens spent.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"skill":"grade-paper-writing","model":"sonnet","trials":1,"rate":0.875,"falsePositiveRate":0,"precision":1,"competitors":25,"perPrompt":[{"prompt":"ะพัะตะฝะธ ะบะฐะบ ะฝะฐะฟะธัะฐะฝะพ โ ัะธัะฐะตััั ะบะฐะบ ััะตะฝะฐ ะถะฐัะณะพะฝะฐ","rate":1},{"prompt":"is the writing any good or does it read like shit","rate":1},{"prompt":"abstract ะทะฒััะธั ะบัะธะฒะพ ั
ะพัั ะฟะพ ัะผััะปั ะฒัั ะฝะฐ ะผะตััะต, ะดะฐะน ะพัะตะฝะบั ะฟัะพะทะต","rate":1},{"prompt":"grade the craft: title, abstract, sentence clarity, hedge stacking","rate":1},{"prompt":"ะฟัะพัะธัะฐะน ัะตัะฝะพะฒะธะบ ะธ ัะบะฐะถะธ ัะตััะฝะพ, ะฝะพัะผะฐะปัะฝะพ ะปะธ ะพะฝ ัะธัะฐะตััั","rate":0},{"prompt":"the reviewer says our paper reads like a blog post โ is he right about the prose","rate":1},{"prompt":"ะบะฐะถะดะพะต ะฟัะตะดะปะพะถะตะฝะธะต ะฟะพ ะพัะดะตะปัะฝะพััะธ ะฟะพะฝััะฝะพ, ะฐ ะฐะฑะทะฐัั ะฒัั ัะฐะฒะฝะพ ัะปะธะฒะฐัััั ะฒ ัะฟะปะพัะฝัั ะฟัะพัััะฝั","rate":1},{"prompt":"grade the prose in section 3 and give me the sentences to rewrite","rate":1}]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Spent: 1,807,963 tokens (88 in ยท 12.6k out ยท 1562.4k cache) ยท ~$1.30 API-equivalent
|
|
2
|
+
Billed to: your Claude subscription โ $0 metered โ
|
|
3
|
+
|
|
4
|
+
grade-paper-writing โ prose craft โ the sentence is the unit, NOT the section [model: sonnet]
|
|
5
|
+
trigger-rate: 88% (8 runs)
|
|
6
|
+
1.00 ะพัะตะฝะธ ะบะฐะบ ะฝะฐะฟะธัะฐะฝะพ โ ัะธัะฐะตััั ะบะฐะบ ััะตะฝะฐ ะถะฐัะณะพะฝะฐ
|
|
7
|
+
1.00 is the writing any good or does it read like shit
|
|
8
|
+
1.00 abstract ะทะฒััะธั ะบัะธะฒะพ ั
ะพัั ะฟะพ ัะผััะปั ะฒัั ะฝะฐ ะผะตััะต, ะดะฐะน ะพัะตะฝะบ
|
|
9
|
+
1.00 grade the craft: title, abstract, sentence clarity, hedge st
|
|
10
|
+
0.00 ะฟัะพัะธัะฐะน ัะตัะฝะพะฒะธะบ ะธ ัะบะฐะถะธ ัะตััะฝะพ, ะฝะพัะผะฐะปัะฝะพ ะปะธ ะพะฝ ัะธัะฐะตััั
|
|
11
|
+
1.00 the reviewer says our paper reads like a blog post โ is he r
|
|
12
|
+
1.00 ะบะฐะถะดะพะต ะฟัะตะดะปะพะถะตะฝะธะต ะฟะพ ะพัะดะตะปัะฝะพััะธ ะฟะพะฝััะฝะพ, ะฐ ะฐะฑะทะฐัั ะฒัั ัะฐะฒะฝ
|
|
13
|
+
1.00 grade the prose in section 3 and give me the sentences to re
|
|
14
|
+
false-positive: 0% precision: 100%
|
|
15
|
+
0.00 [irrelevant] ััะฐััั ัะฐะทะดัะปะฐัั, ัะตัะตะดะธะฝะฐ ะฟัะพะฒะธัะฐะตั โ ััะพ ัะตะทะฐั
|
|
16
|
+
0.00 [irrelevant] does the paper actually carry a reader to one co
|
|
17
|
+
0.00 [irrelevant] ะฟะพะฟัะฐะฒะธะป ัะพัะผัะปะธัะพะฒะบะธ ะฒ 4.2, ะฟัะพะณะพะฝะธ ัะฒะตะถะธะผ ัะธัะฐ
|
|
18
|
+
0.00 [irrelevant] what is our desk reject risk and where do we ove
|
|
19
|
+
0.00 [irrelevant] ะบะฐะบะฐั ะฒะตัะพััะฝะพััั ะฟัะธะฝััะธั ั ััะพะน ััะฐััะธ, ะตัะปะธ ั
|
|
20
|
+
0.00 [irrelevant] ััะฐััั ะณะพัะพะฒะฐ ะบ ัะฐะฑะผะธัั ะธะปะธ ะฝะตั
|
|
21
|
+
0.00 [irrelevant] ะฟะพัะผะพััะธ ััะพ ะฟัะธะฝะธะผะฐะปะธ ะฝะฐ ััะพะน ะฟะปะพัะฐะดะบะต ะธ ัะตะผ ัะต
|
|
22
|
+
whole-harness: measured against 25 competing skill(s)
|
|
@@ -25,6 +25,10 @@ the session.
|
|
|
25
25
|
| `2026-08-08-parent-replication.mjs` | the replication driver | Runs `framing-vs-vocabulary.eval.mjs` **itself** with two asserted patches (main loop โ this skill + AH/SH; output path), everything else untouched, against the real `.claude/skills`. Written because the ablation's control contradicted the parent. |
|
|
26
26
|
| `2026-08-08-parent-replication-gpw.log` | that driver's run | ๐ด **The parent's own code returns AH 9/12 + SH 3/12 = 12/24 (50%)** hours after the same code returned 3/12 + 2/12 = 5/24 (21%). |
|
|
27
27
|
| `2026-08-08-parent-replication-gpw.json` | per-run rows for the above | The parent's own row schema, so it diffs directly against `2026-08-08-framing-vs-vocabulary.json`. |
|
|
28
|
+
| `2026-10-13-grade-paper-writing-trigger.log` | `grade-paper-writing/grade-paper-writing.eval.mjs`, the rewritten 499-char description (ledger `description_sha` dc41f0994474b368) | 1 trial, sonnet, 25 competing skills. Recall **7/8 (88%)**: the four measured prompts 4/4, the four new ones 3/4 (missed: ยซะฟัะพัะธัะฐะน ัะตัะฝะพะฒะธะบ ะธ ัะบะฐะถะธ ัะตััะฝะพ, ะฝะพัะผะฐะปัะฝะพ ะปะธ ะพะฝ ัะธัะฐะตัััยป). False positives **0/7**, one prompt from each collider. One trial is a smoke run, not a rate. |
|
|
29
|
+
| `2026-10-13-grade-paper-writing-trigger.jsonl` | per-prompt rows for the above | The kit's `VIGILES_RESULTS` row: rate per should-fire prompt. |
|
|
30
|
+
| `2026-10-13-grade-paper-writing-ablation-preflight-before.log`, `โฆ-after.log` | `grade-paper-writing-ablation.eval.mjs --mode preflight`, **free**, before and after its A0 was pinned | Byte-identical: every arm builds from the same text after the live description was rewritten. Scratch paths replaced by `<scratch>`. |
|
|
31
|
+
| `2026-10-13-grade-paper-writing-ablation-setupdiff.log` | the same file's `--mode setupdiff`, **free**, after the pin | Passes; the parent-vs-A0 row-by-row is the recorded 2026-08-08 data, unchanged. |
|
|
28
32
|
|
|
29
33
|
## How to read these, and the trap in them
|
|
30
34
|
|
|
@@ -400,7 +400,7 @@ process.on("exit", () => rmSync(TMP, { recursive: true, force: true }));
|
|
|
400
400
|
{
|
|
401
401
|
const { spawnSync } = await import("node:child_process");
|
|
402
402
|
const dir = join(TMP, "e2e");
|
|
403
|
-
mkdirSync(join(dir, "repro"), { recursive: true });
|
|
403
|
+
mkdirSync(join(dir, "repro", "data"), { recursive: true });
|
|
404
404
|
const paper =
|
|
405
405
|
"@misc{lovelace2025,\n author={Lovelace, Ada and Hopper, Grace},\n title={A Study},\n" +
|
|
406
406
|
" note={arXiv:2503.09002},\n year={2025}}\n";
|
|
@@ -411,7 +411,7 @@ process.on("exit", () => rmSync(TMP, { recursive: true, force: true }));
|
|
|
411
411
|
);
|
|
412
412
|
built(dir);
|
|
413
413
|
writeFileSync(
|
|
414
|
-
join(dir, "repro", "refs-cache.json"),
|
|
414
|
+
join(dir, "repro", "data", "refs-cache.json"),
|
|
415
415
|
JSON.stringify({
|
|
416
416
|
"arxiv:2503.09002": {
|
|
417
417
|
httpStatus: 200,
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
* only one that returns a STRUCTURED name; with any other the surname would have to be cut out by
|
|
47
47
|
* hand, that is, we would be writing ourselves the very half that was broken.
|
|
48
48
|
*
|
|
49
|
-
* ๐ด THE CACHE IS EVIDENCE, NOT A SECOND DECLARATION. `<paper>/repro/refs-cache.json` keeps the RAW
|
|
49
|
+
* ๐ด THE CACHE IS EVIDENCE, NOT A SECOND DECLARATION. `<paper>/repro/data/refs-cache.json` keeps the RAW
|
|
50
50
|
* BODIES of the registries' responses and is committed (for `<paper-a>` it has been in git since
|
|
51
51
|
* 16.08). It cannot be made up โ only refreshed from the registry. The facts in `_build/` are
|
|
52
52
|
* derived from it and from the bibliography, which is why `_build/` is in `.gitignore` while the
|
|
@@ -450,7 +450,7 @@ async function main(argv) {
|
|
|
450
450
|
const { paperDir, texts } = found;
|
|
451
451
|
const cachePath = opt("cache")
|
|
452
452
|
? resolve(opt("cache"))
|
|
453
|
-
: join(paperDir, "repro", "refs-cache.json");
|
|
453
|
+
: join(paperDir, "repro", "data", "refs-cache.json");
|
|
454
454
|
const out = opt("out")
|
|
455
455
|
? resolve(opt("out"))
|
|
456
456
|
: join(paperDir, "_build", "refs.facts.json");
|
|
@@ -236,7 +236,9 @@ test("online: hits are fetched and cached, a transport failure is named and stay
|
|
|
236
236
|
stdout: r.stdout,
|
|
237
237
|
stderr: r.stderr,
|
|
238
238
|
cached: Object.keys(
|
|
239
|
-
JSON.parse(
|
|
239
|
+
JSON.parse(
|
|
240
|
+
readFileSync(join(root, "paper/repro/data/refs-cache.json")),
|
|
241
|
+
),
|
|
240
242
|
),
|
|
241
243
|
},
|
|
242
244
|
{
|
|
@@ -265,7 +267,7 @@ test("the paper file itself as the target, with --cache, --out and --offline", (
|
|
|
265
267
|
const r = cli([
|
|
266
268
|
join(root, "paper/refs.bib"),
|
|
267
269
|
"--offline",
|
|
268
|
-
`--cache=${join(root, "paper/repro/refs-cache.json")}`,
|
|
270
|
+
`--cache=${join(root, "paper/repro/data/refs-cache.json")}`,
|
|
269
271
|
`--out=${join(root, "out/facts.json")}`,
|
|
270
272
|
]);
|
|
271
273
|
assert.deepEqual(r, {
|
|
@@ -79,8 +79,13 @@ function fixture({ scripts = {}, allow = null, bundle = {}, at = "repro" }) {
|
|
|
79
79
|
mkdirSync(join(d, at, "artifact-anon", dirname(p)), { recursive: true });
|
|
80
80
|
writeFileSync(join(d, at, "artifact-anon", p), src);
|
|
81
81
|
}
|
|
82
|
-
if (allow !== null)
|
|
83
|
-
|
|
82
|
+
if (allow !== null) {
|
|
83
|
+
mkdirSync(join(d, at, "tools"), { recursive: true });
|
|
84
|
+
writeFileSync(
|
|
85
|
+
join(d, at, "tools", "generated-code-grandfathered.txt"),
|
|
86
|
+
allow,
|
|
87
|
+
);
|
|
88
|
+
}
|
|
84
89
|
return d;
|
|
85
90
|
}
|
|
86
91
|
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
* ๐ด AND THE SAME FALSE-POSITIVE DISCIPLINE AS THE REVERSE COVERAGE LEG. `repro/` is mostly not
|
|
43
43
|
* analysis code, so an ignore set is unavoidable โ and an ignore set applied in silence is how a
|
|
44
44
|
* check becomes a green light. Every structural rule prints the names it swallowed, and
|
|
45
|
-
* `repro/generated-code-grandfathered.txt` prints every row and every reason, on every run,
|
|
45
|
+
* `repro/tools/generated-code-grandfathered.txt` prints every row and every reason, on every run,
|
|
46
46
|
* findings or none. Same reasoning as `check_grandfather` in `repro/paper_numbers.py`.
|
|
47
47
|
*/
|
|
48
48
|
import { readFileSync, existsSync, readdirSync, statSync } from "node:fs";
|
|
@@ -97,8 +97,12 @@ const repro = roots[0];
|
|
|
97
97
|
// model synthesised and is the most literal reading of "generated code" there is. Below that are
|
|
98
98
|
// fixtures, working clones and raw transcripts; going deeper buys tens of thousands of files and no
|
|
99
99
|
// analysis. This is a SCOPE and therefore a blind spot, and it is printed as one.
|
|
100
|
+
// `repro/tools/` (the paper's shared scripts, by the repro/ layout) is a root of its own: the layout
|
|
101
|
+
// moved `repro/<pkg>/src/โฆ` to `repro/tools/<pkg>/src/โฆ`, and counting tools/ as a level would have
|
|
102
|
+
// dropped that code out of the scan.
|
|
100
103
|
const EXT = /\.(py|mjs|cjs|js)$/;
|
|
101
104
|
const MAX_DEPTH = 3;
|
|
105
|
+
const TOOLS_DIR = "tools";
|
|
102
106
|
const swallowed = new Map([
|
|
103
107
|
[
|
|
104
108
|
"the released bundle โ `check-anon.sh` cat. 5 owns it, and it asks a different question there " +
|
|
@@ -155,13 +159,13 @@ const files = [];
|
|
|
155
159
|
swallowed.get(RULE[2]).push(relative(repro, p));
|
|
156
160
|
continue;
|
|
157
161
|
}
|
|
158
|
-
walk(p, depth + 1);
|
|
162
|
+
walk(p, abs === repro && name === TOOLS_DIR ? depth : depth + 1);
|
|
159
163
|
} else if (EXT.test(name)) files.push(p);
|
|
160
164
|
}
|
|
161
165
|
})(repro, 1);
|
|
162
166
|
|
|
163
167
|
// โโ the allow file โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
164
|
-
const allowPath = join(repro, "generated-code-grandfathered.txt");
|
|
168
|
+
const allowPath = join(repro, TOOLS_DIR, "generated-code-grandfathered.txt");
|
|
165
169
|
const allowed = new Map();
|
|
166
170
|
if (existsSync(allowPath)) {
|
|
167
171
|
for (const line of readFileSync(allowPath, "utf8").split("\n")) {
|
|
@@ -305,7 +309,7 @@ for (const [rule, names] of swallowed) {
|
|
|
305
309
|
);
|
|
306
310
|
}
|
|
307
311
|
ledger.push(
|
|
308
|
-
` โข ${ignored.length} row(s) in repro/generated-code-grandfathered.txt โ every row, every reason:`,
|
|
312
|
+
` โข ${ignored.length} row(s) in repro/tools/generated-code-grandfathered.txt โ every row, every reason:`,
|
|
309
313
|
);
|
|
310
314
|
for (const [key, reason] of ignored) ledger.push(` ${key} โ ${reason}`);
|
|
311
315
|
if (!ignored.length) ledger.push(" (nothing is being waved through)");
|
|
@@ -46,7 +46,7 @@ test("repro/: a dangling link is passed over; skipped trees are named, more than
|
|
|
46
46
|
"repro/__pycache__/x.py": "",
|
|
47
47
|
// Draws randomness unseeded: a NO_SEED finding, which the reasonless row below waves through.
|
|
48
48
|
"repro/exp/run.py": "import random\nprint(random.random())\n",
|
|
49
|
-
"repro/generated-code-grandfathered.txt": "exp/run.py\t*\n",
|
|
49
|
+
"repro/tools/generated-code-grandfathered.txt": "exp/run.py\t*\n",
|
|
50
50
|
});
|
|
51
51
|
symlinkSync(join(root, "gone"), join(dir, "repro", "dangling.py"));
|
|
52
52
|
const out = run(dir).stdout;
|
|
@@ -60,3 +60,17 @@ test("repro/: a dangling link is passed over; skipped trees are named, more than
|
|
|
60
60
|
);
|
|
61
61
|
assert.match(out, / {7}exp\/run\.py ยท NO_SEED {2}โ {2}\(NO REASON GIVEN\)/);
|
|
62
62
|
});
|
|
63
|
+
|
|
64
|
+
test("๐ด shared code under repro/tools/ is scanned as deep as a study's: tools/ is a root of its own, not a level of the scan", () => {
|
|
65
|
+
const dir = writeTree(join(root, "paper-tools"), {
|
|
66
|
+
// `repro/<pkg>/src/check.py` was scanned before the layout moved shared code under tools/.
|
|
67
|
+
"repro/tools/pkg/src/check.py": "import random\nprint(random.random())\n",
|
|
68
|
+
"repro/tools/pkg/src/deeper/x.py": "print(1)\n",
|
|
69
|
+
});
|
|
70
|
+
const out = run(dir).stdout;
|
|
71
|
+
assert.match(out, /NO_SEED {3}repro\/tools\/pkg\/src\/check\.py โ /);
|
|
72
|
+
assert.match(
|
|
73
|
+
out,
|
|
74
|
+
/โข 1 tree\(s\) not entered โ nested deeper than 3 levels[^\n]*\n {7}tools\/pkg\/src\/deeper/,
|
|
75
|
+
);
|
|
76
|
+
});
|
|
@@ -4,7 +4,7 @@ description: Answer "what's the status of the paper?" in one pass โ MEASURE wh
|
|
|
4
4
|
allowed-tools: [Bash, Read, Grep, Glob]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
<!-- vigiles:sha256:
|
|
7
|
+
<!-- vigiles:sha256:c28cf2904fc2aaeb compiled from skills/paper-status/SKILL.md.spec.ts -->
|
|
8
8
|
|
|
9
9
|
# paper-status โ state, measured before it is narrated
|
|
10
10
|
|
|
@@ -51,7 +51,7 @@ status; the status is what that measurement makes possible next.
|
|
|
51
51
|
|
|
52
52
|
```bash
|
|
53
53
|
cd <paper-dir>
|
|
54
|
-
bash repro/build-submission.sh 2>&1 | grep -Ei 'body pages|VERDICT|Overfull|undefined|anonymity'
|
|
54
|
+
bash repro/tools/build-submission.sh 2>&1 | grep -Ei 'body pages|VERDICT|Overfull|undefined|anonymity'
|
|
55
55
|
git status --porcelain # uncommitted work
|
|
56
56
|
git log --oneline @{u}..HEAD # unpushed commits
|
|
57
57
|
```
|
|
@@ -57,7 +57,7 @@ status; the status is what that measurement makes possible next.
|
|
|
57
57
|
|
|
58
58
|
\`\`\`bash
|
|
59
59
|
cd <paper-dir>
|
|
60
|
-
bash repro/build-submission.sh 2>&1 | grep -Ei 'body pages|VERDICT|Overfull|undefined|anonymity'
|
|
60
|
+
bash repro/tools/build-submission.sh 2>&1 | grep -Ei 'body pages|VERDICT|Overfull|undefined|anonymity'
|
|
61
61
|
git status --porcelain # uncommitted work
|
|
62
62
|
git log --oneline @{u}..HEAD # unpushed commits
|
|
63
63
|
\`\`\`
|