Versioning (Zaya.OCR)
| Axis | Source | Example |
|---|---|---|
| ZayaPrimitivesVersion | Directory.Build.props (supplies Major) |
2.0.0 |
| interfaceVersion | Zaya.OCR.csproj → only ZayaVersionInterface → Major.Interface.0 |
2.0.0 |
| pluginVersion | Each Impl → ZayaVersionImpMajor + ZayaVersionImpMinor; Interface read from abstractions → Major.Interface.ImpMajor.ImpMinor |
2.0.0.0 |
| updateChannel | Interface MAJOR.Interface |
2.0 → plugin-Zaya.OCR-v2.0-latest |
Rules:
- Abstractions: only
ZayaVersionInterface. Version always ends with.0. Contract/assembly change → bump Interface. - Plugin: only
ZayaVersionImpMajor/ZayaVersionImpMinor. Interface digit is taken fromZaya.OCR.csprojautomatically. - Do not set
<Version>manually.Directory.Build.targetsbuilds it and checks Major vs Primitives. - Host loads a zip only if
interfaceVersionexactly matches host’sZaya.OCRversion. - One interface → one floating GitHub tag:
plugin-Zaya.OCR-v{channel}-latest(immutable:plugin-Zaya.OCR-v{pluginVersion}). All OCR/layout zips ship in that release. build.cmdwritesout/interfaces.jsonfor the Publish workflow.
plugin.json
{
"id": "OneOcr",
"type": "ocr",
"interface": "Zaya.OCR",
"interfaceVersion": "2.0.0",
"pluginVersion": "2.0.0.0",
"entryPoint": "Zaya.OCR.Impl.OneOcr.OneOcrService"
}
entryPoint is the fully qualified type that implements IOCRService / ITextLayoutService (hosts construct it with ILoggingWrapper, or use the parameterless ctor). Other plugins: Zaya.OCR.Impl.WindowsMediaOcr.WindowsMediaOcrService, Zaya.OCR.Impl.ProximityTextLayout.ProximityTextLayoutService.
Release body lists per-asset plugin versions (Zaya.OCR.Impl.OneOcr.zip=2.0.0.0).
Changelog
Use root CHANGELOG.md (Keep a Changelog):
- While working, append notes under
## [Unreleased]. - Run the Publish workflow — GitHub Release body is taken from
[Unreleased](plus release metadata). There is no changelog input on the action. - After a successful publish, move that block to a dated section, e.g.
## [1.3.0.0] - 2026-08-13, and leave[Unreleased]empty for the next cycle.
Do not backfill older releases; history starts from the current line.
Bumping
- Interface: raise
ZayaVersionInterfaceinZaya.OCR.csproj, update host, republish plugins. - Single engine: raise
ZayaVersionImpMajor/ZayaVersionImpMinoronly in that Impl’s.csproj. - Update
CHANGELOG.md[Unreleased], then runbuild.cmd/ Publish workflow.