Ugrás a fő tartalomhoz

OMI Studio 1.0 Target Architecture

Állapot: javasolt 1.0 célarchitektúra, döntésre előkészítve
Audit időpontja: 2026-09-19
Elsődleges implementációs alap: open-manuscript-studio/main @ eca2cf45762116e1c00a89b3397840ed89109511
Kapcsolódó források: omi @ e2f421707f1154c0ed30cb7750e0689a837e9b0a; omi-ojs-plugin @ 6c0842fc1ce6c4a1ea75f7b27660af8011be303b; omi-omp-plugin @ 4f7a2c0a2f29f68e3ad05ac73ca7652bc6410ac7

1. Vezetői döntés

Az Open Manuscript Studio 1.0-nak nem új alkalmazásként, hanem a jelenlegi működő rendszer köré felépített, explicit contractokkal stabilizált architektúraként kell létrejönnie. A kód jelentős része használható: különösen a Tiptap-alapú szerkesztő, a tanulmányonkénti progressive mounting, a versioning szemantikája, a biztonságos OMI-konténer olvasó, a publikációs build/provenance logika, a DOCX/JATS/HTML feldolgozás, a cloud-storage adapterek, a Tauri shell, valamint az OJS/OMP pluginok szerveroldali jogosultság-ellenőrzése.

A legfontosabb 1.0 előtti változtatás nem ezek újraírása, hanem öt jelenlegi határ kijavítása:

  1. Az OMI-SPEC-320 szerinti formátum legyen tényleges, futásidőben validált interoperabilitási contract. A Studio jelenleg 0.1-es envelope-ot ír, miközben az OMI repository 0.2.0-s specifikációt és sémát tartalmaz; a Studio vendorizált src/schemas/omi-manuscript-0.2.json fájlja üres.
  2. A Tiptap/ProseMirror JSON kerüljön az editor-adapter mögé. Jelenleg az OmiBlock.content mezőben stringgé alakítva portable domain-adatként viselkedik, és sok exporter/importer közvetlenül értelmezi.
  3. A use-case-ek kerüljenek ki a React/Zustand rétegből. A jelenlegi useStudioStore.ts egyszerre domain aggregate, alkalmazási service, editor session és UI state.
  4. Az identity, review és connector authority legyen explicit. A két Prisma adatbázis, az account–agent kapcsolat és az OJS/OMP writeback jelenleg működik, de részben duplikált és nem alkot egyetlen tranzakciós modellt.
  5. Az 1.0 release gate-ek ugyanazon RC commiton, path filter nélkül fussanak; a zöld általános build jelenleg nem bizonyít OMI schema-conformance-t vagy minden platform/integráció aktuális állapotát.

2. Kiindulási bizonyíték és értelmezési szabály

Az elemzésben az implementáció volt az elsődleges technikai bizonyíték. A specifikáció normatív kívánt állapotként, a teszt pedig igazolt viselkedésként szerepel. Ha ezek eltérnek, az eltérést külön jelöltük; a működő kódot nem minősítettük automatikusan hibának.

Fő bizonyítékok:

  • OMI envelope és domain aggregate: src/types/omi.ts, src/document/createBlankManuscript.ts, src/services/exportOmi.ts.
  • Editor-adatfolyam: src/components/BlockEditor.tsx, src/editor/continuousManuscriptDocument.ts, src/editor/progressiveStudyMounting.ts, src/editor/blockFocusRegistry.ts.
  • Állapot és use-case-ek: src/app/useStudioStore.ts, src/app/*Actions.ts, src/app/lastSessionPersistence.ts.
  • Verziózás: src/model/versioning.ts, src/model/workingState.ts, src/model/revisionIntegrity.ts.
  • OMI container: src/services/omiContainer.ts, src/services/omiContainerImport.ts, src/services/simpleZip.ts.
  • Publication: src/model/publicationBuild.ts, src/model/publicationRendering.ts, src/model/publicationProfile.ts, src/services/publicationBuildManifest.ts, src/services/publicationArtifact.ts, a src/services/export*.ts modulok.
  • Backend: server/src/app.ts, server/src/routes/*, server/src/services/*, server/prisma/schema.prisma, server/prisma/identity/schema.prisma.
  • OJS/OMP: a Studio server/src/integrations/ojs/* és omp/* moduljai, valamint a két PKP plugin route/controller/service rétege.
  • Normatív formátum: OMI docs/specifications/file-format.md, static/schemas/omi-manuscript-0.2.schema.json, tests/file-format/*.
  • Release evidence: Studio .github/workflows/*, tests/*, e2e/*; OMI .github/workflows/website-build.yml.

3. Célarchitektúra és dependency direction

flowchart TB
UI["UI: React + Zustand projections"]
Platform["Platform adapters: Web / Tauri / Mobile"]
Connectors["Integration and delivery adapters"]
Editor["Editor adapter: Tiptap runtime"]
App["Application core: commands, queries, policies"]
Domain["OMI domain + portable format contracts"]
Infra["Persistence, renderers, server repositories"]

UI --> App
UI --> Editor
Platform --> App
Connectors --> App
Editor --> App
Infra --> App
App --> Domain
Editor --> Domain

Az ábra nyilai függőségi irányt jelentenek. A core portokat definiál, az adapterek implementálják őket. A domain nem importál Reactet, Tiptapot, Zustandot, Tauri API-t, Prisma klienst, OJS/OMP DTO-t vagy hálózati klienst.

3.1 Javasolt modulstruktúra

Az első 1.0 refaktor alatt nem szükséges monorepo-package-ekre bontani a projektet. A következő könyvtárhatárok már ugyanabban a repositoryban enforce-olhatók ESLint/import-boundary szabályokkal:

src/
core/
omi/
format/ envelope, schema negotiation, extensions
manuscript/ aggregate, structure, blocks, metadata
identity/ agents, contributions, evidence references
annotations/ annotations, notes, anchors, cross-references
references/ citations, bibliography, CSL-neutral records
assets/ asset identity and metadata, not storage
history/ revisions, changes, checkpoints, corrections
proofing/ tracked changes and proofing semantics
review/ publishing-system-neutral review model
application/
documents/ create, open, validate, save, close, recover
editing/ document commands and semantic change recording
history/ checkpoint, revision, revert, projection
import/ importer registry and orchestration
export/ renderer/export registry and delivery
publishing/ builds, validation, provenance, submission
review/ assignment workspace and writeback orchestration
references/ lookup and synchronization
identity/ account-agent linking use cases
ports/ persistence, clock, crypto, storage, connector ports
editor-tiptap/
codec/ OMI content <-> ProseMirror conversion
runtime/ editor instances, focus, selection, undo
extensions/ current Tiptap extensions
mounting/ study lifecycle and progressive mounting
adapters/
persistence/ IndexedDB, native file, OMI container, server
platform/ web, Tauri, Android, Apple
renderers/ JATS, HTML, DOCX, EPUB, LaTeX, PDF, DTP
importers/ OMI, DOCX, PDF, HTML, table, media, references
connectors/ OJS, OMP, Zotero, Mendeley, DeepL, AI
api/ HTTP clients and transport DTO mapping
ui/
state/ Zustand projections/session state
components/ React
server/
api/v1/ stable transport contracts and routes
application/ server use cases
domain/ server-side review/identity/integration policies
adapters/ Prisma, PKP clients, render processes, crypto

A könyvtárak célállapotot jelentenek, nem egyetlen mechanikus move PR-t. A migráció során re-export shim tarthatja életben a jelenlegi importokat.

3.2 Enforce-olt szabályok

RétegImportálhatNem importálhat
core/omiszabványos TS utility, tiszta validation primitivesReact, Tiptap, Zustand, Tauri, fetch, Prisma, OJS/OMP
core/reviewaz OMI core publikus típusainak minimális részhalmazaconnector DTO, UI, Prisma
applicationcore és saját portokReact komponens, konkrét platform/storage/provider
editor-tiptapcore + application command/query APIZustand store belső state, persistence adapter
adaptersapplication portok + core wire contractmás adapter konkrét implementációja, kivéve composition root
uiapplication facade, editor facade, view-model storePrisma, file parser, exporter belső modell
server/apiserver application facade + transport schemaközvetlen Prisma művelet route handlerből

4. OMI Core

4.1 Határ és tartalom

Az OMI Core a kézirat jelentését és hordozható reprezentációját birtokolja. Ide tartozik:

  • manuscript envelope és dokumentumtípus;
  • volume/study/section/block struktúra, stabil azonosítók és sorrend;
  • scholarly agents és contribution attribution;
  • bibliográfiai és lokális metadata;
  • annotation, note, citation, bibliography, anchor és cross-reference;
  • asset reference, checksum, media type és szemantikai szerep;
  • history/revision szemantika, checkpoint és publication correction;
  • tracked change/proofing hordozható része;
  • namespaced extension adatok és feature/profile deklaráció.

Nem tartozik ide:

  • ProseMirror node/mark neve vagy position;
  • editor instance, selection, focus, undo stack, viewport/mount state;
  • lokális fájlútvonal, browser file handle, cloud object ID;
  • account session, OAuth token, OJS/OMP workflow state;
  • publication CSS, font telepítési útvonal, UI panel state;
  • Prisma rekord vagy API transport wrapper.

4.2 Jelenlegi fájlok elhelyezése

Jelenlegi terület1.0 helyMegjegyzés
src/types/omi.tstöbb core/omi/* modulSPLIT; az aggregate, identity, references, assets és history ne egy fájlban legyen
src/model/identity.ts, contributorName.tscore/omi/identityA scholarly agent marad accountfüggetlen
src/model/citations.ts, citationClusters.ts, cslRendering.tscore/omi/references, illetve renderer adapterA CSL rendering nem domain-logika
src/model/notes.ts, noteCitations.ts, namedAnchors.ts, crossReferences.tscore/omi/annotationsStabil anchor contract szükséges
src/model/assets.ts, src/services/assetRepository.tsasset domain + persistence adapterA metadata és a byte-store szétválik
src/model/versioning.ts, workingState.tscore/omi/history + application historyA szemantika megtartható; a tárolás port mögé kerül
src/model/proofing.tscore/omi/proofingA string-offset és teljes before/after payload átalakítandó
src/model/publicationProfile.ts, publicationParagraphStyles.tsapplication/publishing vagy renderer contractNem OMI manuscript domain
üres src/model/content.ts, annotations.ts, manuscript.ts, contributors.tseltávolítás re-export shim utánNem lehetnek látszólagos domain entry pointok implementáció nélkül

4.3 OMI-SPEC-320 contract és verziópolitika

Az interoperabilitási szerződés három külön verzióvonalat használ:

VerzióHordozóJelentés
OMI file-format versionomi.versionA JSON envelope és a kötelező wire-vocabulary verziója
Exact schema identitytop-level schema URIA konkrét JSON Schema dokumentum azonosítója
Container versioncontainer manifestA ZIP csomagolás, pathok, checksumok és entry-szabályok verziója
Application/generator versionprovenance/generatorMely Studio/renderer készítette az adatot; nem kompatibilitási séma
Manuscript revisionmanuscript/history version/revision IDA dokumentum tartalmi állapota; nem file-format verzió

Döntés: nem kell új schemaVersion mező. A schema URI és az omi.version együtt elegendő és szemantikailag tiszta. Egy harmadik, ugyanazt jelentő mező driftet hozna létre. Nyitáskor ellenőrizni kell, hogy a kettő konzisztens-e.

Source of truth: a normatív JSON Schema az omi repository kiadott, immutable artifactja. A Studio:

  1. checksum szerint rögzíti és vendorolja a sémát;
  2. ebből generálja a wire TypeScript típusokat vagy codecet;
  3. külön tartja a gazdagabb domain típusokat és invariantokat;
  4. CI-ben összeveti a rögzített URI-t, verziót és checksumot;
  5. ugyanazokat a conformance fixture-öket futtatja, mint az OMI repository.

A JSON Schema önmagában nem elég minden szemantikai invariant kifejezésére. A validation kétlépcsős: schema validation + domain invariant validation.

4.4 Validációs pontok

flowchart LR
Bytes["Untrusted bytes"] --> Envelope["Envelope + version gate"]
Envelope --> Schema["JSON Schema"]
Schema --> Invariants["Domain invariants"]
Invariants --> Draft["Editable aggregate"]
Draft --> SaveGate["Pre-save validation"]
SaveGate --> Artifact["Atomic write / export"]
  • Open/import előtt: byte- és depth-limit, biztonságos JSON parsing, envelope és verzióbesorolás.
  • Editable állapot előtt: exact schema validation, domain invariant, referential integrity, asset manifest ellenőrzés.
  • Command után: olcsó lokális invariant; teljes validáció nem szükséges minden billentyűnél.
  • Checkpoint/save/export/submission előtt: teljes validation és diagnosztika. Hibás state nem írható felül ugyanarra a fájlra.
  • Container restore esetén: először container biztonság/integritás, utána a benne lévő OMI validation.
  • Server API boundaryn: transport schema, authorization, majd domain mapping és invariant.

4.5 Kompatibilitási mátrix

BemenetMegnyitásSzerkesztésFelülírásEljárás
Első fagyasztott stabil generáció, támogatott verzióigenigenvalidáció utánnormál
Azonos major, ismert későbbi minor, explicit forward-policyveligenpolicy szerintcsak lossless bizonyítás utáncapability + unknown-preservation ellenőrzés
Azonos major, újabb minor policy nélkülkarantén/read-onlynemnemraw export vagy Save As támogatott célba, loss reporttal
Újabb majorkarantén/read-onlynemnemsoha nem csendes downgrade/felülírás
Régebbi stabil verzió, létező explicit migrationneligenmigráció utánúj célverziókéntpontos from -> to migráció és report
Pre-stable kísérleti Studio-formátumbest-effort egyszeri import vagy elutasításcsak sikeres import utánúj stabil fájlbanincs általános migration framework
Ismeretlen/hibás envelopenemnemnemdiagnosztika + raw recovery

Az első stabil generációtól kezdve minden breaking változáshoz explicit, fixture-rel tesztelt fromVersion -> toVersion migráció kell. A migrációk nem láncolhatók implicit módon korlátlanul; az orchestrator ismert, auditált lépéssort állít össze.

4.6 Unknown extensions és lossless round-trip

  • Az OMI saját jövőbeli mezőit és a vendor extensionöket külön kell kezelni.
  • A szabványos extension point egy namespaced extensions map legyen, amelynek payloadját a core parse nélkül is megőrzi.
  • Az ismert extension codec validálhat és értelmezhet, de a raw payload hashét meg kell őriznie; sikertelen értelmezés nem jelent automatikus adateldobást.
  • Forward-minor fájl csak akkor szerkeszthető, ha a compatibility policy kimondja, hogy az ismeretlen core mezők megőrizhetők. Ellenkező esetben read-only.
  • Normalizáló serializer nem rendezheti vagy írhatja át az ismeretlen payload szemantikáját. A JSON whitespace és object-key sorrend nem garantált; szemantikai losslessness igen.
  • Exportkor a diagnosztika külön jelzi az unchanged, normalized, downgraded, dropped és externalized eredményt.

5. Editor Engine

5.1 Tiptap szerepe

Tiptap maradjon az 1.0 editor runtime. A jelenlegi kód bizonyítja, hogy a rich-text editing, semantic marks, citation/note/xref node-ok, continuous editing és study lifecycle erre stabilizálható. Tiptap azonban adapter, nem a portable manuscript wire model.

A célhatár:

Portable OMI content tree
⇅ ContentCodec (versioned, tested, loss-reporting)
ProseMirror document / Tiptap extensions
⇅ EditorSession
React view + runtime-only state

Az első átmeneti ContentCodec olvashatja a jelenlegi stringgé alakított Tiptap JSON-t, hogy ne legyen flag-day rewrite. Ezután a callsite-ok átállnak a codec API-ra. Csak ezt követően változik a portable representation a SPEC-100-ban rögzített OMI content AST-re.

5.2 Portable és runtime-only adat

Portable OMIRuntime-only
stabil block/section/study/volume IDTiptap Editor instance
szemantikai block type és content treeProseMirror transaction és plugin state
inline emphasis, language, link, semantic marksselection/head/anchor position
citation/note/xref/asset ID-kfocus registry és active toolbar state
list/table/equation struktúraviewport, IntersectionObserver, mounted editor set
tracked change szemantika, author/evidence hivatkozáslocal undo/redo stack
annotation anchor, ha stabil domain anchordecoration és search highlight cache

5.3 Study lifecycle és nagy dokumentumok

A continuousManuscriptDocument.ts tanulmányonkénti ProseMirror dokumentuma és a progressiveStudyMounting.ts küszöb-alapú mountolása jó 1.0 alap. Megtartandó:

  • egy editor host per study;
  • stabil OMI ID-k a projectionben;
  • viewporthoz közeli mount és távoli unmount;
  • fókusz-registry mint runtime service;
  • globális szerkesztési sorrend külön domain helperként.

Harden követelmények:

  • 500k szavas synthetic fixture-en bounded editor count és memóriabudget;
  • selection megőrzése mount/unmount és tab restore alatt;
  • cross-study paste/cut atomikus domain commandként;
  • virtualizált outline/search result;
  • parse/cache invalidation dokumentum-revision és codec-version alapján;
  • background import/render Workerben, cancel/progress backpressure-rel.

5.4 Undo/redo és revision history

Az editor undo nem azonos a revision historyval:

  • Undo/redo: session-local, nagy gyakoriságú, ProseMirror tranzakciók; nem interoperabilitási ígéret.
  • Working changes: szemantikai application commandok, dirty-state és checkpoint előkészítés.
  • Revision: tartós, azonosított, validált commit author/time/message/provenance adatokkal.
  • Publication correction: kiadott artifacthoz kapcsolódó, auditálható domain esemény; nem egyszerű undo.

Undo után létrejövő új state checkpointolható, de az undo stack nem kerül az OMI fájlba. Revision revert új revisiont készít; nem törli a történelmet.

6. Application Core

6.1 Use-case katalógus

Bounded contextParancsok/use-case-ek
Documentscreate, open, validate, save, Save As, close, recover, import study
Editingadd/move/delete study/volume/section/block, apply semantic change
Historycheckpoint, commit revision, revert, integrity verify, prune/externalize cache
Importprobe, import, review diagnostics/loss, commit imported draft
Exportselect renderer, build context, render, validate, deliver
Publishingresolve profile, reproducible build, sign/hash, submit/transfer
Reviewcreate anonymous projection, open workspace, save attachment/form, submit recommendation, write back
Referenceslookup, import interchange, synchronize Zotero/Mendeley, reconcile conflicts
Identitylink verified account evidence to scholarly agent; never implicit merge
Integrationauthorize scoped execution, minimize payload, execute, audit, apply suggestion

6.2 Command/query contract

Az application core nem igényel teljes CQRS infrastruktúrát. Egy vékony command/query facade elegendő:

type CommandResult<T> = {
value?: T;
diagnostics: Diagnostic[];
events: DomainEvent[];
changedRevision?: RevisionId;
};

interface DocumentApplication {
open(source: DocumentSource, options: OpenOptions): Promise<OpenResult>;
execute(command: ManuscriptCommand, expectedRevision: RevisionId): Promise<CommandResult<ManuscriptView>>;
checkpoint(request: CheckpointRequest): Promise<CheckpointResult>;
save(target: DocumentTarget, options: SaveOptions): Promise<SaveResult>;
}

Minden mutáció optimistic concurrency preconditiont (expectedRevision vagy digest) kap. A facade eseményt ad a Zustand projectionnek; a React komponens nem ír közvetlenül domain aggregate-et.

6.3 Miért nem elég kisebb módosítás?

A useStudioStore.ts több mint ezer sorban összeköti a state ownershipot és a use-case-eket, míg az app/*Actions.ts modulok gyakran közvetlen set/get callbacket és store-típust kapnak. Egy-egy action tisztítása nem oldja fel ezt a fordított függést. Ugyanakkor teljes state rewrite sem szükséges: először a facade ugyanazokat a jelenlegi pure model functionöket hívja, majd Zustand actionönként delegál az új use-case-re. A store végig működő compatibility facade marad.

7. State Management és ownership

State osztályTulajdonosÉlettartamPéldák
Portable domain stateOMI aggregate/application document sessionmentésig és revisionigmanuscript, structure, agents, notes, citations, asset refs
Durable historyRevisionRepositorydokumentum élettartamarevisions, parent, digest, change set/snapshot
Editor runtimeEditorSessionmount/sessionTiptap editor, selection, undo, focus
UI stateZustand view-modelablak/tab/sessionpanel, dialog, selected tree item, zoom
Account/sessionauth session servicelogin/sessionuser projection, role claims; token nem általános store-ban
Persistence stateDocumentSessionnyitott dokumentumopaque location, dirty, last saved digest, recovery status
Transient cachecache serviceeldobhatórendered citation, search index, parsed PM doc, thumbnails

Zustand 1.0-ban UI/session projection. Domain object olvasható snapshotként jelenhet meg benne átmenetileg, de mutáció csak application commandon keresztül történik. A jelenlegi 2,5 másodperces automatikus checkpoint timer egyetlen scheduler service-be kerül; komponens/action nem indít párhuzamos timerláncot.

A src/store/workspaceStore.ts és src/model/workspace.ts alpha együttműködési/workspace modellje nem látszik az aktív UI főútvonalának. 1.0 core-ba nem olvasztandó; usage-bizonyítás után eltávolítandó vagy post-1.0 kísérletként izolálandó.

8. Persistence és authority

8.1 Adattulajdonosi mátrix

AdatAuthoritative rendszerCache/projectionMegjegyzés
Portable manuscript current statemegnyitott OMI working document; mentéskor OMI file/containerIndexedDB recovery, Zustand viewA cloud provider csak byte-store
Revision historydokumentumhoz kötött RevisionRepositoryin-memory index; opcionális container entriesNem az editor undo stack
Native working file locationplatform DocumentLocationsession metadataNem portable és nem modulglobális path
OMI container manifest/assetscontainer artifactlocal extraction cacheManifest checksumok authoritative-ok az artifactban
Server manuscript snapshotadott server workflow explicit snapshotjakliens sessionNem írja felül automatikusan a lokális dokumentumot
Account/authidentity databasemain DB StudioPrincipal projection, client sessionJelszó/provider/session csak identity DB
Scholarly agent/contributionmanuscript OMIaccount-agent link evidenceAccount és agent nem azonos automatikusan
Institution/membership/adminidentity databaseauthorization claim cacheExpiry/revocation ellenőrzéssel
Integration credentialsencrypted credential repositoryrövid életű access token cacheNem manuscript és nem localStorage
Review assignment/workflowStudio review DB vagy külső PKP, a forrás szerintassignment-scoped workspace snapshotOJS/OMP workflow mindig PKP authoritative
Publication system stateOJS/OMPconnector receipt/statusStudio csak idempotens writebackot kér
Publication profileversioned profile repository/document build inputUI draftNem implicit manuscript domain extension

8.2 Portok

interface ManuscriptRepository {
load(location: DocumentLocation): Promise<LoadedDocument>;
saveAtomic(location: DocumentLocation, bytes: AsyncIterable<Uint8Array>, precondition: SavePrecondition): Promise<SaveReceipt>;
}

interface RevisionRepository {
getHead(documentId: DocumentId): Promise<RevisionRecord | null>;
commit(commit: RevisionCommit): Promise<RevisionRecord>;
materialize(revisionId: RevisionId): Promise<OmiManuscript>;
verify(documentId: DocumentId): Promise<IntegrityReport>;
}

interface AssetByteStore {
put(stream: AsyncIterable<Uint8Array>, expected?: AssetDigest): Promise<AssetReceipt>;
get(digest: AssetDigest): Promise<AsyncIterable<Uint8Array>>;
}

Native mentésnél temp file + flush/fsync ahol támogatott + atomic replace + előző jó példány/recovery journal kell. Browseren File System Access API vagy explicit download receipt; Android SAF/Apple security-scoped bookmark adapter ugyanazt a portot valósítja meg.

8.3 History tárolás

A jelenlegi immutable, lineáris revision szemantika megtartható. A teljes snapshot minden revisionnél és a teljes history egyidejű Zustand/IndexedDB/file tárolása nagy dokumentumnál O(revision × document-size) kockázat. A cél content-addressed snapshot + opcionális delta/checkpoint kombináció, de ezt csak benchmark után kell bekapcsolni. A repository contract lehetővé teszi, hogy az első implementáció továbbra is teljes snapshot legyen.

9. Egységes import/export architektúra

9.1 Közös import contract

interface Importer {
readonly descriptor: ImporterDescriptor;
probe(source: ImportSource, signal: AbortSignal): Promise<ProbeResult>;
import(source: ImportSource, context: ImportContext): Promise<ImportResult>;
}

type ImportResult = {
draft?: OmiManuscriptDraft;
assets: ImportedAsset[];
diagnostics: Diagnostic[];
fidelity: FidelityReport;
provenance: ImportProvenance;
};

ImporterDescriptor deklarálja a MIME/ext/signature támogatást, random-access igényt, streaming képességet, max feature szintet, platform követelményt és kimeneti OMI profile-t. A probe nem módosít state-et. Az import draft csak explicit review/commit után kerül a dokumentumba.

9.2 Közös renderer/exporter contract

interface Renderer {
readonly descriptor: RendererDescriptor;
render(request: RenderRequest, context: RenderExecutionContext): Promise<RenderResult>;
}

type RenderResult = {
artifacts: PublicationArtifact[];
diagnostics: Diagnostic[];
fidelity: FidelityReport;
validation: ValidationReport[];
provenance: RenderProvenance;
};

interface ArtifactDeliveryPort {
deliver(artifacts: PublicationArtifact[], target: DeliveryTarget): Promise<DeliveryReceipt>;
}

A renderer byte artifactot gyárt; nem nyit file pickert és nem hív saveAs. A delivery adapter kezeli a browser downloadot, native Save Ast, Android SAF-et, Apple Filest, cloud object store-t vagy connector transfert.

9.3 Egységes diagnosztika és loss report

Diagnostic kötelező mezői: stabil code, severity (info|warning|error|fatal), phase, source location/object ID, recoverable flag, human message key, strukturált details. Kéziratszöveg és lokális path alapértelmezésben nem logolható.

FidelityItem: semantic path/feature, source representation, target capability, outcome (preserved|normalized|approximated|externalized|dropped|blocked), severity, workaround. A UI ezt jeleníti meg, de a report az application contract része.

9.4 Formátumok 1.0-beli besorolása

Formátum1.0 architekturális státuszMegjegyzés
OMI JSON/containerstabil contractschema/container freeze és conformance után
DOCX import/exportstabilizálhatóerős implementáció és fixture-bázis; fidelity contract kell
PDF importbest-effort importexplicit loss report; nem garantált szemantikai round-trip
HTML import/clipboardstabilizálható subsetsanitization és remote-resource tiltás
spreadsheet/table, imagestabilizálható importerasset externalization és limit
MusicXMLpreview→stable evidence szerintsemantic fixture-ek
MIDIjelenleg hibás routea parser létezik, de .mid/.midi nem jut el hozzá az outer extension check miatt
RIS/BibTeX/CSL-JSONstabilizálhatóreference normalization és provenance
JATS, HTML exportlegjobb stabil jelöltekerős tesztek; exact schema/profile gate
print PDFstabil jelöltpinned Vivliostyle/font környezet és vizuális regression kell
interactive PDFkülön capability/profilene legyen implicit print PDF ígéret
EPUB/LaTeXpreview, amíg fidelity corpus nem teljescontract már wrapperrel stabilizálható
IDML/XPress/MIF/Scribus1.0 preview vagy defer stable guaranteea kód megtartandó; smoke/shape teszt nem elég kompatibilitási garanciához

9.5 Streaming és nagy fájl

Az interface Blob, ReadableStream, AsyncIterable<Uint8Array> és szükség esetén temp/spool handle forrást fogad. A ZIP/DOCX jelenlegi bufferelése kezdetben adapteren belül maradhat, de deklarálnia kell requiresRandomAccess és méretlimit képességét. Minden hosszú művelet kap abort signal, progress event, memory/disk budget és deterministic cleanup viselkedést.

10. Publication architecture

10.1 Végleges pipeline

flowchart LR
OMI["Validated committed OMI"] --> Context["Rendering context"]
Context --> Profile["Versioned profile + resources"]
Profile --> Renderer["Pinned renderer"]
Renderer --> Validator["Target validators"]
Validator --> Artifact["Artifact set"]
Artifact --> Evidence["Manifest, hash, signature"]

A javasolt pipeline megfelelő 1.0 alap, két pontosítással:

  1. A bemenet csak validált, committed revision lehet; working state publikációja tiltott vagy egyértelműen draft artifact.
  2. Validáció kell a rendering előtt és után. A renderer nem validátorhelyettesítő.

10.2 Contractok

  • RenderingContext: immutable manuscript projection, resolved locale, cross-reference map, bibliography view, asset resolver, font/resource manifest, current revision digest. Nem tartalmaz raw Tiptap stringet.
  • PublicationProfile: profile ID/version, supported document kinds, paragraph/character style mapping, page geometry, author-name typography, target-specific policy és validation profile.
  • RendererDescriptor: renderer ID/version/build digest, input OMI profile range, output MIME/profile, deterministic settings, platform dependency.
  • PublicationArtifact: logical role, media type, bytes handle, SHA-256, size, validation receipts.
  • BuildManifest: input revision digest, exact schema/container/profile/renderer/validator/font/resource versions, parameters, environment facts, artifact hashes.
  • SignatureEvidence: a manifest és pontos artifact byte digest aláírása; a kulcs/evidence nem kerül ad hoc módon a manuscript rootba.

10.3 Publisher profile és stílus

A jelenlegi publication profile/paragraph style/publisher CSS implementáció gazdag és megtartandó, de a src/model/publicationProfile.ts által végzett OMI module augmentation rossz ownershipot jelez. A profile külön verziózott build input. A manuscript legfeljebb profile reference-t vagy portable intentet hordozhat; a konkrét CSS, font fallback és page rule a publishing context része.

Author-name typography szemantikai bemenete a structured contributor name; a renderer felelős a sorrendért, inicializálásért, small capsért, locale-ért és target kimenetért. A renderelt string nem írható vissza author identityként.

10.4 Reprodukálhatóság

  • Semantic reproducibility: ugyanazok a fejezetek, hivatkozások, tördelési intentek és output-struktúra.
  • Byte reproducibility: azonos byte hash. Csak pinned renderer, fontok, timezone/locale, resource és deterministic metadata esetén ígérhető.

A manifest jelzi, melyik szint teljesült. Font substitution, network resource, aktuális dátum vagy platform printer eltérés build warning vagy blocker a profile szerint.

11. Publishing System Connector API

11.1 Közös capability contract

interface PublishingSystemConnector {
discoverCapabilities(endpoint: ConnectorEndpoint): Promise<ConnectorCapabilities>;
redeemLaunch(assertion: SignedLaunchAssertion): Promise<ScopedConnectorSession>;
readSubmission(ref: ExternalSubmissionRef): Promise<SubmissionSnapshot>;
readMetadata(ref: ExternalSubmissionRef): Promise<MetadataSnapshot>;
readContributors(ref: ExternalSubmissionRef): Promise<ContributorSnapshot>;
listFiles(ref: ExternalSubmissionRef, scope: FileScope): Promise<ExternalFile[]>;
readReviewAssignment(ref: ExternalAssignmentRef): Promise<ReviewAssignmentSnapshot>;
readReviewForm(ref: ExternalAssignmentRef): Promise<ReviewFormDefinition>;
saveReviewForm(input: ReviewFormResponse, key: IdempotencyKey): Promise<WritebackReceipt>;
uploadRevision(input: RevisionUpload, key: IdempotencyKey): Promise<WritebackReceipt>;
uploadReviewAttachment(input: AttachmentUpload, key: IdempotencyKey): Promise<WritebackReceipt>;
submitRecommendation(input: RecommendationSubmission, key: IdempotencyKey): Promise<WritebackReceipt>;
transferArtifact(input: ArtifactTransfer, key: IdempotencyKey): Promise<WritebackReceipt>;
returnToWorkflow(session: ScopedConnectorSession): Promise<ReturnTarget>;
}

Minden hívás scoped grantet, külső resource referenciát, idempotency keyt és strukturált diagnosztikát használ. A capability discovery a omi-integration/1 közös profile-ját és vendor profile extensiont ad vissza.

11.2 Közös és specifikus részek

KözösOJS-specifikusOMP-specifikus
signed launch, nonce, expiry, scopesjournal/article/galley fogalmakmonograph/chapter/publication format/proof
submission metadata/contributors/filesOJS recommendation/version különbségekstage file és review round association
review assignment/form/resultOJS workflow route mappingchapter-szintű reviewer confinement
revision/attachment uploadOJS publication artifact targetOMP native reviewer/author context
artifact transfer és receiptjournal return URLspress/catalog return URLs

A Studio jelenlegi OJS/OMP clientjei adapterként maradnak. A közös DTO-k egyetlen schema package-ből generálódnak, és ugyanazokat a contract fixture-öket futtatják a két PKP plugin ellen.

11.3 Authority és writeback

OJS/OMP authoritative a submission, review round, reviewer assignment, recommendation, editor workflow és publication state tekintetében. A Studio assignment-scoped cache/workspace, nem workflow master.

Külső writeback nem lehet ugyanabban az ACID tranzakcióban a lokális DB-vel. A cél durable outbox/idempotent saga:

  1. lokális review/submission állapot tranzakcióban rögzül;
  2. outbox esemény ugyanabban a tranzakcióban létrejön;
  3. worker idempotens connector hívást végez;
  4. receipt és external version mentődik;
  5. retry/pending/failed állapot látható; a scholarly submissiont nem „rollbackeljük” memóriában.

12. Peer-review architecture

flowchart TB
Source["Committed manuscript"] --> Projection["Server-side anonymous projection"]
Projection --> Workspace["Assignment-scoped reviewer workspace"]
Workspace --> Result["Form, attachment, recommendation"]
Result --> Visibility["Visibility policy"]
Visibility --> Connector["Idempotent writeback"]

12.1 Domain objektumok

  • ReviewAssignment: subject reference, reviewer principal pseudonym, round, deadlines, permissions, authority source.
  • ReviewRound: immutable round identity és status transition policy.
  • AnonymousManuscriptProjection: source revision digest, projection policy version, removed/transformed field report.
  • ReviewerWorkspace: assignment-scoped notes, draft form, attachments, saved revision.
  • ReviewFormDefinition/Response: kérdés, típus, visibility és required policy.
  • Recommendation: controlled vocabulary + external mapping.
  • VisibilityPolicy: reviewer/editor/author visibility; field-szintű és transition-függő.
  • WritebackReceipt: external IDs, version, digest, accepted time, idempotency key.

12.2 Double-blind security boundary

A jelenlegi reviewManuscriptService.ts szerveroldali, allowlistes article projectionje jó alap. 1.0-ban a projection csak validált committed snapshotból készül, és kötelezően eltávolítja/transzformálja:

  • agent/contribution/contact/provider identifier adatokat;
  • acknowledgements/funding/conflict mezőket profile policy szerint;
  • provenance/generator history azon részeit, amelyek identitást árulnak el;
  • asset filename, EXIF/XMP és embedded author metadata;
  • külső URL-ek tracking/query adatait;
  • document properties és attachment metadata;
  • cross-reference vagy bibliography mezőket, ha az anonymity policy szerint önazonosítóak.

Az assetek új assignment-scoped azonosítót kapnak. SVG csak sanitization/rasterization után jelenhet meg. A projection store, cache és endpoint no-store/szigorú authorization policyt használ. A kliens nem kérheti „author data nélkül” flaggel ugyanazt a teljes payloadot: a szerver választ projectiont a grantből.

13. Identity architecture

Hat külön fogalom:

FogalomPéldaAuthority
Account identityStudio user UUID, recovery statusidentity DB
Authentication-provider identitylocal credential, ORCID OIDC, Google, Microsoft, institutional OIDC subjectidentity DB
Scholarly agent identityOMI agent, ORCID/ROR evidencemanuscript/agent registry
Institutional membershipinstitution, role, validityidentity DB/institution authority
Contributor attributionagent–work role/order/contributionmanuscript OMI
Publication identity evidenceverified signature/attestation/keyevidence store + artifact manifest

Authorization külön policy, amely account principal + memberships + assignment/connector grants alapján dönt. Egy account nem válik automatikusan azonos scholarly agentté azonos email vagy beírt ORCID alapján. A link explicit, bizonyítékkal és visszavonási állapottal készül; a manuscript attribution ettől függetlenül portable marad.

A jelenlegi identity Prisma schema legyen account/auth/institution authority. A main schema duplikált User, UserIdentity, UserSession modelljeit nem kell egyszerre törölni: először a studioPrincipalBridge.ts által létrehozott rekordot nevezzük és használjuk explicit StudioPrincipal projectionként; az új write-ok az identity DB-be mennek, az olvasás fokozatosan áll át. Kereszt-adatbázis művelethez idempotens ensure + reconciliation/outbox kell, nem látszólagos cross-DB tranzakció.

Browser auth maradhat HttpOnly/SameSite cookie. Native bearer token nem maradhat localStorage-ban; platform SecureStorage adapteren keresztül Keychain/Keystore/credential vault tárolás kell.

14. Integration és plugin architecture

14.1 Fogalmak

  • Connector: provider-specifikus protokoll adapter.
  • Credential: titkos, rotálható, provider/account/installáció scope-ú adat.
  • Capability: deklarált művelet, például reference.read, translation.execute, review.write.
  • ExecutionGrant: actor + connector + document/revision + purpose + data scope + capability + confidentiality + expiry + single-use/idempotency.
  • Execution: izolált kérés minimális payload-dal, limit/timeout/cancel mellett.
  • AuditEvent: ki, mikor, mely providert, milyen scope-pal, milyen input/output digesttel hívott.

14.2 Permission policy

Default deny. Egy integration nem kap automatikusan teljes manuscript-hozzáférést. A scope lehet selection, block set, metadata subset, bibliography, public manuscript projection vagy review-confidential projection. Review-confidential adat csak szerver által megállapított assignment/grant alapján mehet ki; kliensoldali boolean nem authority.

AI/DeepL output alapértelmezésben suggestion, amelyet a user application commanddal fogad el. Közvetlen domain mutation külön capability és policy, de 1.0-ban nem szükséges engedélyezni. Zotero/Mendeley read/sync reference scope-ot kap; ORCID identity evidence scope-ot; storage provider kizárólag encrypted byte object scope-ot.

A jelenlegi extension registry csak manifest/endpoint regiszter. Általános harmadik fél kód runtime/sandbox nincs. Az 1.0 ne állítsa, hogy tetszőleges executable plugin támogatott; built-in, review-olt connector adapterek legyenek stable, általános plugin runtime post-1.0.

15. Storage és cross-platform adapterek

15.1 Egységes storage modell

DocumentLocation opaque, platform-specifikus handle; nem string path a domainben. Adapterek:

  • BrowserFileAdapter: File System Access API vagy download/upload fallback;
  • NativeFileAdapter: Windows/Linux/macOS filesystem és atomic replace;
  • AndroidSafAdapter: content URI + persistable permission;
  • AppleFilesAdapter: security-scoped URL/bookmark;
  • SyncFolderAdapter: a platform által szinkronizált lokális mappa, normál file semantics;
  • RemoteObjectStoreAdapter: WebDAV/Nextcloud, Dropbox, OneDrive/SharePoint, Google Drive;
  • ContainerRepositoryAdapter: OMI container byte stream és manifest.

A cloud provider nem értelmezi vagy módosítja a manuscriptot. Upload/download után a Studio ugyanazon schema/container validatoron halad át. Conflict handling ETag/version precondition, nem last-write-wins.

15.2 Platform portok

PortWebDesktop/TauriAndroidiOS/iPadOS
File picker/open/savebrowser APIsTauri dialog/fsSAFUIDocumentPicker/Files
Secure storageHttpOnly server session; WebCrypto csak megfelelő threat modellelOS credential/key storeAndroid KeystoreKeychain
Auth handoffredirect/cookiedeep link/native handoffapp link/custom tabuniversal link/ASWebAuthenticationSession
Updater/installerdeploymentsigned Tauri updatersigned APK/store routeApp Store/TestFlight policy
System fontsCSS/font availability querynative font enumerationplatform fontsCoreText fonts
Share/open-withWeb Share where presentOS shellAndroid intentsshare sheet/document types
NotificationsWeb Notification opt-innative notificationnotification channelUNUserNotificationCenter

A jelenlegi Tauri allowlist, desktop updater, Android installer és export delivery jó adapter-mag. A nativeManuscriptFile.ts modulglobális current pathját session-owned DocumentLocation váltja fel; közvetlen Tauri importok fokozatosan composition root mögé kerülnek.

16. Backend/API 1.0

16.1 Contract stratégia

Új stabil first-party contract: /api/v1/.... A jelenlegi /api/... és /integrations/... route-ok nem nevezendők át egyszerre. Átállás:

  1. közös Zod/OpenAPI request/response schema és standard error envelope;
  2. /api/v1 route ugyanarra az application handlerre;
  3. régi route compatibility facade + deprecation header/telemetria;
  4. kliensek átmigrálása;
  5. régi route eltávolítása csak dokumentált 1.x/2.0 policy szerint.

Az external OJS/OMP signed protocol tarthatja a telepített pluginok route-jait, de payload profile/version mezője kötelező; új generációnál /integrations/v1 is bevezethető adapterrel.

16.2 Route és service határ

HTTP route
-> transport validation
-> authentication middleware
-> authorization policy
-> application use case / transaction
-> repository + connector ports
-> response mapper + audit event

Route handlerből nincs közvetlen Prisma business mutation. A transaction boundary egy use-case lokális DB-módosításait fedi. Külső hívás outbox után történik. Minden create/submit/upload kap idempotency keyt; update optimistic versiont. Standard hibák: validation, unauthenticated, forbidden, conflict, rate-limited, external-unavailable, integrity-failed.

16.3 Secrets és audit

  • Credential envelope encryption verziózott key ID-val; kulcs nem DB-ben és nem logban.
  • OAuth refresh token rotation/revocation; per-provider scope inventory.
  • Audit event append-only: actor, authority, action, target, scope, outcome, request/response digest, correlation ID; manuscript content nélkül.
  • Identity/admin/review/integration audit retention külön policy.
  • server.ts shutdown mindkét Prisma klienst és workert zárja.

17. Security trust-boundary térkép

flowchart TB
Untrusted["Untrusted inputs: JSON, ZIP, DOCX, XML, HTML, assets"] --> Parse["Quota + safe parsers"]
Parse --> Validated["Validated OMI domain"]
Validated --> Sensitive["Review / identity / credentials"]
Validated --> Build["Render sandbox + validators"]
Sensitive --> External["Scoped connectors"]
Build --> Artifact["Hashed and signed artifacts"]
BoundaryJelenlegi kódhely és bizonyíték1.0 kontroll
OMI JSONnativeManuscriptFile.ts jelenleg JSON.parse + castbyte/depth/duplicate-key védelem, version gate, schema+invariant, quarantine
OMI ZIP/containeromiContainerImport.ts már méret-, entry-, CRC/SHA-, traversal-, symlink-, encryption- és ambiguity-védelmet használKEEP; fuzz, nested/archive policy, semantic validation hozzáadása
DOCX/XLSX/XML/HTMLofficeImport.ts, DOCX és PDF service-ek saját limitekkel/sanitizerrelközös safe ZIP/XML policy, XXE/entity tiltás, no remote fetch, relationship/path quota
Binary assetsassetRepository.ts, image importer, container assetsMIME magic + decode, checksum, decompression bomb limit, SVG sanitize/rasterize, metadata strip
JATS/XMLStudio validator és PKP pluginok entity/DTD/LIBXML_NONET védelmeparser corpus/fuzz, exact schema/profile pinning
HTML artifactHTML exporter és plugin artifact validator/CSPscripts/iframe/form/event handler/remote URL tiltás, CSP integration test
OAuth/OIDCauth, ORCID, federated és cloud routesPKCE/state/nonce, exact redirect allowlist, short state TTL, token redaction/rotation
Connector endpointlaunch verifier, trusted URL/SSRF helperssigned scoped grant, nonce/replay, redirect-by-redirect SSRF, idempotency, timeout
Review datareviewManuscriptService.ts, peer review serializersszerver projection, assignment ID-space, separate auth/cache/log policy, leak tests
AI/translationintegrationExecution.ts, AI clientserver-minimized payload, purpose/retention consent, confidential grant, content-free audit
Extension/pluginregistry jelenleg manifest/endpointnincs arbitrary code stable claim; built-in allowlist/signing; future sandbox külön ADR
Publication artifactbuild manifest, hash és signature modulokexact byte hash, provenance, validators before transfer, key rotation evidence
Logs/CIprivacy release policycsak synthetic/public fixtures; path/title/author/content redaction és log scanners

18. Tesztarchitektúra

18.1 Piramis

SzintKötelező tartalom
Domain unitstructure/identity/reference/anchor/assets/history invariants, property-based ID/reorder/revert tests
Schema/conformanceOMI valid/invalid fixtures, exact schema checksum, unknown extension, future-version quarantine
Migrationminden stabil from -> to golden fixture, idempotence ahol értelmes, loss report
Import/export fixturesynthetic/public input, deterministic normalized OMI, diagnostics/fidelity golden
Round-tripOMI JSON/container lossless; OMI↔editor semantics; supported DOCX/JATS/HTML subset
Application integrationcommands, concurrent expected revision, checkpoint/save/recovery, outbox
Server/API/api/v1 contract, DB transaction, authn/authz negative matrix, secrets/audit redaction
Connector contractközös OJS/OMP fixture suite, capability mapping, idempotency/retry
E2EPlaywright core workflows; PKP docker OJS/OMP; real renderer/process paths
Platformweb + desktop build/run; Android SAF/install/update; iOS Files/auth/build
SecuritySAST/dependency/SBOM/secret scan, fuzz/property parsers, SSRF/XXE/ZIP-bomb/upload corpus
Accessibilityaxe, keyboard-only, focus/selection, screen-reader smoke, contrast/zoom
Performance10k/120k/500k words, memory/editor count, import/render/save budgets, bundle budget
Recoverykill-during-save, corrupt current file, good backup, IndexedDB restore, outbox retry, update rollback

18.2 Kötelező 1.0 release gate-ek

  1. Format gate: frozen schema/container artifacts, checksum pin, OMI conformance suite mindkét repositoryban, future major/minor matrix és unknown round-trip.
  2. Data integrity gate: open/save/container/asset/history round-trip; atomic save and recovery fault injection; nincs csendes overwrite.
  3. Import gate: DOCX és minden stable importer corpus, diagnosztika/loss golden, size/abort/hostile input teszt.
  4. Publication gate: JATS schema + kijelölt JATS4R profile; HTML security+a11y; PDF pinned renderer/font és vizuális golden; artifact manifest/hash/signature.
  5. Review gate: role/visibility transition matrix, anonymous projection leak corpus, attachment metadata, author/reviewer negative access.
  6. Connector gate: OJS és OMP közös contract + támogatott valós verziók E2E, launch replay, scope, retry/idempotency, writeback receipt.
  7. Identity/API gate: /api/v1 OpenAPI/schema compatibility, migrations, identity authority/reconciliation, authn/authz tests, native secure token storage.
  8. Platform gate: a deklarált stable platformok install/open/edit/save/reopen/update smoke-ja. Preview platform hibája nem blokkol, kivéve privacy/data-loss/security regresszió.
  9. Security gate: CodeQL/SAST, dependency/license/SBOM, secret scan, critical/high triage, parser/security corpus, no-private-fixture log scanner.
  10. Accessibility gate: kijelölt kritikus user journey-k WCAG 2.2 AA automated + keyboard/screen-reader smoke.
  11. Performance gate: elfogadott budgetek és 500k szavas synthetic dokumentum; bundle regression budget a jelenlegi kb. 3,76 MB main chunk csökkentésére/korlátozására.
  12. RC evidence gate: minden fenti workflow ugyanazon exact RC commiton, path filter nélkül fut; az evidence manifest commitot, tool/verziót, artifact hash-t és eredményt rögzít.

19. Stabil 1.0 contractok és freeze definíció

19.1 Fagyasztandó contractok

  • OMI-SPEC-100 portable content grammar szükséges része;
  • OMI-SPEC-320 envelope + JSON Schema + compatibility table;
  • OMI-SPEC-330 container manifest/path/checksum/security profile;
  • OMI-SPEC-160 history exchange boundary, még ha a storage algoritmus belső marad is;
  • OMI-SPEC-150 agent/contribution wire subset;
  • importer/renderer diagnostics/fidelity/provenance contract;
  • publication profile/build manifest/renderer descriptor;
  • Publishing System Connector common DTO/profile;
  • review projection/visibility/writeback contract;
  • /api/v1 public transport és error/idempotency policy;
  • platform és persistence portok a core felé.

Nem kell 1.0-ra befagyasztani a teljes aspiratív OMI-SPEC-310 API-t, arbitrary plugin runtime-ot, CRDT/branching historyt vagy minden DTP exporter stabil fidelity ígéretét.

19.2 Architecture freeze akkor teljes, ha

  1. az összes fenti ADR Accepted vagy explicit Deferred;
  2. a normative schema/container/protocol artifactok release candidateje immutable digesttel elérhető;
  3. a dependency boundary lint aktív;
  4. az új use-case-ek csak a stabil portokon keresztül érnek adaptert;
  5. a kompatibilitási és deprecation policy dokumentált;
  6. minden stable/preview/deferred feature mátrixban szerepel;
  7. nincs nyitott P0 adatvesztési, anonymity vagy credential blocker.

20. Dokumentáció–implementáció eltérések

TémaDokumentáció/specImplementációEgységesítés
OMI formátumSPEC-320 0.2.0 envelope/schemaStudio 0.1 URI/version; 0.2 schema fájl üresOMI schema release pin + codec + explicit pre-stable import/reject
Containergovernance egyes helyein „not started”; SPEC-330 részben vázlatműködő ZIP manifest/checksum/history/profile/output kóda bevált implementációból normatív 0.1 container profile és fixture
Content modelspecifikáció szemantikai modellt célozOmiBlock.content stringelt Tiptap JSON/legacy textSPEC-100 grammar freeze + adapter migration
Identitysecurity dokumentáció részben future/Argon2id állapotot íridentity DB, OIDC/ORCID/admin már létezik; local password scrypta működő identity architektúrát dokumentálni, hash policy/versioninget rögzíteni
APISPEC-310 magas szintűsok működő, de vegyes unversioned route/api/v1 additive contract; nem tömeges route rename
Reviewstatus matrix elmarad a kódtólserver-side projection, visibility serializer és PKP writeback működikkódból review contract/fixture; anonymity hardening
Release scopeRoute A stable/preview mátrix létezikCI workflow-k részben path-filteresekexact-RC aggregate evidence workflow

21. Ellenőrzött baseline

Az audit idején:

  • Studio unit/pretest suite: 441/441 sikeres;
  • frontend lint és production build: sikeres;
  • server Prisma generation, typecheck és build: sikeres;
  • publication release tests: 16/16, direct submission: 15/15, publication artifact: 13/13;
  • local readiness: 6/6;
  • OMI file-format fixtures: 8/8; OMI Docusaurus build: sikeres;
  • a Studio exact commitján általános CI, CodeQL, desktop/Tauri, Android és promotion workflow zöld volt;
  • az OJS és OMP plugin exact commitjain a plugin CI zöld volt.

Korlát: a jelen környezetben PHP/Rust platformtesztek nem futottak lokálisan; ezeknél a repository CI volt a bizonyíték. Az exact Studio commiton a path-filter miatt nem futott minden 1.0-readiness/PKP/iOS workflow. Az OMI website build script nem hívja a test:file-format suite-ot, tehát a zöld website CI önmagában nem schema-conformance gate.

22. Pinned source references

Az audit reprodukálásához a dokumentum az alábbi immutable commitokra hivatkozik:

Kiemelt, állításokat közvetlenül alátámasztó források:

23. Összegzés

A célarchitektúra a működő implementációt veszi körül stabil határokkal. Nem javasolt a Tiptap, a versioning szemantika, a ZIP biztonsági parser, a publication build, a cloud provider réteg, a Tauri shell vagy a PKP pluginok újraírása. A szükséges mélyebb refaktorok oka konkrét: a portable formátum és a Tiptap összemosása adatvesztési/kompatibilitási kockázat; a store-use-case összekapcsolás tesztelési és platformfüggési probléma; a duplikált identity authority és a kliensvezérelt confidential scope security kockázat; a teljes snapshot history pedig skálázási kockázat.

A helyes út: contractot bevezetni a régi kód elé, ugyanazt a viselkedést conformance fixture-rel lezárni, callsite-onként átállni, majd csak bizonyítottan használaton kívüli vagy hibás utat eltávolítani.