Knowledge lifecycle¶
Layer 1 of the Knowledge OS epic (#144), built on the Knowledge model (#145). It gives every note a first-class phase and a validated way to move between phases.
Lives in the pure src/architecture/knowledge/lifecycle/ (Obsidian-free, unit-tested) plus one Obsidian-facing write service and a command.
The six states¶
๐ฑ Fleeting โ ๐ Literature โ ๐ก Permanent โ ๐ฌ Developing โ ๐ Evergreen โ ๐ชฆ Archived
- The stored value in frontmatter is always the plain ASCII token (
fleeting,literature,permanent,developing,evergreen,archived). The emoji is display-only โ never written. - A note with no / empty / unrecognized state reads as
fleeting(a quick capture is fleeting until promoted). Classification never rewrites a note.
Frontmatter convention (configurable, no lock-in)¶
Three property names are standardized, each configurable in Settings โ Knowledge lifecycle and defaulting to a plain name:
| Purpose | Default property | Written by #146? |
|---|---|---|
| Lifecycle state | state | yes โ only by an explicit transition |
| Capture timestamp | created | no โ reserved name only |
| Last review | last-reviewed | no โ reserved; written later by #160 |
Uninstalling the plugin leaves every note intact and readable.
Transition state machine¶
stateDiagram-v2
[*] --> Fleeting: capture / missing state โ fallback
Fleeting --> Literature: promote
Fleeting --> Permanent: promote (direct)
Literature --> Permanent: promote
Permanent --> Developing: develop
Developing --> Evergreen: consolidate
Evergreen --> Developing: rework (back-edge)
Fleeting --> Archived: archive
Literature --> Archived: archive
Permanent --> Archived: archive
Developing --> Archived: archive
Evergreen --> Archived: archive
Archived --> Fleeting: revive
The relation is exposed as pure predicates canTransition(from, to) / allowedTargets(from). Everything not drawn above (skip-ahead, selfโself, arbitrary demotions) is rejected.
Changing a note's state¶
The "Change note state" command (visible only when a markdown note is active) opens a picker of the states reachable from the note's current state and delegates to StateTransitionService, which validates the move and, on success, writes only the configured state property through the FrontmatterService โ processFrontMatter facade. An invalid move performs no write. The index re-derives that single note when the metadata cache reports the change.
Capability โ new: file-system write¶
This is the first write in the Knowledge layer. It is scoped to one property, on one user-selected note, per explicit command โ never bulk, never automatic. Classification on load is read-only. created/last-reviewed are reserved names only; #146 never writes them.
Extending¶
The lifecycle plugs into #145 via a LifecycleStateSchema implements StateSchema, registered with KnowledgeIndex.getInstance().registerSchemas({ state }). byState / statePartition then classify every note. The maturity score over these states is #158.
State โ phase. A note's lifecycle state (here) is orthogonal to a step's workflow phase (#149): a note has a state (how mature it is), a step has a phase (the kind of knowledge work it performs).