paperlint 3.2.0 → 4.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/CLAUDE.md +2 -2
- package/dist/adapters/banal/failure.d.ts +1 -7
- package/dist/adapters/banal/failure.d.ts.map +1 -1
- package/dist/adapters/banal/failure.js +5 -7
- package/dist/adapters/banal/failure.js.map +1 -1
- package/dist/adapters/banal/index.d.ts.map +1 -1
- package/dist/adapters/banal/index.js +8 -11
- package/dist/adapters/banal/index.js.map +1 -1
- package/dist/adapters/banal/install.d.ts.map +1 -1
- package/dist/adapters/banal/install.js +4 -3
- package/dist/adapters/banal/install.js.map +1 -1
- package/dist/adapters/banal/invocation.d.ts +9 -4
- package/dist/adapters/banal/invocation.d.ts.map +1 -1
- package/dist/adapters/banal/invocation.js +13 -1
- package/dist/adapters/banal/invocation.js.map +1 -1
- package/dist/adapters/banal/locate.d.ts +12 -9
- package/dist/adapters/banal/locate.d.ts.map +1 -1
- package/dist/adapters/banal/locate.js +19 -12
- package/dist/adapters/banal/locate.js.map +1 -1
- package/dist/adapters/banal/run.d.ts +10 -1
- package/dist/adapters/banal/run.d.ts.map +1 -1
- package/dist/adapters/banal/run.js +8 -4
- package/dist/adapters/banal/run.js.map +1 -1
- package/dist/adapters/banal/settings.d.ts +1 -1
- package/dist/adapters/banal/settings.d.ts.map +1 -1
- package/dist/adapters/banal/settings.js +2 -1
- package/dist/adapters/banal/settings.js.map +1 -1
- package/dist/adapters/memory/index.d.ts.map +1 -1
- package/dist/adapters/memory/index.js +8 -2
- package/dist/adapters/memory/index.js.map +1 -1
- package/dist/adapters/node/process.io.d.ts +6 -3
- package/dist/adapters/node/process.io.d.ts.map +1 -1
- package/dist/adapters/node/process.io.js.map +1 -1
- package/dist/adapters/node/workspace.io.d.ts.map +1 -1
- package/dist/adapters/node/workspace.io.js +4 -2
- package/dist/adapters/node/workspace.io.js.map +1 -1
- package/dist/adapters/references/index.d.ts.map +1 -1
- package/dist/adapters/references/index.js +4 -2
- package/dist/adapters/references/index.js.map +1 -1
- package/dist/build-engine.d.ts +1 -1
- package/dist/build-engine.d.ts.map +1 -1
- package/dist/build-engine.js +8 -1
- package/dist/build-engine.js.map +1 -1
- package/dist/build.d.ts +2 -3
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +5 -6
- package/dist/build.js.map +1 -1
- package/dist/caller-path.d.ts +3 -0
- package/dist/caller-path.d.ts.map +1 -0
- package/dist/caller-path.js +13 -0
- package/dist/caller-path.js.map +1 -0
- package/dist/cli.d.ts +10 -17
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +62 -12
- package/dist/cli.js.map +1 -1
- package/dist/doctor.d.ts +12 -3
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +2 -1
- package/dist/doctor.js.map +1 -1
- package/dist/domain/paths.d.ts +8 -2
- package/dist/domain/paths.d.ts.map +1 -1
- package/dist/domain/paths.js +12 -1
- package/dist/domain/paths.js.map +1 -1
- package/dist/domain/ready.d.ts +24 -0
- package/dist/domain/ready.d.ts.map +1 -0
- package/dist/domain/ready.js +11 -0
- package/dist/domain/ready.js.map +1 -0
- package/dist/domain/record.d.ts +8 -0
- package/dist/domain/record.d.ts.map +1 -0
- package/dist/domain/record.js +8 -0
- package/dist/domain/record.js.map +1 -0
- package/dist/domain/sha256.d.ts.map +1 -1
- package/dist/domain/sha256.js +4 -2
- package/dist/domain/sha256.js.map +1 -1
- package/dist/engine.d.ts +23 -22
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js.map +1 -1
- package/dist/eslint-rules/bib-reachable-entry.d.ts +1 -1
- package/dist/eslint-rules/bib-reachable-entry.js.map +1 -1
- package/dist/eslint-rules/install-path-literals.d.ts +2 -2
- package/dist/eslint-rules/install-path-literals.js.map +1 -1
- package/dist/eslint-rules/paper-research-question.d.ts +1 -1
- package/dist/eslint-rules/paper-research-question.js.map +1 -1
- package/dist/eslint-rules/paper-stages.d.ts +2 -2
- package/dist/eslint-rules/paper-stages.js.map +1 -1
- package/dist/eslint-rules/paper-typography.d.ts +6 -6
- package/dist/eslint-rules/paper-typography.js.map +1 -1
- package/dist/eslint-rules/pdf-last-page-balance.d.ts +1 -1
- package/dist/eslint-rules/pdf-last-page-balance.js.map +1 -1
- package/dist/eslint-rules/review-frontmatter.d.ts +2 -2
- package/dist/eslint-rules/review-frontmatter.js.map +1 -1
- package/dist/eslint-rules/sibling-frontmatter.d.ts +1 -1
- package/dist/eslint-rules/sibling-frontmatter.d.ts.map +1 -1
- package/dist/eslint-rules/temp-root-realpath.d.ts +1 -1
- package/dist/eslint-rules/temp-root-realpath.js.map +1 -1
- package/dist/eslint-rules/tex-build.d.ts +2 -2
- package/dist/eslint-rules/tex-build.js.map +1 -1
- package/dist/facts-file.d.ts.map +1 -1
- package/dist/facts-file.js +29 -26
- package/dist/facts-file.js.map +1 -1
- package/dist/hooks-settings.d.ts.map +1 -1
- package/dist/hooks-settings.js +17 -2
- package/dist/hooks-settings.js.map +1 -1
- package/dist/init.d.ts +3 -4
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +18 -8
- package/dist/init.js.map +1 -1
- package/dist/lib/paper-config.d.ts.map +1 -1
- package/dist/lib/paper-config.js +1 -5
- package/dist/lib/paper-config.js.map +1 -1
- package/dist/new-paper.d.ts.map +1 -1
- package/dist/new-paper.js +5 -1
- package/dist/new-paper.js.map +1 -1
- package/dist/paper-files.d.ts +4 -4
- package/dist/paper-files.d.ts.map +1 -1
- package/dist/paper-files.js +6 -6
- package/dist/paper-files.js.map +1 -1
- package/dist/paper-settings.js +3 -3
- package/dist/paper-settings.js.map +1 -1
- package/dist/pdf-facts.d.ts +51 -1
- package/dist/pdf-facts.d.ts.map +1 -1
- package/dist/pdf-facts.js +23 -15
- package/dist/pdf-facts.js.map +1 -1
- package/dist/pdf-geometry.d.ts.map +1 -1
- package/dist/pdf-geometry.js +2 -3
- package/dist/pdf-geometry.js.map +1 -1
- package/dist/ports/tool-installer.d.ts +2 -14
- package/dist/ports/tool-installer.d.ts.map +1 -1
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js +16 -4
- package/dist/presets.js.map +1 -1
- package/dist/references.d.ts.map +1 -1
- package/dist/references.js +4 -4
- package/dist/references.js.map +1 -1
- package/dist/rules-config.d.ts +26 -1
- package/dist/rules-config.d.ts.map +1 -1
- package/dist/rules-config.js +9 -9
- package/dist/rules-config.js.map +1 -1
- package/dist/tex-requirements.d.ts +4 -0
- package/dist/tex-requirements.d.ts.map +1 -1
- package/dist/tex-requirements.js +14 -2
- package/dist/tex-requirements.js.map +1 -1
- package/dist/types.d.ts +5 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/venue-rules.d.ts.map +1 -1
- package/dist/venue-rules.js +20 -7
- package/dist/venue-rules.js.map +1 -1
- package/docs/configuration.md +2 -2
- package/eslint-rules/bib-reachable-entry.ts +1 -1
- package/eslint-rules/install-path-literals.ts +2 -2
- package/eslint-rules/paper-research-question.ts +1 -1
- package/eslint-rules/paper-stages.ts +2 -2
- package/eslint-rules/paper-typography.ts +2 -2
- package/eslint-rules/pdf-last-page-balance.ts +1 -1
- package/eslint-rules/review-frontmatter.ts +1 -1
- package/eslint-rules/temp-root-realpath.ts +1 -1
- package/eslint-rules/tex-build.ts +2 -2
- package/eslint.config.mjs +7 -0
- package/fixtures/install-path-literals/clean.fixture.mjs +1 -1
- package/fixtures/install-path-literals/clean.md +2 -2
- package/fixtures/install-path-literals/defect.fixture.mjs +1 -1
- package/fixtures/install-path-literals/defect.md +2 -2
- package/hooks/paper-status-gates.sh +9 -19
- package/lib/paper-config.harness.mjs +1 -1
- package/lib/paper-config.ts +1 -5
- package/lib/skill-checks.mjs +24 -381
- package/lib/skill-checks.test.mjs +63 -115
- package/lib/skill-corpus.mjs +10 -251
- package/lib/skill-corpus.test.mjs +2 -13
- package/lib/skill-trigger-cases.mjs +1 -1
- package/package.json +1 -1
- package/scripts/coverage-config.test.ts +0 -1
- package/scripts/harness-api.frozen.json +0 -1
- package/skills/analyze-sibling-paper/SKILL.md +1 -39
- package/skills/analyze-sibling-paper/SKILL.md.spec.ts +0 -38
- package/skills/argument-arc/SKILL.md +2 -36
- package/skills/argument-arc/SKILL.md.spec.ts +1 -43
- package/skills/build-benchmark/SKILL.md +1 -41
- package/skills/build-benchmark/SKILL.md.spec.ts +0 -40
- package/skills/camera-ready/SKILL.md +1 -34
- package/skills/camera-ready/SKILL.md.spec.ts +0 -33
- package/skills/cold-read-diff/SKILL.md +1 -35
- package/skills/cold-read-diff/SKILL.md.spec.ts +0 -34
- package/skills/draft-paper/SKILL.md +2 -41
- package/skills/draft-paper/SKILL.md.spec.ts +1 -50
- package/skills/extend-paper/SKILL.md +2 -33
- package/skills/extend-paper/SKILL.md.spec.ts +1 -42
- package/skills/find-venue/SKILL.md +2 -38
- package/skills/find-venue/SKILL.md.spec.ts +1 -47
- package/skills/grade-paper-writing/SKILL.md +3 -38
- package/skills/grade-paper-writing/SKILL.md.spec.ts +2 -47
- package/skills/grade-paper-writing/prose-lint.mjs +2 -3
- package/skills/grade-paper-writing/prose-lint.test.ts +1 -1
- package/skills/harden-paper/SKILL.md +1 -39
- package/skills/harden-paper/SKILL.md.spec.ts +0 -38
- package/skills/map-prior-work/SKILL.md +1 -35
- package/skills/map-prior-work/SKILL.md.spec.ts +0 -34
- package/skills/osf-artifact-upload/osf-artifact-upload.harness.ts +3 -4
- package/skills/paper-adversarial-review/SKILL.md +2 -35
- package/skills/paper-adversarial-review/SKILL.md.spec.ts +1 -43
- package/skills/paper-pipeline/SKILL.md +2 -28
- package/skills/paper-pipeline/SKILL.md.spec.ts +1 -27
- package/skills/paper-pipeline/grade-paper-writing-ablation.eval.mjs +1 -1
- package/skills/paper-pipeline/paper-pipeline.harness.mjs +25 -40
- package/skills/paper-pipeline/references/acceptance-gate.md +1 -6
- package/skills/paper-pipeline/references/pipeline-status-template.md +8 -35
- package/skills/paper-pipeline/scripts/README.md +30 -225
- package/skills/paper-pipeline/scripts/artifact-coverage.harness.mjs +4 -8
- package/skills/paper-pipeline/scripts/consumer.harness.mjs +6 -104
- package/skills/paper-pipeline/scripts/consumer.mjs +23 -104
- package/skills/paper-pipeline/scripts/generated-code.harness.mjs +2 -3
- package/skills/paper-pipeline/scripts/population-map.harness.mjs +3 -3
- package/skills/paper-status/SKILL.md +2 -42
- package/skills/paper-status/SKILL.md.spec.ts +1 -41
- package/skills/pc-panel-review/SKILL.md +2 -46
- package/skills/pc-panel-review/SKILL.md.spec.ts +1 -45
- package/skills/plan-paper-timeline/SKILL.md +2 -36
- package/skills/plan-paper-timeline/SKILL.md.spec.ts +0 -36
- package/skills/render-paper/SKILL.md +1 -37
- package/skills/render-paper/SKILL.md.spec.ts +0 -36
- package/skills/research-ideate/SKILL.md +2 -39
- package/skills/research-ideate/SKILL.md.spec.ts +1 -47
- package/skills/study-accepted-papers/SKILL.md +1 -34
- package/skills/study-accepted-papers/SKILL.md.spec.ts +0 -33
- package/skills/submit-paper/SKILL.md +1 -33
- package/skills/submit-paper/SKILL.md.spec.ts +0 -32
- package/skills/sweep-design-space/SKILL.md +1 -38
- package/skills/sweep-design-space/SKILL.md.spec.ts +0 -37
- package/skills/tighten-paper/SKILL.md +2 -39
- package/skills/tighten-paper/SKILL.md.spec.ts +1 -47
- package/skills/tighten-paper/structure.mjs +4 -11
- package/skills/verify-citations/SKILL.md +2 -38
- package/skills/verify-citations/SKILL.md.spec.ts +1 -37
- package/src/adapters/banal/failure.ts +9 -10
- package/src/adapters/banal/index.test.ts +2 -2
- package/src/adapters/banal/index.ts +8 -10
- package/src/adapters/banal/install.ts +9 -4
- package/src/adapters/banal/invocation.test.ts +20 -8
- package/src/adapters/banal/invocation.ts +23 -8
- package/src/adapters/banal/locate.test.ts +2 -2
- package/src/adapters/banal/locate.ts +27 -21
- package/src/adapters/banal/run.test.ts +2 -2
- package/src/adapters/banal/run.ts +16 -10
- package/src/adapters/banal/settings.ts +2 -2
- package/src/adapters/curl/download.test.ts +4 -4
- package/src/adapters/memory/index.ts +4 -3
- package/src/adapters/node/files.test.ts +5 -3
- package/src/adapters/node/process.io.ts +9 -2
- package/src/adapters/node/process.test.ts +4 -4
- package/src/adapters/node/workspace.io.ts +9 -4
- package/src/adapters/references/index.ts +7 -2
- package/src/build-engine.test.ts +11 -6
- package/src/build-engine.ts +10 -5
- package/src/build.test.ts +10 -11
- package/src/build.ts +8 -9
- package/src/caller-path.ts +13 -0
- package/src/cli.harness.mjs +0 -2
- package/src/cli.test.ts +19 -8
- package/src/cli.ts +82 -25
- package/src/doctor.test.ts +1 -1
- package/src/doctor.ts +14 -5
- package/src/domain/paths.test.ts +15 -0
- package/src/domain/paths.ts +20 -1
- package/src/domain/ready.ts +31 -0
- package/src/domain/record.test.ts +20 -0
- package/src/domain/record.ts +12 -0
- package/src/domain/sha256.ts +5 -3
- package/src/engine.ts +30 -2
- package/src/facts-file.ts +43 -28
- package/src/hooks-settings.harness.ts +17 -0
- package/src/hooks-settings.ts +28 -4
- package/src/init.test.ts +25 -5
- package/src/init.ts +26 -12
- package/src/new-paper.harness.mjs +7 -23
- package/src/new-paper.ts +7 -3
- package/src/paper-files.test.ts +22 -19
- package/src/paper-files.ts +16 -27
- package/src/paper-settings.test.ts +2 -2
- package/src/paper-settings.ts +5 -5
- package/src/pdf-facts.test.ts +16 -5
- package/src/pdf-facts.ts +79 -22
- package/src/pdf-geometry.ts +5 -3
- package/src/ports/tool-installer.ts +2 -17
- package/src/presets.ts +28 -14
- package/src/references.test.ts +25 -19
- package/src/references.ts +4 -5
- package/src/rules-config.ts +40 -11
- package/src/tex-requirements.test.ts +21 -0
- package/src/tex-requirements.ts +29 -6
- package/src/toolchain.test.ts +9 -5
- package/src/toolchain.ts +2 -2
- package/src/types.ts +5 -3
- package/src/venue-rules.test.ts +8 -4
- package/src/venue-rules.ts +21 -11
- package/skills/paper-pipeline/scripts/announce.mjs +0 -67
- package/skills/paper-pipeline/scripts/announce.test.mjs +0 -102
- package/skills/paper-pipeline/scripts/fixtures/clean/PIPELINE-STATUS.md +0 -51
- package/skills/paper-pipeline/scripts/fixtures/dirty/PIPELINE-STATUS.md +0 -52
- package/skills/paper-pipeline/scripts/fixtures/dirty/paper.md +0 -6
- package/skills/paper-pipeline/scripts/fixtures/scorecard.ts +0 -100
- package/skills/paper-pipeline/scripts/ledger.cli.test.mjs +0 -302
- package/skills/paper-pipeline/scripts/ledger.mjs +0 -623
- package/skills/paper-pipeline/scripts/ledger.test.mjs +0 -254
- package/skills/paper-pipeline/scripts/pipeline-check.cli.test.mjs +0 -474
- package/skills/paper-pipeline/scripts/pipeline-check.harness.mjs +0 -328
- package/skills/paper-pipeline/scripts/pipeline-check.mjs +0 -750
- package/skills/paper-pipeline/scripts/pipeline-edges.mjs +0 -169
- package/skills/paper-pipeline/scripts/pipeline-edges.test.mjs +0 -73
- package/skills/paper-pipeline/scripts/run-mechanical.mjs +0 -648
- package/skills/paper-pipeline/scripts/run-mechanical.test.mjs +0 -468
- package/skills/paper-pipeline/scripts/status.mjs +0 -295
- package/skills/paper-pipeline/scripts/status.test.mjs +0 -232
package/eslint.config.mjs
CHANGED
|
@@ -414,6 +414,13 @@ export default [
|
|
|
414
414
|
// `any` switches the checker off for everything it flows into. The preset has it too; named
|
|
415
415
|
// here so that dropping the preset cannot drop it.
|
|
416
416
|
"@typescript-eslint/no-explicit-any": "error",
|
|
417
|
+
// A type assertion (`x as T`, `<T>x`) is a claim the checker takes on trust (#126). A value
|
|
418
|
+
// from outside is parsed or guarded where it enters; a brand is minted by its own checked
|
|
419
|
+
// constructor. `as const` asserts nothing about the value and stays allowed.
|
|
420
|
+
"@typescript-eslint/consistent-type-assertions": [
|
|
421
|
+
"error",
|
|
422
|
+
{ assertionStyle: "never" },
|
|
423
|
+
],
|
|
417
424
|
// The behaviour rules of the `.mjs` block, for the same reasons: each changes what the code
|
|
418
425
|
// DOES, not how it looks, and a regex that escapes the wrong thing searches for the wrong thing.
|
|
419
426
|
"no-empty": "error",
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// Clean: every answer to *where* comes from the port.
|
|
2
2
|
import { consumerRoot } from "../../skills/paper-pipeline/scripts/consumer.mjs";
|
|
3
|
-
export const
|
|
3
|
+
export const CACHE = (env, cwd) => `${consumerRoot({ env, cwd })}/cache.json`;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: planted-clean
|
|
3
|
-
allowed-tools: [Bash(node ${CLAUDE_SKILL_DIR}/../paper-pipeline/scripts/
|
|
3
|
+
allowed-tools: [Bash(node ${CLAUDE_SKILL_DIR}/../paper-pipeline/scripts/extract-ref-facts.mjs:*)]
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# A skill that asks the port where it is
|
|
@@ -8,7 +8,7 @@ allowed-tools: [Bash(node ${CLAUDE_SKILL_DIR}/../paper-pipeline/scripts/ledger.m
|
|
|
8
8
|
Record the verdict:
|
|
9
9
|
|
|
10
10
|
```
|
|
11
|
-
node ${CLAUDE_SKILL_DIR}/../paper-pipeline/scripts/
|
|
11
|
+
node ${CLAUDE_SKILL_DIR}/../paper-pipeline/scripts/extract-ref-facts.mjs planted
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
Paths inside the repository, such as `skills/paper-pipeline/scripts/consumer.mjs`, are not
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// Planted: a shipped module betting on one channel, in both literal forms.
|
|
2
|
-
export const
|
|
2
|
+
export const CACHE = "node_modules/research-paper-pipeline/cache.json";
|
|
3
3
|
export const skill = (n) => `.claude/skills/${n}/SKILL.md`;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: planted-defect
|
|
3
|
-
allowed-tools: [Bash(node .claude/skills/paper-pipeline/scripts/
|
|
3
|
+
allowed-tools: [Bash(node .claude/skills/paper-pipeline/scripts/extract-ref-facts.mjs:*)]
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# A skill that bets on one delivery channel
|
|
@@ -8,7 +8,7 @@ allowed-tools: [Bash(node .claude/skills/paper-pipeline/scripts/ledger.mjs:*)]
|
|
|
8
8
|
Record the verdict:
|
|
9
9
|
|
|
10
10
|
```
|
|
11
|
-
node .claude/skills/paper-pipeline/scripts/
|
|
11
|
+
node .claude/skills/paper-pipeline/scripts/extract-ref-facts.mjs planted
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
The module lives at `node_modules/research-paper-pipeline/skills/paper-pipeline/scripts/consumer.mjs`.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# paper-status-gates.sh — NOT A HOOK. This is a TOOL invoked by `paper-status-gates.hook.mjs`,
|
|
3
3
|
# which owns the event routing and decides WHICH paper (if any) an edit concerned.
|
|
4
4
|
#
|
|
5
|
-
# --surface <paper-dir> print the readiness verdict
|
|
5
|
+
# --surface <paper-dir> print the readiness verdict and the unrun gates
|
|
6
6
|
#
|
|
7
7
|
# 🔴 WHAT LEFT THIS FILE AND WHY IT MATTERS. It used to read its payload with
|
|
8
8
|
# `INPUT="${CLAUDE_TOOL_INPUT:-}"` plus a `timeout 1 cat` fallback and then grep that blob for a
|
|
@@ -28,22 +28,21 @@ case "$pdir_name" in
|
|
|
28
28
|
esac
|
|
29
29
|
|
|
30
30
|
# ── WHERE THE CONSUMER'S THINGS ARE — READ, NOT ASSUMED ─────────────────────
|
|
31
|
-
#
|
|
32
|
-
# project's root paperlint.json (optional — absent means
|
|
31
|
+
# The papers path comes from the one declaration every other carrier of this package reads, the
|
|
32
|
+
# project's root paperlint.json (optional — absent means the default):
|
|
33
33
|
#
|
|
34
|
-
# { "papersDir": "docs/papers"
|
|
34
|
+
# { "papersDir": "docs/papers" }
|
|
35
35
|
#
|
|
36
36
|
# ⚠️ `node -p` RATHER THAN grep/sed ON THE FILE. A JSON value is not a line of text: it can
|
|
37
37
|
# be quoted, escaped, or spread across lines, and a pattern that gets it right today gets it
|
|
38
38
|
# wrong on the first reformat — silently, by producing a root that matches nothing. Node is
|
|
39
|
-
# already a hard dependency of the
|
|
39
|
+
# already a hard dependency of the hook that runs this script, so there is no new requirement.
|
|
40
40
|
ROOT_DIR="${CLAUDE_PROJECT_DIR:-.}"
|
|
41
41
|
read_key() { # $1 = key, $2 = default
|
|
42
42
|
node -p "((c) => c['$1'] ?? '$2')((() => { try { return require('$ROOT_DIR/paperlint.json') } catch { return {} } })())" \
|
|
43
43
|
2>/dev/null || echo "$2"
|
|
44
44
|
}
|
|
45
45
|
papers_root="$(read_key papersDir papers)"
|
|
46
|
-
scripts_root="$(read_key scripts .claude/skills/paper-pipeline/scripts)"
|
|
47
46
|
|
|
48
47
|
# 🔴 AN UNUSABLE ROOT EXITS, IT DOES NOT BUILD A PATH FROM IT. `node -p` prints `undefined` for a
|
|
49
48
|
# key whose value is literally `null` (`?? ` only catches null/undefined AFTER the object lookup,
|
|
@@ -69,18 +68,9 @@ else
|
|
|
69
68
|
echo " whether this paper is submittable, which is the one question it exists to answer." >&2
|
|
70
69
|
fi
|
|
71
70
|
|
|
72
|
-
|
|
73
|
-
if [ -
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
# only a percentage, unrun gates. Advisory, always exit 0.
|
|
77
|
-
node "$CHECK" "$ROOT_DIR/$pdir" >&2 || true
|
|
78
|
-
else
|
|
79
|
-
# Fallback for a checkout without the skill tree — the old crude surface.
|
|
80
|
-
gates=$(grep -E '☐' "$STATUS" 2>/dev/null | grep -iE 'study-accepted|pc-panel|harden|verify.?citations' || true)
|
|
81
|
-
if [ -n "$gates" ]; then
|
|
82
|
-
echo "⚠️ UNRUN GATES in $pdir/PIPELINE-STATUS.md (☐ — run them, don't 'anti-churn'-skip):" >&2
|
|
83
|
-
echo "$gates" | sed -E 's/\|.*//; s/^\| */ /' >&2
|
|
84
|
-
fi
|
|
71
|
+
gates=$(grep -E '☐' "$STATUS" 2>/dev/null | grep -iE 'study-accepted|pc-panel|harden|verify.?citations' || true)
|
|
72
|
+
if [ -n "$gates" ]; then
|
|
73
|
+
echo "⚠️ UNRUN GATES in $pdir/PIPELINE-STATUS.md (☐ — run them, don't 'anti-churn'-skip):" >&2
|
|
74
|
+
echo "$gates" | sed -E 's/\|.*//; s/^\| */ /' >&2
|
|
85
75
|
fi
|
|
86
76
|
exit 0
|
|
@@ -253,7 +253,7 @@ const loaded = await Promise.all(
|
|
|
253
253
|
);
|
|
254
254
|
check(
|
|
255
255
|
"and the scan found the readers it must find — the skill scripts' keys and PaperlintConfig's",
|
|
256
|
-
["
|
|
256
|
+
["scripts", "timezone", "triggerCases", "papersDir", "rules"].every((k) =>
|
|
257
257
|
readKeys.has(k),
|
|
258
258
|
),
|
|
259
259
|
);
|
package/lib/paper-config.ts
CHANGED
|
@@ -138,11 +138,9 @@ export const SETTINGS_KEYS: Readonly<Record<string, string>> = Object.freeze({
|
|
|
138
138
|
"the venue preset: paperlint:<name> or ./path.jsonc — the pdf/ venue rules, paperlint build",
|
|
139
139
|
kind: "the kind of paper, whose page limit applies — pdf/limits",
|
|
140
140
|
pdf: "where the built PDF is, relative to the paper, when it is not paper.pdf — the facts",
|
|
141
|
-
ledger: "the run ledger — skills/paper-pipeline/scripts/consumer.mjs",
|
|
142
141
|
scripts: "how skill prose names the scripts — consumer.mjs",
|
|
143
|
-
timezone: "
|
|
142
|
+
timezone: "the zone deadline anchors are written in — consumer.mjs",
|
|
144
143
|
contactEmail: "the polite-pool address for citation lookups — consumer.mjs",
|
|
145
|
-
citeChecks: "the consumer's citation checkers — run-mechanical.mjs",
|
|
146
144
|
triggerCases:
|
|
147
145
|
"the consumer's own skill trigger cases — lib/skill-trigger-cases.mjs",
|
|
148
146
|
$comment: "a note for humans (JSON Schema's own comment keyword); ignored",
|
|
@@ -152,10 +150,8 @@ export const SETTINGS_KEYS: Readonly<Record<string, string>> = Object.freeze({
|
|
|
152
150
|
export const ROOT_ONLY_KEYS: readonly string[] = Object.freeze([
|
|
153
151
|
"papersDir",
|
|
154
152
|
"structure",
|
|
155
|
-
"ledger",
|
|
156
153
|
"scripts",
|
|
157
154
|
"timezone",
|
|
158
155
|
"contactEmail",
|
|
159
|
-
"citeChecks",
|
|
160
156
|
"triggerCases",
|
|
161
157
|
]);
|