@open-press/cli 0.7.0 → 0.8.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.
Files changed (132) hide show
  1. package/README.md +6 -1
  2. package/package.json +1 -1
  3. package/template/core/AGENTS.md +126 -0
  4. package/template/core/CHANGELOG.md +65 -0
  5. package/template/core/engine/commands/dev.mjs +2 -2
  6. package/template/core/engine/commands/upgrade.mjs +47 -5
  7. package/template/core/engine/output/chrome-pdf.mjs +18 -3
  8. package/template/core/engine/output/static-server.mjs +39 -0
  9. package/template/core/engine/react/comment-endpoint.mjs +13 -39
  10. package/template/core/engine/react/comment-marker.mjs +30 -6
  11. package/template/core/engine/react/document-entry.mjs +11 -0
  12. package/template/core/engine/react/document-export.mjs +45 -5
  13. package/template/core/engine/react/http-json.mjs +24 -0
  14. package/template/core/engine/react/mdx-compile.mjs +187 -3
  15. package/template/core/engine/react/measurement-css.mjs +93 -1
  16. package/template/core/engine/react/object-entities.mjs +119 -0
  17. package/template/core/engine/react/pipeline/allocate.mjs +10 -7
  18. package/template/core/engine/react/pipeline/frame-measurement.mjs +40 -9
  19. package/template/core/engine/react/project-asset-endpoint.mjs +6 -24
  20. package/template/core/engine/react/source-edit-endpoint.d.mts +10 -0
  21. package/template/core/engine/react/source-edit-endpoint.mjs +75 -0
  22. package/template/core/engine/react/sources/mdx-resolver.mjs +12 -14
  23. package/template/core/engine/react/style-discovery.mjs +1 -4
  24. package/template/core/engine/runtime/file-walk.mjs +22 -0
  25. package/template/core/engine/runtime/inspection.mjs +1 -20
  26. package/template/core/engine/runtime/path-utils.mjs +20 -0
  27. package/template/core/engine/runtime/source-text-tools.d.mts +102 -0
  28. package/template/core/engine/runtime/source-text-tools.mjs +551 -16
  29. package/template/core/engine/runtime/source-workspace.mjs +4 -31
  30. package/template/core/package.json +1 -1
  31. package/template/core/src/main.tsx +2 -2
  32. package/template/core/src/openpress/{App.tsx → app/OpenPressApp.tsx} +25 -12
  33. package/template/core/src/openpress/{renderer.tsx → app/OpenPressRuntime.tsx} +10 -7
  34. package/template/core/src/openpress/app/index.ts +2 -0
  35. package/template/core/src/openpress/core/Frame.tsx +9 -11
  36. package/template/core/src/openpress/core/FrameContext.tsx +8 -3
  37. package/template/core/src/openpress/core/MdxArea.tsx +11 -12
  38. package/template/core/src/openpress/core/cn.ts +4 -0
  39. package/template/core/src/openpress/core/index.tsx +2 -1
  40. package/template/core/src/openpress/core/primitives.tsx +29 -8
  41. package/template/core/src/openpress/core/types.ts +8 -0
  42. package/template/core/src/openpress/{anchorMap.ts → document-model/anchorMapModel.ts} +1 -1
  43. package/template/core/src/openpress/{indexes.ts → document-model/documentIndexes.ts} +1 -1
  44. package/template/core/src/openpress/{types.ts → document-model/documentTypes.ts} +42 -0
  45. package/template/core/src/openpress/document-model/index.ts +6 -0
  46. package/template/core/src/openpress/document-model/objectEntityModel.ts +51 -0
  47. package/template/core/src/openpress/{projectIdentity.ts → document-model/projectIdentityModel.ts} +1 -1
  48. package/template/core/src/openpress/{reactDocumentMetadata.ts → document-model/reactDocumentMetadataModel.ts} +1 -1
  49. package/template/core/src/openpress/manuscript/index.tsx +49 -7
  50. package/template/core/src/openpress/{publicPage.tsx → reader/PublicReaderPage.tsx} +31 -51
  51. package/template/core/src/openpress/{workbenchPanels.tsx → reader/ReaderNavigationPanel.tsx} +6 -5
  52. package/template/core/src/openpress/reader/index.ts +10 -0
  53. package/template/core/src/openpress/reader/pageViewportScaleModel.ts +73 -0
  54. package/template/core/src/openpress/reader/readerTypes.ts +4 -0
  55. package/template/core/src/openpress/reader/usePageViewportScale.ts +119 -0
  56. package/template/core/src/openpress/reader/usePanelState.ts +56 -0
  57. package/template/core/src/openpress/reader/useReaderHashSync.ts +61 -0
  58. package/template/core/src/openpress/reader/useReaderKeyboardNav.ts +48 -0
  59. package/template/core/src/openpress/reader/useReaderRuntime.ts +146 -0
  60. package/template/core/src/openpress/reader/useReaderScrollAnchor.ts +64 -0
  61. package/template/core/src/openpress/shared/Panel.tsx +77 -0
  62. package/template/core/src/openpress/shared/index.ts +4 -0
  63. package/template/core/src/openpress/shared/numberUtils.ts +3 -0
  64. package/template/core/src/openpress/{runtimeMode.ts → shared/runtimeMode.ts} +0 -11
  65. package/template/core/src/openpress/workbench/Workbench.tsx +407 -0
  66. package/template/core/src/openpress/workbench/actions/DeploymentControl.tsx +157 -0
  67. package/template/core/src/openpress/workbench/actions/PageZoomControl.tsx +182 -0
  68. package/template/core/src/openpress/workbench/actions/SearchControl.tsx +345 -0
  69. package/template/core/src/openpress/workbench/actions/deploymentStatusModel.ts +112 -0
  70. package/template/core/src/openpress/workbench/actions/index.ts +5 -0
  71. package/template/core/src/openpress/workbench/actions/useDeploymentWorkbench.ts +136 -0
  72. package/template/core/src/openpress/workbench/dialog/WorkbenchDialog.tsx +72 -0
  73. package/template/core/src/openpress/workbench/dialog/index.ts +1 -0
  74. package/template/core/src/openpress/workbench/document/components/DocumentPanel.tsx +127 -0
  75. package/template/core/src/openpress/workbench/document/components/InlineSourceEditorLayer.tsx +207 -0
  76. package/template/core/src/openpress/workbench/document/components/ReaderStage.tsx +9 -0
  77. package/template/core/src/openpress/workbench/document/hooks/useDocumentWorkbenchModel.ts +34 -0
  78. package/template/core/src/openpress/workbench/document/hooks/useInlineDocumentEditor.ts +525 -0
  79. package/template/core/src/openpress/workbench/document/index.ts +10 -0
  80. package/template/core/src/openpress/workbench/index.ts +2 -0
  81. package/template/core/src/openpress/workbench/inspector/InlineInspectorLayer.tsx +459 -0
  82. package/template/core/src/openpress/workbench/inspector/index.ts +5 -0
  83. package/template/core/src/openpress/workbench/inspector/inlineCommentModel.ts +125 -0
  84. package/template/core/src/openpress/workbench/inspector/inspectorGeometryModel.ts +160 -0
  85. package/template/core/src/openpress/workbench/inspector/inspectorModel.ts +408 -0
  86. package/template/core/src/openpress/workbench/inspector/useInspectorComments.ts +248 -0
  87. package/template/core/src/openpress/workbench/mentions/MentionSuggestionList.tsx +41 -0
  88. package/template/core/src/openpress/workbench/mentions/index.ts +2 -0
  89. package/template/core/src/openpress/{composerMentions.ts → workbench/mentions/useComposerMentions.ts} +1 -4
  90. package/template/core/src/openpress/workbench/panels/Panel.tsx +1 -0
  91. package/template/core/src/openpress/workbench/panels/PendingCommentsPanel.tsx +76 -0
  92. package/template/core/src/openpress/workbench/panels/WorkbenchControlPanel.tsx +29 -0
  93. package/template/core/src/openpress/workbench/panels/index.ts +3 -0
  94. package/template/core/src/openpress/workbench/project/ProjectEntryPanel.tsx +523 -0
  95. package/template/core/src/openpress/workbench/project/ProjectPreviewDialog.tsx +35 -0
  96. package/template/core/src/openpress/workbench/project/index.ts +2 -0
  97. package/template/core/src/openpress/workbench/project/projectPreviewTypes.ts +11 -0
  98. package/template/core/src/openpress/workbench/shell/WorkbenchShell.tsx +167 -0
  99. package/template/core/src/openpress/workbench/shell/index.ts +1 -0
  100. package/template/core/src/openpress/workbench/workbenchFormatters.ts +120 -0
  101. package/template/core/src/openpress/workbench/workbenchTypes.ts +35 -0
  102. package/template/core/src/styles/openpress/print-route.css +0 -2
  103. package/template/core/src/styles/openpress/{project-workspace.css → project-preview-panel.css} +13 -407
  104. package/template/core/src/styles/openpress/public-viewer.css +25 -320
  105. package/template/core/src/styles/openpress/reader-runtime.css +243 -55
  106. package/template/core/src/styles/openpress/responsive.css +145 -270
  107. package/template/core/src/styles/openpress/workbench-panels.css +214 -178
  108. package/template/core/src/styles/openpress/workbench.css +986 -451
  109. package/template/core/src/styles/openpress.css +1 -1
  110. package/template/core/vite.config.ts +50 -0
  111. package/template/packs/academic-paper/document/chapters/01-introduction/content/01-introduction.mdx +26 -12
  112. package/template/packs/academic-paper/document/chapters/02-methods/content/01-methods.mdx +37 -17
  113. package/template/packs/academic-paper/document/chapters/03-results-and-discussion/content/01-results.mdx +34 -16
  114. package/template/packs/academic-paper/document/chapters/04-acknowledgment/content/01-acknowledgment.mdx +22 -8
  115. package/template/packs/academic-paper/document/chapters/05-references/content/01-references.mdx +20 -15
  116. package/template/packs/academic-paper/document/components/Page.tsx +26 -3
  117. package/template/packs/academic-paper/document/index.tsx +51 -59
  118. package/template/packs/academic-paper/document/media/figure-placeholder.svg +9 -0
  119. package/template/packs/academic-paper/document/theme/base/page-contract.css +30 -13
  120. package/template/packs/academic-paper/document/theme/base/typography.css +30 -33
  121. package/template/packs/academic-paper/document/theme/page-surfaces/cover.css +74 -47
  122. package/template/core/src/openpress/inspector.ts +0 -282
  123. package/template/core/src/openpress/projectWorkspace.tsx +0 -919
  124. package/template/core/src/openpress/readerRuntime.ts +0 -230
  125. package/template/core/src/openpress/workbench.tsx +0 -1265
  126. package/template/core/src/openpress/workbenchTypes.ts +0 -4
  127. /package/template/core/src/openpress/{readerPageRegistry.ts → reader/readerPageRegistry.ts} +0 -0
  128. /package/template/core/src/openpress/{pageRoute.ts → reader/readerPageRoute.ts} +0 -0
  129. /package/template/core/src/openpress/{readerScroll.ts → reader/readerScroll.ts} +0 -0
  130. /package/template/core/src/openpress/{readerState.ts → reader/readerStateModel.ts} +0 -0
  131. /package/template/core/src/openpress/{frameScheduler.ts → shared/frameScheduler.ts} +0 -0
  132. /package/template/core/src/openpress/{projectSources.ts → workbench/project/projectSourceModel.ts} +0 -0
@@ -6,7 +6,7 @@
6
6
  @import "./openpress/app-shell.css";
7
7
  @import "./openpress/workbench.css";
8
8
  @import "./openpress/workbench-panels.css";
9
- @import "./openpress/project-workspace.css";
9
+ @import "./openpress/project-preview-panel.css";
10
10
  @import "./openpress/media-workspace.css";
11
11
  @import "./openpress/reader-runtime.css";
12
12
  @import "./openpress/public-viewer.css";
@@ -6,8 +6,10 @@ import type { IncomingMessage, ServerResponse } from "node:http";
6
6
  import { defineConfig } from "vite";
7
7
  import react from "@vitejs/plugin-react";
8
8
  import { loadConfig, publicPdfHref } from "./engine/runtime/config.mjs";
9
+ import { searchSourceText } from "./engine/runtime/source-text-tools.mjs";
9
10
  import { handleCommentRequest } from "./engine/react/comment-endpoint.mjs";
10
11
  import { handleProjectAssetRequest } from "./engine/react/project-asset-endpoint.mjs";
12
+ import { handleSourceEditRequest } from "./engine/react/source-edit-endpoint.mjs";
11
13
 
12
14
  const frameworkRoot = fileURLToPath(new URL("./", import.meta.url));
13
15
  const workspaceRoot = process.env.OPENPRESS_WORKSPACE_ROOT
@@ -53,6 +55,7 @@ const workspaceDefines = {
53
55
 
54
56
  export default defineConfig({
55
57
  base: "./",
58
+ cacheDir: path.join(workspaceRoot, ".openpress", "vite-client"),
56
59
  plugins: [openpressLocalDeployPlugin(), react()],
57
60
  define: workspaceDefines,
58
61
  resolve: {
@@ -68,6 +71,17 @@ export default defineConfig({
68
71
  ...workspaceAliases,
69
72
  },
70
73
  },
74
+ optimizeDeps: {
75
+ include: [
76
+ "@mdx-js/react",
77
+ "lucide-react",
78
+ "react",
79
+ "react-dom",
80
+ "react-dom/client",
81
+ "react/jsx-dev-runtime",
82
+ "react/jsx-runtime",
83
+ ],
84
+ },
71
85
  build: {
72
86
  outDir: outputDir,
73
87
  emptyOutDir: true,
@@ -108,6 +122,12 @@ function openpressLocalDeployPlugin() {
108
122
  server.middlewares.use("/__openpress/status", (req, res) => {
109
123
  void handleLocalStatusRequest(req, res);
110
124
  });
125
+ server.middlewares.use("/__openpress/search", (req, res) => {
126
+ void handleLocalSearchRequest(req, res);
127
+ });
128
+ server.middlewares.use("/__openpress/source-edit", (req, res) => {
129
+ void handleSourceEditRequest(req, res, { root: workspaceRoot });
130
+ });
111
131
  server.middlewares.use("/__openpress/deploy", (req, res) => {
112
132
  void handleLocalDeployRequest(req, res);
113
133
  });
@@ -267,6 +287,32 @@ async function handleLocalStatusRequest(req: IncomingMessage, res: ServerRespons
267
287
  });
268
288
  }
269
289
 
290
+ async function handleLocalSearchRequest(req: IncomingMessage, res: ServerResponse) {
291
+ if (req.method !== "GET") {
292
+ writeJson(res, 405, { ok: false, message: "Search endpoint requires GET." });
293
+ return;
294
+ }
295
+
296
+ const requestUrl = new URL(req.url ?? "/", "http://localhost");
297
+ const query = (requestUrl.searchParams.get("q") ?? "").trim();
298
+ if (!query) {
299
+ writeJson(res, 400, { ok: false, message: "Search query is required." });
300
+ return;
301
+ }
302
+
303
+ try {
304
+ const report = await searchSourceText({
305
+ config: openpressConfig,
306
+ query,
307
+ scope: searchScopeFrom(requestUrl.searchParams),
308
+ caseSensitive: requestUrl.searchParams.get("caseSensitive") === "true",
309
+ });
310
+ writeJson(res, 200, { ok: true, ...report });
311
+ } catch (error) {
312
+ writeJson(res, 500, { ok: false, message: error instanceof Error ? error.message : String(error) });
313
+ }
314
+ }
315
+
270
316
  async function handleLocalDeployRequest(req: IncomingMessage, res: ServerResponse) {
271
317
  if (req.method !== "POST") {
272
318
  writeJson(res, 405, { ok: false, message: "Deploy endpoint requires POST." });
@@ -368,6 +414,10 @@ function localDeploySetupMessage() {
368
414
  return `Deployment adapter \`${openpressConfig.deploy.adapter}\` is not configured.`;
369
415
  }
370
416
 
417
+ function searchScopeFrom(searchParams: URLSearchParams) {
418
+ return searchParams.get("scope") === "all" ? "all" : "content";
419
+ }
420
+
371
421
  async function fileExists(filePath: string) {
372
422
  try {
373
423
  await fs.access(filePath);
@@ -1,21 +1,35 @@
1
1
  ## Introduction
2
2
 
3
- This document is a model and starting point for an academic paper drafted in open-press. The structure follows the IEEE conference template conventions where they make sense for screen-first reading: numbered sections, italic sub-sections, an abstract block, and a numbered references list. The two-column body of IEEEtran is not yet supported — single-column will land as the v0.8 paged.js migration arrives.
3
+ The purpose of this paper template is to provide a compact, readable structure for a
4
+ machine-learning research manuscript written in a formal journal style.
4
5
 
5
- Use this pack for **drafting, iteration, and preprint distribution**. When the paper is ready for venue submission, export the prose into the publisher's required LaTeX class (`IEEEtran`, `acmart`, etc.). The pack does not replace LaTeX for camera-ready submission; it replaces the awkward iteration loop *before* submission.
6
+ ### Background and Motivation
6
7
 
7
- ### Where to start
8
+ Recent studies have shown that modern experiments produce larger datasets and richer
9
+ artifact pipelines, but the writing process is often bottlenecked by repeated formatting
10
+ adjustments. A lightweight drafting layer can decouple scientific reasoning from
11
+ typesetting concerns and let the author focus on experimental validity first.
8
12
 
9
- Each chapter directory under `document/chapters/` is one paper section:
13
+ ### Problem Statement
10
14
 
11
- - `01-introduction/` motivate the work, state the contribution, summarise the structure.
12
- - `02-methods/` describe what you did, with enough detail to reproduce.
13
- - `03-results-and-discussion/` present results with figures and tables; interpret what they mean.
14
- - `04-acknowledgment/` acknowledge funding, collaborators, reviewers.
15
- - `05-references/` — numbered `[1]`, `[2]` references.
15
+ The key challenge addressed in this draft is to keep the manuscript internally
16
+ consistent while moving from scratch notes to a submission-ready narrative. The
17
+ workflow should preserve section hierarchy, citation order, and figure/table integrity
18
+ without requiring manual renumbering.
16
19
 
17
- Replace each chapter's MDX content with your own. The skeleton text below each `##` heading is illustrative — overwrite it.
20
+ ### Contribution
18
21
 
19
- ### Abstract and Index Terms
22
+ This demo paper includes the following contributions:
20
23
 
21
- Edit the abstract and index terms inside `document/index.tsx` (the `cover` JSX export). They render on the title page above the body. Keep the abstract under 250 words and avoid abbreviations, symbols, or math in it.
24
+ - A reproducible chapter flow (`Introduction Methods Results and Discussion
25
+ Conclusion`),
26
+ - Consistent heading levels for major and minor sections,
27
+ - Placeholder media and tables that can be swapped with real results,
28
+ - A reference block and placeholder metadata for a clean handoff to final publication
29
+ tooling.
30
+
31
+ ### Paper Organization
32
+
33
+ The paper is organized as follows: Section 2 details the methodology,
34
+ Section 3 reports results and discusses representative scenarios,
35
+ Section 4 summarizes conclusions and practical recommendations.
@@ -1,30 +1,50 @@
1
1
  ## Methods
2
2
 
3
- Describe the materials, instruments, datasets, models, or procedures you used. Anyone familiar with the field should be able to reproduce your work from this section.
3
+ This section describes a hypothetical experimental design suitable for an applied
4
+ machine-learning paper.
4
5
 
5
- ### Apparatus and Materials
6
+ ### Data and Problem Setup
6
7
 
7
- Specify hardware, software versions, datasets, and any pre-processing. Cite reused work using `[N]` numeric references (e.g. "we trained the encoder following the procedure of [3]").
8
+ We assume a synthetic dataset with 3,200 anonymized samples collected under three
9
+ operational conditions. Each sample includes paired feature vectors, timestamped
10
+ metadata, and a binary outcome label. The baseline split is 70/15/15 for training,
11
+ validation, and held-out test sets.
8
12
 
9
- ### Procedure
13
+ ### Core Pipeline
10
14
 
11
- Describe the experimental procedure as steps a reader could follow:
15
+ The pipeline has three stages:
12
16
 
13
- 1. State the input data and pre-processing.
14
- 2. State the model / algorithm / instrument settings.
15
- 3. State the evaluation metric(s) and any held-out splits.
16
- 4. State randomness control (seeds, repeats, confidence reporting).
17
+ 1. **Preprocessing**: normalization, missing-value handling, and feature screening.
18
+ 2. **Modeling**: training a compact baseline model and a comparison ablation set.
19
+ 3. **Evaluation**: calibration-aware scoring and bootstrapped confidence intervals.
17
20
 
18
- ### Notation
21
+ For this draft, preprocessing includes clipping extreme values and aligning all
22
+ continuous fields to SI-style unit notation.
19
23
 
20
- Define notation early. Italicise Roman symbols for quantities and variables, but not Greek symbols. Use a long dash rather than a hyphen for a minus sign. Number equations consecutively:
24
+ ### Equations
21
25
 
22
- $$a + b = \gamma \tag{1}$$
26
+ The main objective is written as:
23
27
 
24
- Refer to equations by `(1)`, not `Eq. (1)` or `equation (1)`, except at the start of a sentence: "Equation (1) shows ...".
28
+ $$
29
+ \mathcal{L}(\theta) = \sum_{i=1}^{N}\left(\hat{y}_{i}(\theta)-y_{i}\right)^2
30
+ $$
25
31
 
26
- ### Reporting Units
32
+ where $\theta$ are trainable parameters and the objective is minimized on the
33
+ training subset.
27
34
 
28
- - Use SI (MKS) as primary units; English units only as secondary (in parentheses).
29
- - Don't mix complete spellings and abbreviations: "Wb/m²" or "webers per square meter", not "webers/m²".
30
- - Use a zero before decimal points: `0.25`, not `.25`.
35
+ ### Evaluation Protocol
36
+
37
+ Model quality is measured by macro-averaged F1, AUROC, and an uncertainty-aware
38
+ calibration score. Reproducibility is ensured by fixing the random seed and logging
39
+ all preprocessing parameters.
40
+
41
+ ### Implementation Notes
42
+
43
+ - All runs were executed on a dual-socket compute node with two GPUs.
44
+ - Checkpoints were stored every 5 epochs.
45
+ - Logging followed a single JSON schema shared across all experiments.
46
+
47
+ ### Validation and Quality Control
48
+
49
+ Validation is automated through a script that checks missing captions, file path
50
+ consistency, and reference formatting before final export.
@@ -1,29 +1,47 @@
1
1
  ## Results and Discussion
2
2
 
3
- Present the findings of your study, then interpret what they mean for the research question stated in the introduction.
3
+ ### Benchmark Results
4
4
 
5
- ### Quantitative Results
5
+ The synthetic experiment yields a consistent improvement trend across three datasets.
6
+ Performance gains are modest but stable after hyperparameter tuning.
6
7
 
7
- Use a table to summarise results across conditions. Caption above the table.
8
+ | Metric | Baseline | Proposed | Improvement |
9
+ | --- | --- | --- | --- |
10
+ | Macro-F1 | 0.61 | 0.67 | +9.8% |
11
+ | AUROC | 0.74 | 0.81 | +9.5% |
12
+ | Calibration Error | 0.082 | 0.043 | -47.6% |
8
13
 
9
- <TableCaption>Sample comparison of conditions.</TableCaption>
14
+ The proposed model retains a similar variance profile while improving score
15
+ stability in low-sample conditions.
10
16
 
11
- | Condition | Metric A | Metric B | Notes |
12
- | --- | --- | --- | --- |
13
- | Baseline | 0.71 | 0.65 | Prior work [3] |
14
- | Ours (v1) | 0.78 | 0.69 | This work |
15
- | Ours (v2) | **0.83** | **0.72** | Best |
17
+ ### Representative Visualization
18
+
19
+ <img
20
+ src="media/figure-placeholder.svg"
21
+ alt="Example of a figure placeholder"
22
+ style={{ maxWidth: "420px", width: "100%", height: "auto" }}
23
+ />
24
+
25
+ Figure 1. Example of a result trend visualization (placeholder image).
26
+
27
+ ### Error Analysis
16
28
 
17
- Cite figures and tables in the text the first time they appear: "Fig. 1 shows the architecture", "Table I summarises the conditions". Use `Fig.` even at the start of a sentence; spell out `Figure` only when it is the subject.
29
+ Some error cases cluster around edge classes with incomplete metadata. These cases
30
+ benefit from better augmentation and a revised class-balanced loss.
18
31
 
19
- ### Qualitative Discussion
32
+ ### Sensitivity Study
20
33
 
21
- Discuss what the results mean. State the limitations honestly — if the experiment doesn't cover a case you'd like to claim, say so. Avoid the word "essentially" when you mean "approximately" or "effectively".
34
+ - Training set size below 40% causes a steeper drop in recall.
35
+ - Early stopping thresholds above 3 epochs reduce overfitting in our setting.
36
+ - Calibrated post-processing improves confidence robustness.
22
37
 
23
- ### Threats to Validity
38
+ ### Discussion
24
39
 
25
- Briefly list what could invalidate the results: small sample size, single dataset, environmental drift, evaluator bias, etc. Reviewers will look for this section; pre-empt it.
40
+ The most practical takeaway is that small engineering changes in preprocessing and
41
+ evaluation discipline can produce measurable gains even when architecture changes are
42
+ minimal.
26
43
 
27
- ### Future Work
44
+ ### Limitations
28
45
 
29
- Indicate where the work goes next. Keep this to one short paragraph — over-claiming future scope hurts more than it helps in review.
46
+ This section reports synthetic results only; real-world deployment would require
47
+ cross-domain validation, privacy checks, and a stronger external benchmark suite.
@@ -1,12 +1,26 @@
1
- ## Acknowledgment
1
+ ## Conclusions
2
2
 
3
- The preferred American spelling is *acknowledgment* without an "e" after the "g". Avoid stilted constructions like "one of us (R. B. G.) thanks ...". Prefer "R. B. G. thanks ...".
3
+ This template run shows that a simple methodology with consistent evaluation
4
+ accounting can achieve reliable gains without dramatic architectural complexity.
4
5
 
5
- Acknowledge:
6
+ ### Key Takeaways
6
7
 
7
- - Funding sources (with grant numbers if applicable).
8
- - Collaborators who contributed materially but are not listed as authors.
9
- - Anonymous reviewers whose comments improved the paper.
10
- - Institutional or computational resources.
8
+ - Keep preprocessing and metric reporting deterministic.
9
+ - Use a calibrated validation protocol before reporting final headline scores.
10
+ - Reserve model complexity for problems that cannot be solved with better data
11
+ discipline.
11
12
 
12
- Place sponsor acknowledgments in the unnumbered footnote on the first page of the published version. In this draft pack, keep them here until you migrate to a publisher's class file at submission time.
13
+ ### Practical Recommendations
14
+
15
+ Authors are encouraged to replace each placeholder paragraph with real study details,
16
+ including hardware, code provenance, and full reproducibility statements.
17
+
18
+ ### Limitations and Future Work
19
+
20
+ The current draft is synthetic; external generalization remains to be demonstrated.
21
+ Future work should add domain transfer tests and a public benchmark release.
22
+
23
+ ### Acknowledgments
24
+
25
+ We thank the hypothetical reviewers and platform contributors who would have reviewed
26
+ this draft in a real submission round.
@@ -1,27 +1,32 @@
1
1
  ## References
2
2
 
3
- Number citations consecutively within square brackets `[1]`. Sentence punctuation follows the bracket. Refer simply to the reference number, as in `[3]` — do not use `Ref. [3]` or `reference [3]` except at the start of a sentence: "Reference [3] was the first ...".
4
-
5
- Unless there are six authors or more, give all authors' names; do not use `et al.`. Papers not yet published should be cited as *unpublished*; accepted but not yet published as *in press*. Capitalize only the first word in a paper title, except for proper nouns and element symbols.
6
-
7
- For papers published in translation journals, give the English citation first, followed by the original foreign-language citation.
3
+ Please number references consecutively within brackets `[1]`.
4
+ Sentence punctuation follows the bracketed number.
8
5
 
9
6
  ---
10
7
 
11
- [1] G. Eason, B. Noble, and I. N. Sneddon, "On certain integrals of Lipschitz–Hankel type involving products of Bessel functions," *Phil. Trans. Roy. Soc. London*, vol. A247, pp. 529–551, April 1955.
8
+ [1] G. Eason, B. Noble, and I. N. Sneddon, On certain integrals of
9
+ Lipschitz-Hankel type involving products of Bessel functions,” *Phil. Trans. Roy.
10
+ Soc. London*, vol. A247, pp. 529–551, April 1955.
12
11
 
13
- [2] J. Clerk Maxwell, *A Treatise on Electricity and Magnetism*, 3rd ed., vol. 2. Oxford: Clarendon, 1892, pp. 68–73.
12
+ [2] J. Clerk Maxwell, *A Treatise on Electricity and Magnetism*, 3rd ed., vol. 2.
13
+ Oxford: Clarendon, 1892, pp. 68–73.
14
14
 
15
- [3] I. S. Jacobs and C. P. Bean, "Fine particles, thin films and exchange anisotropy," in *Magnetism*, vol. III, G. T. Rado and H. Suhl, Eds. New York: Academic, 1963, pp. 271–350.
15
+ [3] I. S. Jacobs and C. P. Bean, Fine particles, thin films and exchange anisotropy,”
16
+ in *Magnetism*, vol. III, G. T. Rado and H. Suhl, Eds. New York: Academic,
17
+ 1963, pp. 271–350.
16
18
 
17
- [4] K. Elissa, "Title of paper if known," unpublished.
19
+ [4] K. Elissa, Title of paper if known,” unpublished.
18
20
 
19
- [5] R. Nicole, "Title of paper with only first word capitalized," *J. Name Stand. Abbrev.*, in press.
21
+ [5] R. Nicole, Title of paper with only first word capitalized,” *J. Name Stand.
22
+ Abbrev.*, in press.
20
23
 
21
- [6] Y. Yorozu, M. Hirano, K. Oka, and Y. Tagawa, "Electron spectroscopy studies on magneto-optical media and plastic substrate interface," *IEEE Transl. J. Magn. Japan*, vol. 2, pp. 740–741, August 1987.
24
+ [6] Y. Yorozu, M. Hirano, K. Oka, and Y. Tagawa, Electron spectroscopy studies
25
+ on magneto-optical media and plastic substrate interface,” *IEEE Trans. J. Magn.
26
+ Japan*, vol. 2, pp. 740–741, August 1987.
22
27
 
23
- [7] M. Young, *The Technical Writer's Handbook*. Mill Valley, CA: University Science, 1989.
24
-
25
- ---
28
+ [7] M. Young, *The Technical Writer&apos;s Handbook*. Mill Valley, CA: University
29
+ Science, 1989.
26
30
 
27
- > **Reminder**: replace the seven placeholder references above with your own bibliography before circulating the draft. They are the IEEE conference template's example citations and have nothing to do with your paper.
31
+ > Open-press is used for iteration. Remove all template placeholder text and replace
32
+ > references before submission.
@@ -1,5 +1,6 @@
1
1
  import { Frame, MdxArea } from "@open-press/core";
2
2
  import type { SectionsPageProps } from "@open-press/core/manuscript";
3
+ import { useEffect, useRef } from "react";
3
4
 
4
5
  export default function Page({
5
6
  frameKey,
@@ -10,6 +11,25 @@ export default function Page({
10
11
  sectionTitle,
11
12
  sectionTone,
12
13
  }: SectionsPageProps) {
14
+ const pageBodyRef = useRef<HTMLElement | null>(null);
15
+
16
+ const runningHeader =
17
+ "This is a non-peer reviewed Express letter submitted to J SEDI";
18
+ const runningRight = "Your short title goes here";
19
+
20
+ useEffect(() => {
21
+ const area = pageBodyRef.current?.querySelector(".openpress-mdx-area");
22
+ if (!area) return;
23
+
24
+ area.querySelectorAll<HTMLElement>("h2[data-chapter]").forEach((heading) => {
25
+ const chapterValue = heading.getAttribute("data-chapter");
26
+ if (!chapterValue) return;
27
+ if (!/^\d+$/.test(chapterValue)) return;
28
+ const normalized = String(Number.parseInt(chapterValue, 10));
29
+ heading.setAttribute("data-chapter", normalized);
30
+ });
31
+ }, [chainId]);
32
+
13
33
  return (
14
34
  <Frame
15
35
  frameKey={frameKey}
@@ -21,9 +41,12 @@ export default function Page({
21
41
  data-chapter-tone={sectionTone}
22
42
  >
23
43
  <div className="page-frame">
24
- <header className="page-header" aria-hidden="true" />
25
- <main className="page-body">
26
- <MdxArea chainId={chainId} />
44
+ <header className="page-header" aria-hidden="true">
45
+ <span className="running-head-left">{runningHeader}</span>
46
+ <span className="running-head-right">{runningRight}</span>
47
+ </header>
48
+ <main className="page-body" ref={pageBodyRef}>
49
+ <MdxArea chainId={chainId} overflow="extend" />
27
50
  </main>
28
51
  <footer className="page-footer" aria-hidden="true">
29
52
  <span className="footer-left">{sectionTitle}</span>
@@ -1,13 +1,13 @@
1
1
  import { Frame, Press } from "@open-press/core";
2
2
  import type { Manifest } from "@open-press/core";
3
3
  import { mdxSource } from "@open-press/core/mdx";
4
- import { Sections, Toc } from "@open-press/core/manuscript";
4
+ import { Sections } from "@open-press/core/manuscript";
5
5
  import Page from "./components/Page";
6
6
 
7
7
  export const config: Manifest = {
8
- title: "Paper Title",
9
- subtitle: "An academic-paper draft built with open-press",
10
- organization: "Department · Institution",
8
+ title: "Your article title goes here",
9
+ subtitle: "This is a non-peer reviewed Express letter submitted to J SEDI",
10
+ organization: "open-press · academic-paper",
11
11
  sourceDir: "chapters",
12
12
  mediaDir: "media",
13
13
  themeDir: "theme",
@@ -31,10 +31,6 @@ export const sources = {
31
31
  story: mdxSource({ preset: "section-folders", root: "chapters" }),
32
32
  };
33
33
 
34
- /**
35
- * The cover renders the academic title block: paper title, author grid,
36
- * abstract band, and index terms. Replace the placeholders with your own.
37
- */
38
34
  function Cover() {
39
35
  return (
40
36
  <Frame
@@ -46,74 +42,72 @@ function Cover() {
46
42
  aria-labelledby="paper-title"
47
43
  >
48
44
  <div className="paper-cover">
45
+ <p className="paper-cover-date">May 18, 2026 – This is a non-peer reviewed Express letter submitted to J SEDI</p>
46
+ <p className="paper-cover-lead">This is a non-peer reviewed Express letter submitted to J SEDI</p>
47
+ <p className="paper-cover-short-title">Your short title goes here</p>
49
48
  <h1 id="paper-title" className="paper-title">
50
- Conference Paper Title
49
+ Your article title goes here
50
+ <sup>*</sup>
51
51
  </h1>
52
- <p className="paper-subtitle">
53
- Sub-title (optional). Not captured by indexing services like IEEE Xplore.
52
+ <p className="paper-author-contact-note">
53
+ <span aria-hidden="true">∗</span> Corresponding author:
54
+ firstauthor@university.jp
54
55
  </p>
55
56
 
56
- <ol className="paper-authors" aria-label="Authors">
57
+ <p className="paper-author-line" aria-label="Authors">
58
+ Name Firstauthor<sup>1</sup>, Name Secondauthor<sup>2</sup>, Name
59
+ Thirdauthor<sup>1,3</sup>
60
+ </p>
61
+
62
+ <ol className="paper-author-affiliations" aria-label="Author affiliations">
57
63
  <li className="paper-author">
58
- <p className="paper-author-name">First Author Surname</p>
59
- <p className="paper-author-affiliation">dept. of organization</p>
60
- <p className="paper-author-affiliation">name of organization</p>
61
- <p className="paper-author-location">City, Country</p>
62
- <p className="paper-author-contact">email or ORCID</p>
64
+ <p className="paper-author-affiliation">
65
+ 1 Department of Earth Sciences, A University, City, Country
66
+ </p>
63
67
  </li>
64
68
  <li className="paper-author">
65
- <p className="paper-author-name">Second Author Surname</p>
66
- <p className="paper-author-affiliation">dept. of organization</p>
67
- <p className="paper-author-affiliation">name of organization</p>
68
- <p className="paper-author-location">City, Country</p>
69
- <p className="paper-author-contact">email or ORCID</p>
69
+ <p className="paper-author-affiliation">
70
+ 2 School of Earth Sciences, Another University, City, Country
71
+ </p>
70
72
  </li>
71
73
  <li className="paper-author">
72
- <p className="paper-author-name">Third Author Surname</p>
73
- <p className="paper-author-affiliation">dept. of organization</p>
74
- <p className="paper-author-affiliation">name of organization</p>
75
- <p className="paper-author-location">City, Country</p>
76
- <p className="paper-author-contact">email or ORCID</p>
74
+ <p className="paper-author-affiliation">
75
+ 3 Center for Studying Cool Things, University of X, City, Country
76
+ </p>
77
77
  </li>
78
78
  </ol>
79
79
 
80
- <section className="paper-abstract" aria-label="Abstract">
80
+ <section className="paper-contributions" aria-label="Author contributions">
81
+ <p>
82
+ <span className="paper-section-label">Author contributions:</span>{" "}
83
+ Conceptualization: Name Firstauthor, Name Thirdauthor. Formal
84
+ Analysis: Name Firstauthor, Name Secondauthor.
85
+ </p>
81
86
  <p>
82
- <span className="paper-abstract-label">Abstract</span>—This document
83
- is a model and starting point for an academic paper drafted in
84
- open-press. Replace this abstract with your own — keep it under
85
- 250 words. Do not use abbreviations, symbols, footnotes, or math
86
- in the abstract.
87
+ <span className="paper-section-label">Writing - Original draft:</span>{" "}
88
+ Name Firstauthor.{" "}
89
+ <span className="paper-section-label">
90
+ Writing - Review &amp; Editing:
91
+ </span>{" "}
92
+ Name Firstauthor, Name Secondauthor, Name Thirdauthor.
87
93
  </p>
88
94
  </section>
89
95
 
90
- <section className="paper-index-terms" aria-label="Index terms">
96
+ <section className="paper-abstract" aria-label="Abstract">
91
97
  <p>
92
- <span className="paper-abstract-label">Index Terms</span>—keyword
93
- one, keyword two, keyword three, keyword four
98
+ <span className="paper-abstract-label">Abstract</span> The text for the
99
+ first abstract goes here. This should be in English, no longer than
100
+ 200 words, and should not include references.
94
101
  </p>
95
102
  </section>
96
- </div>
97
- </Frame>
98
- );
99
- }
100
103
 
101
- function BackCover() {
102
- return (
103
- <Frame
104
- frameKey="back-cover"
105
- role="manuscript.back-cover"
106
- chrome={false}
107
- className="reader-page--back-cover"
108
- data-page-title="Back cover"
109
- >
110
- <div className="paper-back-cover">
111
- <p className="paper-back-kicker">open-press · academic-paper</p>
112
- <p className="paper-back-statement">
113
- Draft built with open-press. When the paper is ready for submission,
114
- port the prose into the publisher's LaTeX class (IEEEtran, acmart,
115
- etc.). open-press is the iteration loop, not the camera-ready output.
116
- </p>
104
+ <section className="paper-nontechnical-summary" aria-label="Non-technical summary">
105
+ <p>
106
+ <span className="paper-abstract-label">Non-technical summary</span> The
107
+ text for the non-technical summary goes here. Again, no longer than
108
+ 200 words, no reference.
109
+ </p>
110
+ </section>
117
111
  </div>
118
112
  </Frame>
119
113
  );
@@ -121,11 +115,9 @@ function BackCover() {
121
115
 
122
116
  export default function AcademicPaperPress() {
123
117
  return (
124
- <Press>
118
+ <Press>
125
119
  <Cover />
126
- <Toc source="story" heading={<h2 id="toc-title" className="toc-heading">Contents</h2>} />
127
120
  <Sections source="story" page={Page} />
128
- <BackCover />
129
121
  </Press>
130
122
  );
131
123
  }
@@ -0,0 +1,9 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="900" height="540" viewBox="0 0 900 540" role="img" aria-labelledby="title desc">
2
+ <title id="title">Figure placeholder</title>
3
+ <desc id="desc">Simple figure placeholder graphic with gray border and label</desc>
4
+ <rect width="100%" height="100%" fill="#f3f4f6"/>
5
+ <rect x="24" y="24" width="852" height="492" fill="none" stroke="#9ca3af" stroke-width="4" stroke-dasharray="18 12" rx="8" />
6
+ <text x="50%" y="50%" fill="#4b5563" font-size="44" font-family="Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif" text-anchor="middle" dominant-baseline="middle">
7
+ Example Figure Placeholder
8
+ </text>
9
+ </svg>