Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
ad9900f
audit: full-repository defect, logic, redundancy and drift review (20…
claude Sep 27, 2026
49624e5
cli_common: one optional-field resolver and axis hooks for the tools …
claude Sep 27, 2026
5ce670c
fix: gates read missing evidence as a verdict, one display-math form,…
claude Sep 27, 2026
46cf4ce
verify_references: audit F1/F2/F5/F6/F8/F10/F11/F13/F21/F23/F24/F32
claude Sep 27, 2026
1ad6ed7
docs: the skills, annexes, hub and registries say what the code now does
claude Sep 27, 2026
1c9736d
deai axes: an axis that cannot fire is not measured; one rule per thr…
claude Sep 27, 2026
f211ece
deai_partition: compare states by conformal p, split the original tex…
claude Sep 27, 2026
2d2685d
deai_anchoring: a class below its Bonferroni share is skipped and rep…
claude Sep 27, 2026
de925a9
docs: registry rows and architecture text for the rebuilt axes, and t…
claude Sep 27, 2026
470290d
release metadata: v0.39.0 with the notes for the parts already integr…
claude Sep 27, 2026
116f074
rewrite_reward: the fidelity gate runs without the optional model and…
claude Sep 27, 2026
9b30c47
eval and labelling: a thin or empty stratum is unmeasured, and a cell…
claude Sep 27, 2026
e47d250
voice training: a failed encode never becomes the cache, and the chec…
claude Sep 27, 2026
41a29a8
fetch_arxiv_abstracts: the flags hold in both modes, ids are bare, an…
claude Sep 27, 2026
b25f4cd
docs: registry rows, skills and notes for the rewrite gate, the label…
claude Sep 27, 2026
95c988f
deai per-bucket axes: the grid at nearest rank, the unit read back, a…
claude Sep 27, 2026
3e13594
deai_voice: the L3 axis is unmeasured without the surprisal runtime, …
claude Sep 27, 2026
e5f69c4
release notes and record: the per-bucket axes, the suite count, and t…
claude Sep 27, 2026
7daf3e9
deai_voice: the --scores output test from the amended per-bucket commit
claude Sep 27, 2026
04ae5b0
linter and registries: the per-bucket statuses reach the unified repo…
claude Sep 27, 2026
d42ef14
audit follow-ups: the items section 10 left open, the PR's own regres…
skymanbp Sep 27, 2026
bbd355a
docs: invented examples where the record quoted a manuscript under re…
skymanbp Sep 27, 2026
6aaf9f3
audit remainder in code: the document scale cuts prose, one owner per…
skymanbp Sep 27, 2026
2c70054
skills: strong advisories only where the standard allows them, and th…
skymanbp Sep 27, 2026
4dfa9a4
docs: every figure re-taken on the 2026-09-27 rebuild, and the audit'…
skymanbp Sep 27, 2026
ed97c35
audit record: every item mapped to its commit or to a closing reason
skymanbp Sep 27, 2026
37432af
deai_partition: the cohesion floor reads adjacent paragraphs only (pr…
skymanbp Sep 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
},
"metadata": {
"description": "Single-plugin marketplace for sci-paper: scientific paper writing, source-traced review, and de-AI rewriting for top-tier journals.",
"version": "0.38.0"
"version": "0.39.0"
},
"plugins": [
{
"name": "sci-paper",
"source": "./",
"description": "Scientific paper writing, source-traced review, and de-AI rewriting for top-tier journals (ApJ/MNRAS/PRD/JCAP-class) and NSF/NIH proposals. Ships 12 skills and 40 tools under one typed standard: scientific-integrity blockers that cannot be waived as style preferences, a zero-target L0 lexicon, ranked advisories, explicit measurement states so missing calibration never reads as clean, claim-first rewriting gated on hard scientific-fidelity eligibility, a mechanical length budget with a machine-built removal map and a required-shrink gate, corpus-calibrated salience-hierarchy, domain-register (with an exhaustive zero-hit vocabulary audit), collocation, and discourse-texture (given/new cohesion, epistemic hedging) axes, each judged against the field's own per-section distribution at the unit it was calibrated at, a residue axis that gates the trace an edit leaves, A-R review with narrative-spine and adversarial-escalation dimensions, registry-verified bibliographies (CrossRef, DataCite, arXiv), pixel-measured figure review, and isolated multi-reviewer orchestration. Learned scores are field-similarity triage, never an authorship verdict. See CHANGELOG.md for per-version history.",
"version": "0.38.0",
"version": "0.39.0",
"author": {
"name": "skymanbp",
"email": "skyman.bp@gmail.com"
Expand Down
2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "sci-paper",
"version": "0.38.0",
"version": "0.39.0",
"description": "Scientific paper writing, source-traced review, and de-AI rewriting for top-tier journals (ApJ/MNRAS/PRD/JCAP-class) and NSF/NIH proposals. Ships 12 skills and 40 tools under one typed standard: scientific-integrity blockers that cannot be waived as style preferences, a zero-target L0 lexicon, ranked advisories, explicit measurement states so missing calibration never reads as clean, claim-first rewriting gated on hard scientific-fidelity eligibility, a mechanical length budget with a machine-built removal map and a required-shrink gate, corpus-calibrated salience-hierarchy, domain-register (with an exhaustive zero-hit vocabulary audit), collocation, and discourse-texture (given/new cohesion, epistemic hedging) axes, each judged against the field's own per-section distribution at the unit it was calibrated at, a residue axis that gates the trace an edit leaves, A-R review with narrative-spine and adversarial-escalation dimensions, registry-verified bibliographies (CrossRef, DataCite, arXiv), pixel-measured figure review, and isolated multi-reviewer orchestration. Learned scores are field-similarity triage, never an authorship verdict. See CHANGELOG.md for per-version history.",
"author": {
"name": "skymanbp",
Expand Down
24 changes: 18 additions & 6 deletions ACKNOWLEDGMENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,26 @@ implicit.

## AIScientists-Dev/academic-humanizer

<https://github.com/AIScientists-Dev/academic-humanizer> (MIT)
<https://github.com/AIScientists-Dev/academic-humanizer> (MIT License,
Copyright (c) 2026 AIScientists-Dev)

**Adopted.** The 2026-07-16 lexicon extensions (`underscore*`, `pivotal`,
`tapestry`, `testament`, `realm*`, `intricate`, `foster*`); the `serves as`,
`ing-tail`, and `colon-elaboration` linter rules; the Claim–Evidence Discipline
and Preserve List sections of [`skills/paper/SKILL.md`](skills/paper/SKILL.md);
(its Layer 4, recalibrated on the astronomy corpus) and Preserve List (its
Layer 3) sections of [`skills/paper/SKILL.md`](skills/paper/SKILL.md);
the [`proposal-polish`](skills/proposal-polish/SKILL.md) skill; and the
[`de-ai`](skills/de-ai/SKILL.md) skill's Layer 1–5 audit catalog adapt its
material.
material. The first five words entered Tier A only after both curated field
corpora showed zero occurrences of them; `intricate` and `foster*` occur once
each there, so they entered Tier B.

**Declined.** Venue-specific rules that conflict with astronomy usage —
`landscape`, and the blanket `demonstrate` / `significantly` bans. Every lexical
adoption was re-verified against the curated field corpora before tier
assignment.
`landscape`, a legitimate field term (`detection landscape`) frequent in the
corpus, and the blanket `demonstrate` / `significantly` bans: in the combined
curated astronomy corpus `demonstrate*` runs at 0.147/1k and `significantly` at
0.274/1k (measured 2026-07-16). Every lexical adoption was re-verified against
the curated field corpora before tier assignment.

academic-humanizer itself builds on blader/humanizer (MIT).

Expand All @@ -38,6 +44,12 @@ self-interrogation step, and its false-positive guards.
chatbot artifacts, curly-quote flags) and its `landscape`-flagging word list.
Only the academically relevant structural tells were absorbed.

## Project-owner rules

Two rules in [`skills/paper/SKILL.md`](skills/paper/SKILL.md) were set by the
project owner on 2026-07-16: condense, do not accumulate (改写、删减、精简,而不是堆叠;
now standard §5.3), and the `colon-elaboration` rule.

---

Licensing: [MIT](LICENSE) covers code, skills, documentation, and tooling
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG-ARCHIVE-EARLY.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ The earliest history of the plugin, from the first release through v0.21.0
is edited; the history is verbatim.

- Current releases: [CHANGELOG.md](CHANGELOG.md)
- **v0.35.0 through v0.35.1**: [CHANGELOG-ARCHIVE-v0.35.md](CHANGELOG-ARCHIVE-v0.35.md)
- **v0.33.0 through v0.34.0**: [CHANGELOG-ARCHIVE-v0.33-v0.34.md](CHANGELOG-ARCHIVE-v0.33-v0.34.md)
- **v0.27.1 through v0.32.0**: [CHANGELOG-ARCHIVE-RECENT.md](CHANGELOG-ARCHIVE-RECENT.md)
- **v0.22.0 through v0.27.0**: [CHANGELOG-ARCHIVE.md](CHANGELOG-ARCHIVE.md)
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG-ARCHIVE-RECENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ live changelog passed the repository's 750-line budget. Nothing here is edited;
history is verbatim.

- Current releases: [CHANGELOG.md](CHANGELOG.md)
- **v0.35.0 through v0.35.1**: [CHANGELOG-ARCHIVE-v0.35.md](CHANGELOG-ARCHIVE-v0.35.md)
- **v0.33.0 through v0.34.0**: [CHANGELOG-ARCHIVE-v0.33-v0.34.md](CHANGELOG-ARCHIVE-v0.33-v0.34.md)
- **v0.22.0 through v0.27.0**: [CHANGELOG-ARCHIVE.md](CHANGELOG-ARCHIVE.md)
- **v0.21.0 and earlier**: [CHANGELOG-ARCHIVE-EARLY.md](CHANGELOG-ARCHIVE-EARLY.md)
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG-ARCHIVE-v0.33-v0.34.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ archive was within 65 lines of it. Nothing here is edited; the history is
verbatim.

- Current releases: [CHANGELOG.md](CHANGELOG.md)
- **v0.35.0 through v0.35.1**: [CHANGELOG-ARCHIVE-v0.35.md](CHANGELOG-ARCHIVE-v0.35.md)
- **v0.27.1 through v0.32.0**: [CHANGELOG-ARCHIVE-RECENT.md](CHANGELOG-ARCHIVE-RECENT.md)
- **v0.22.0 through v0.27.0**: [CHANGELOG-ARCHIVE.md](CHANGELOG-ARCHIVE.md)
- **v0.21.0 and earlier**: [CHANGELOG-ARCHIVE-EARLY.md](CHANGELOG-ARCHIVE-EARLY.md)
Expand Down
148 changes: 148 additions & 0 deletions CHANGELOG-ARCHIVE-v0.35.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
# Changelog archive — v0.35.0 through v0.35.1

Entries moved out of [CHANGELOG.md](CHANGELOG.md) on 2026-09-27 (v0.39.0) when
the live changelog passed the repository's 750-line budget. Nothing here is
edited; the history is verbatim.

- Current releases: [CHANGELOG.md](CHANGELOG.md)
- **v0.33.0 through v0.34.0**: [CHANGELOG-ARCHIVE-v0.33-v0.34.md](CHANGELOG-ARCHIVE-v0.33-v0.34.md)
- **v0.27.1 through v0.32.0**: [CHANGELOG-ARCHIVE-RECENT.md](CHANGELOG-ARCHIVE-RECENT.md)
- **v0.22.0 through v0.27.0**: [CHANGELOG-ARCHIVE.md](CHANGELOG-ARCHIVE.md)
- **v0.21.0 and earlier**: [CHANGELOG-ARCHIVE-EARLY.md](CHANGELOG-ARCHIVE-EARLY.md)

---

## v0.35.1 — 2026-09-03

A post-release audit of the documentation, not of the code. An escape the
writer lost had truncated the tools table in both READMEs, the one published
figure with no artifact behind it was wrong, and several figures and dates in
the record had drifted from what they describe.

### A lost backslash ended the tools table four rows early

The `tools/tex_macros.py` row wrote `\newcommand` without its backslash, and
the consumed newline split the row, so the table stopped rendering there —
`retrieve_exemplars`, `fetch_arxiv_abstracts`, `train_ai_ism_classifier` and
`extract_md_negatives` fell out of it, in both READMEs. The same damage sat in
the v0.32.0 changelog entry at `\nocite`.

### The worked example published a count the linter does not report

`examples/README.md` said 19 total advisories where `ai_ism_lint` reports 18.
It was the only published-figure document with no artifact behind it, so
nothing read it. `tests/test_published_figures.py` now renders both of its
tables — the before/after summary and the per-rule counts — by running the
linter on the two shipped manuscripts and looking for the result, the same way
every other pinned figure is rendered from the artifact it was read from. A
cell the linter does not produce fails the case, so a document that agrees with
a stale run and a document nobody updated fail identically.

### Figures and dates the record had drifted from

- **203**, not 200, held-out refereed papers, in the two `DISPOSITIONS.md` rows
that still carried the count from before §18 re-measured it.
- The v0.30.0–v0.33.0 changelog headings were dated 2026-08-27; their tagger
dates are **2026-08-26**.
- The release-gate label in `EVALUATION.md` §12 stamped a version on a suite
size measured after it. It now reads "as of 2026-09-03; last tagged release
v0.35.1", so the version names the tag and the date names the measurement.
- Both README latency tables paired 394 tests with 81.4 s, a wall time taken on
the 393-test suite. The suite row is re-taken: **73.0 s**, median of 3, the
three runs spanning 70.0–86.9 s. Every other row still stands from the
2026-08-27 take and the preamble now says which rows carry which date.
- `docs/README.md` called the evidence record five files where it is eight,
gave three of them section maps missing the sections added since, counted
four kinds of document where six live there, and described the validator's
version and suite-size checks narrower than they are.
- The unit-pattern anchor in both READMEs pointed at `rewrite_reward.py:41`;
the pattern is at `:56`.
- Both READMEs said CI runs on every push. `ci.yml` filters `branches: [main]`,
so it runs on every push to `main` and every pull request.

### Also

- `.gitignore` covers `models/hf-cache/`, `.ce/` and `.ccm/` — relocated model
cache and machine-local tool state, never repository content.
- Suite: 394 tests across 20 files; `validate_plugin.py` 9/9.

## v0.35.0 — 2026-08-27

The axis that counts numbers could not see numbers written as macros, a public
repository was carrying an unpublished manuscript's method summary, and the
worked example that demonstrates any of this now runs on a synthetic paper
instead of a real one.

### Numbers held in macros were invisible, in both directions

A manuscript that writes `\newcommand{\Nsamples}{12}` in its preamble and
`\Nsamples{}` in its results put a measured quantity where neither named text
projection could read it. `RE_TEX_SIMPLE_CMD` reduces a command to its
argument, so the use site contributed nothing while the definition site
contributed the digits once, in the preamble, attributed to no reported
section. Two errors running in opposite directions, which is why the net stayed
small enough to go unnoticed: on the manuscript that surfaced it, expanding the
uses adds 650 digits and dropping the definitions removes 493.

Found by running the tools on a real manuscript, not by a test. The salience
axis had been reporting recital percentiles for that paper computed on 91% of
its digits, and correcting it moved that paper from 16 recital findings to 26.

`tools/tex_macros.py` expands numeric-literal macros once, on the assembled
document root, because that is the only scope holding both a preamble
definition and a body use — the same reason `read_tex_document` folds
`\include` in the first place. Only a bare numeric literal expands, so
`\newcommand{\Msun}{M_\odot}` and every macro taking an argument are untouched.

Both salience baselines were rebuilt rather than left to score expanded
manuscripts against an unexpanded reference. They move by **zero to four
decimals** at the p90 and p95 gates, across all three features and all seven
buckets, in both `wgl` and `wgl-letter`: 88.2% of 390 corpus documents never
use the construction. That is what separates a correction from a rescaling, and
it means no published salience figure in `EVALUATION.md` changes (§22).

### An unpublished manuscript's method summary was in a public repository

This repository is public. Content from the author's unpublished manuscripts
had accumulated in the evaluation record since 2026-07-12, in increments that
each looked locally harmless — a codename in a test fixture, a macro and its
value in a docstring, one fidelity-preserving rewrite quoted in full.

The aggregate was a complete method summary: enough of the method for a competitor to reconstruct the contribution. Public for 46 days.

The quoted rewrite was the largest single exposure, and it was labelled a
proposal rather than a quotation, which is exactly why it survived review: the
rewrite gate protects numbers, citations, macros, entities and claim/evidence
relations, so a fidelity-preserving rewrite discloses what the original
discloses. Being a rewrite is not a defence.

Removed: the quoted block, the method-component list, manuscript codenames
throughout, one real measured value, and manuscript-derived test fixtures,
which now use invented macros. Kept: every measurement. Finding counts,
percentiles, rule names, before/after tables and the panel results describe how
the tools behave, not what the paper found, and they are why the record exists.

Git history was rewritten to remove the same content from every earlier commit.
That does not undo publication — the content may persist in existing clones,
forks and upstream caches.

### A worked example that is safe to ship

`examples/` now carries a synthetic manuscript and the same paper after acting
on the findings. The topic is a textbook one and every value is invented, so
the demonstration no longer depends on anyone's unpublished work.

It is also a more honest demonstration than a clean sweep would be. L0 targets
go to zero and `discourse-cohesion` from 3 findings to 1, while
`salience-recital` **rises** from 4 to 6 — because carrying a noun forward to
link two sentences pulls the subject into sentences that also carry a numeral.
In a number-dense passage cohesion and recital want opposite things and no
rewrite satisfies both. Both findings are true, and which to act on is the
author's judgement, which is why neither is a blocker and there is no score.

### Also

- The re-export contract test named its excluded module imports one at a time
(`re`, `defaultdict`, `Path`), so it failed the moment a new import appeared.
It now excludes module objects by type.
- Suite: 393 tests across 20 files; `validate_plugin.py` 9/9.
7 changes: 4 additions & 3 deletions CHANGELOG-ARCHIVE.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ the repository's 750-line budget. Nothing here is edited; the history is
verbatim.

- Current releases: [CHANGELOG.md](CHANGELOG.md)
- **v0.35.0 through v0.35.1**: [CHANGELOG-ARCHIVE-v0.35.md](CHANGELOG-ARCHIVE-v0.35.md)
- **v0.33.0 through v0.34.0**: [CHANGELOG-ARCHIVE-v0.33-v0.34.md](CHANGELOG-ARCHIVE-v0.33-v0.34.md)
- **v0.27.1 through v0.32.0**: [CHANGELOG-ARCHIVE-RECENT.md](CHANGELOG-ARCHIVE-RECENT.md)
- **v0.21.0 and earlier**: [CHANGELOG-ARCHIVE-EARLY.md](CHANGELOG-ARCHIVE-EARLY.md)
Expand Down Expand Up @@ -395,7 +396,7 @@ repeats nothing — what it lacks is rank.
subfields.
- **The same bank must not become the register reference.** 254 documents
cannot express a rate below 1/254 = 3.9e-3, 39.4× coarser than the 1e-4
threshold, so `saddle`, `classifier`, `recall`, and `ablation` flip to
threshold, so `classifier`, `recall`, and `ablation` flip to
foreign on zero counts. A register reference needs of order 10,000
documents. The bank is stored and wired to nothing.

Expand Down Expand Up @@ -462,8 +463,8 @@ the pre-2022 date filter turns out to bound less than it appears to.
- **The same bank must NOT become the register reference.** `deai_register`
calls a term foreign below a document-frequency rate of 1e-4, but 254
documents cannot express a non-zero rate below 1/254 = 3.9e-3, 39x
coarser than the threshold. Under that reference `saddle` — the central
concept of one of this suite's manuscripts — flips from native to
coarser than the threshold. Under that reference the central concept
of one of this suite's manuscripts flips from native to
foreign purely on zero counts, as do `classifier`, `recall`, and
`ablation`. A register reference needs of order 10,000 documents for a
single occurrence to land at the threshold, so the broad bank stays.
Expand Down
Loading
Loading