Standard ·Markdown source ·View on GitHub
Publisle Research profile
Status: Normative for the Publisle Research profile (beta). Profile version: 1; requires Publisle Core document envelope 1 and supported pinned contract digests. Revision: 2026-10-10.
The profile layers on Publisle Core; Core adopters need none of this document's packages. The profile version is a named capability claim, not a new envelope or npm package version; see governance.
The Research profile collects the optional scholarly machinery: bibliography entries and citation checks, citation resolution and journal export, publisher template packages, the pinned compiler toolchain, and the research-paper/scholarly conformance profiles. The profile is optional. Its preparation inspections are policy checks, not requirements for every document; they do not select a citation style, page layout, font, or route. Export behavior follows the explicitly selected Research capabilities.
Adopting the profile means installing @publisle/research, the @publisle/template-* packages, and (for PDF) a TeX toolchain tier (see the engine tiers); none of it enters reader bundles. The Core CLI loads these commands through the optional @publisle/cli-research plugin and reports install guidance when it is absent.
Citations and sections
publisle:bibliography stores optional entries (id, title, authors, raw). raw is opaque source and is kept exactly. The document envelope schema does not give this type its own alternative. The portable applicator refuses more than 16 oneOf branches, which is a validator limit rather than the interoperability rule, so envelope validation preserves the block as an unknown type. Entry shape is checked by the bibliography schema and the authoring parser. The scholarly profile warns by default on duplicate entry ids and on citation ids that have no entry. A host may promote those codes through diagnosticPolicy. Unresolved citations remain in the source and in rendered text. The profile does not format citations.
The scholarly and research-paper profiles ship with @publisle/research, not with the Core @publisle/profiles package. The research-paper profile composes Core accessibility v2 and adds scholarly metadata and abstract checks.
Citation resolution and research export
@publisle/research is tooling. Readers must not import it. resolveDocument links each citation id to the first bibliography entry with that id and formats the citation cluster and the reference list. A missing id is reported as unresolved-citation and is left in the source. Duplicate ids keep the first entry.
Optional entry fields, still schema version 1, are type, issued, containerTitle, volume, issue, page, publisher, doi, and url. raw stays the original source text.
BibTeX import fills those fields and keeps original entries in raw; opaque references remain literal with diagnostics. CSL JSON import also retains complete records for structured names, particles, dates and other citation variables. The pinned citeproc-js processor supplies full CSL formatting with bundled versioned locale resources, history-aware ibid/subsequent forms and revisions to earlier citations during disambiguation. Built-in styles are numeric and author-date; resolveDocument accepts custom styles, locale resources, full items and note indices.
PDF defaults to the Unicode LaTeX article template, requesting PDF/UA-2 tagging on LuaLaTeX. The standard article templates require modern LaTeX for tagging; publisher starters emit pdf-ua-unavailable while class compatibility remains unproven. Compilation records the requested standard and does not imply validation. See the accessibility guide for the required veraPDF fixture gate and overrides. The old synchronous toPdf is deprecated and rejects unsupported characters unless lossy output is explicit. Public templates live in separate article, IEEE, ACM, Elsevier and Springer packages, using @publisle/template-sdk; hosts can supply their own objects or registries. Directory/ZIP submission exports collect sources and assets. JATS packages validate offline against Archiving 1.3; toJats remains a single-article API. Compilation chooses complete native dependencies or an already installed pinned container and never downloads implicitly. DOI/HTTPS acquisition is explicit, cached and separate from export. See research export and migration. Individual journals can require other metadata/templates/files; these starter profiles do not imply universal journal acceptance.
Heading role may be abstract or section. The research-paper profile treats role: abstract as an abstract heading. Other documents may omit both the role and the profile.
Table headerRows says how many leading rows label the columns. When it is omitted, existing tables keep their previous header convention. 0 marks no header row.
Captions, credits, licenses, and figures stay the existing fields. This profile does not copy them into a second metadata model.
Independent citation subset
resolvePortableCitations(document, style, locale) supplies a separate bounded
Research citation role shared with the independent Python implementation. It
returns normalized citation markers, bibliography entries, diagnostics,
classification and explicit capability limits. Built-in numeric and
author-date styles with en-US/fr-FR are supported over the committed corpus.
Unsupported input returns rejected and unsupported-citation-feature, with no
approximate markers or bibliography. Full CSL remains exclusive to the broader
TypeScript API; no general cross-language CSL claim is made. See the
exact subset and gate and the
Python usage guide.
Call this API on structurally validated source. Its feature guard is a citation capability policy, not a replacement for full document/schema validation.
Language, direction, and print
metadata.language is an exact string. metadata.direction and text direction are ltr, rtl, or auto. Unicode is not normalized. The localization profile reports that a host still chooses layout. A host that ignores dir is an explicit limitation, not a successful universal renderer.
The print profile warns by default when a diagram lacks fallback and printFallback, or an embed lacks fallback. It does not paginate. The localization profile reports host-direction-policy at info when direction is present. diagnosticPolicy can map any of these codes to info, warning, or error. Island explanations remain the interactive publication profile's job. The localization and print profiles ship with Core @publisle/profiles; this document records their publishing relevance, not their implementation home.