Define a minimal, portable and diff-friendly standard to document:
- multiple software tools in one organization
- deployments/instances per tool (PCs, machines, VMs, containers, embedded)
- lifecycle events as append-only logbook entries
SoftwareLogBook is a lightweight, human-readable logbook. It complements, but does not replace, operational systems.
- Not a CMDB or ITSM system.
- Not an authoritative source of truth for asset inventory.
- Not a ticketing or workflow system.
software/<softwareKey>/software.mdsoftware/<softwareKey>/deployments/*.mdsoftware/<softwareKey>/entries/<YYYY>/*.md_global/entries/<YYYY>/*.mdtaxonomy/*.mdtemplates/*.md
- lowercase
a-z0-9-- unique within repository
Examples:
conapp-core-server,hr-reporting,vendor-plc-suite
Each event gets its own file under entries/<YYYY>/.
This minimizes merge conflicts and keeps history readable.
All domain files (software.md, deployments, entries) use:
- YAML frontmatter between
---lines - Markdown body after frontmatter
All id values MUST be unique across the repository (software, deployments, entries).
UUID/ULID values for software and deployments implicitly satisfy this requirement.
Recommended convention for entries:
<scopeKey>::<timestamp>_<type>_<slug>
<scopeKey>:softwareKeyfor software-scoped entries, orglobalfor_global/entries/(prefix convention:<softwareKey>::orglobal::).- Example:
example-tool::2025-12-19T03-12-00Z_incident_tcp-timeouts - Recommended regex (entries):
^[a-z0-9-]+::[A-Za-z0-9_.:-]+$
Required frontmatter fields:
id: stable identifier (string; UUID/ULID recommended)key: must match folder namename: display namecategory: seetaxonomy/categories.mdowner: team/person/departmentcriticality: low|medium|highstatus: active|deprecated|retiredcreatedAt: ISO 8601 datetimecreatedBy: string
Optional:
vendorNamesupportContactdocumentationUrltags: list of stringsreferences: list of Reference objects (see 4.4)
Required:
idsoftwareKeydeploymentKey: unique within this software (slug recommended)environment: seetaxonomy/environments.mdlocationPath: string (recommended:Site/Area/Line/Machine)hostType: pc|machine|vm|container|embedded|unknownhostIdentifier: hostname/assetTag/serial/instanceIdinstalledVersion: string (semver recommended)status: active|offline|retiredcreatedAtcreatedBy
Optional:
osarchitecture(x64|arm64|...)networkHint(optional; avoid secrets)references: list of Referencetags: list
Required:
id: stable entry idtype: seetaxonomy/entry-types.mdseverity: seetaxonomy/severities.mdoccurredAt: ISO 8601 datetimerecordedAt: ISO 8601 datetimetitle: short summarysoftwareKey: optional for global entries, required for software-scoped entriesdeploymentKey: optional (set if deployment-specific)createdBy: string
Optional:
versionFrom,versionTolabels: list of stringsreferences: list of ReferencecorrectionForId: id of entry being corrected (required whentype: correction)supersedesId: id of entry being supersededchangeReason: string
Rules:
- An entry MUST relate to either:
softwareKey(software-scoped), or- be in
_global/entries/<YYYY>/(global policy/event), optionally withsoftwareKey.
- If
deploymentKeyis set,softwareKeySHOULD be set as well. - If
type: correction,correctionForIdMUST be set and MUST reference an existing entry. Corrections exist to fix or clarify errors. supersedesIdindicates that the current entry replaces the referenced entry in presentation or decision-making. The superseded entry remains part of the append-only history and is not considered incorrect.- Entry files are stored under a year folder based on
occurredAt(fallback:recordedAt).
type: repo|docs|ticket|vendor|cve|release|build|other label: string url: string (URL/URI, optional) externalId: string (optional, for air-gapped environments) note: string (optional, for air-gapped environments)
See taxonomy/reference-types.md.
- Do not silently edit past entries.
- Corrections are new entries (
type: correction) referencingcorrectionForId. - If editing is unavoidable (typo), do it via a dedicated correction entry anyway.
- Git history is part of the audit trail.
Recommended:
YYYY-MM-DD_<type>_<short-slug>.md
Examples:
2025-12-19_incident_tcp-timeouts.md2025-12-28_release_1.4.0.md
Recommended:
<env>-<site>-<line>-<machine> (free, but consistent)
Example: prod-werk1-linie2-m7
- Never store secrets in logbook files.
- Avoid sensitive network details unless necessary.
- Prefer internal identifiers over personal data.
- This SPEC is versioned as
v0.2. - Future versions must remain backward readable.