feat(okr): lukket OKF type/tags-vokabular for ingestion-snap [skip-docs]
This commit is contained in:
parent
abfcc6b48e
commit
a9d9c45192
2 changed files with 138 additions and 0 deletions
73
lib/okf-vocab.mjs
Normal file
73
lib/okf-vocab.mjs
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
// okf-vocab.mjs
|
||||
// Lukket kontrollert vokabular for innboks-ingestion (type + tags) og
|
||||
// type->nivaa-ruting. Zero npm dependencies.
|
||||
//
|
||||
// Net-new (premiss #1): handheves KUN paa ingestion-skrivestien (snapType/
|
||||
// snapTags) og av okf-check++ --strict-ingest. Lese-siden (okr-second-brain-
|
||||
// search, okf-check default) behandler fortsatt ukjente typer som gyldige --
|
||||
// denne modulen er den ENESTE strenge porten, aktiv kun ved ingestion.
|
||||
|
||||
// Title-Case kanoniske OKF-typer (jf. catalog-spec Documents/kb Layout).
|
||||
export const TYPE_VOCAB = [
|
||||
'Organisasjonsprofil',
|
||||
'Tildelingsbrev',
|
||||
'Virksomhetsplan',
|
||||
'Overordnede OKR',
|
||||
'OKR',
|
||||
'Retrospektiv',
|
||||
'Status',
|
||||
'Notat',
|
||||
'Dokument',
|
||||
];
|
||||
|
||||
// Safe default naar raw type ikke matcher vokabularet exact (premiss #1).
|
||||
const DEFAULT_TYPE = 'Dokument';
|
||||
|
||||
// Lukket start-sett av Title-Case tags for ingestion-snap.
|
||||
export const TAGS_VOCAB = [
|
||||
'Strategi',
|
||||
'Tildelingsbrev',
|
||||
'Virksomhetsplan',
|
||||
'OKR',
|
||||
'Styring',
|
||||
'Governance',
|
||||
'Retrospektiv',
|
||||
'Status',
|
||||
'Maal',
|
||||
'Risiko',
|
||||
];
|
||||
|
||||
// type -> bundle-nivaa (katalog under bundle-rot). Organisasjonsprofil rutes
|
||||
// til dokumenter/ (IKKE strategisk-kontekst/) for aa ikke konkurrere med den
|
||||
// home-kanoniske ~/.claude/okr/org/profil.md (Revisions #25).
|
||||
const LEVEL_BY_TYPE = {
|
||||
Tildelingsbrev: 'strategisk-kontekst',
|
||||
Virksomhetsplan: 'strategisk-kontekst',
|
||||
'Overordnede OKR': 'strategisk-kontekst',
|
||||
Retrospektiv: 'historikk',
|
||||
OKR: 'dokumenter',
|
||||
Status: 'dokumenter',
|
||||
Notat: 'dokumenter',
|
||||
Dokument: 'dokumenter',
|
||||
Organisasjonsprofil: 'dokumenter',
|
||||
};
|
||||
|
||||
const DEFAULT_LEVEL = 'dokumenter';
|
||||
|
||||
// Exact-match -> kanonisk type; ellers safe default Dokument.
|
||||
export function snapType(raw) {
|
||||
return TYPE_VOCAB.includes(raw) ? raw : DEFAULT_TYPE;
|
||||
}
|
||||
|
||||
// Behold kun tags i det lukkede vokabularet (dropp ukjente); bevar rekkefolge.
|
||||
export function snapTags(rawList) {
|
||||
if (!Array.isArray(rawList)) return [];
|
||||
return rawList.filter((t) => TAGS_VOCAB.includes(t));
|
||||
}
|
||||
|
||||
// type -> bundle-nivaa; ukjent/ikke-vokab -> default dokumenter/. Plassert her
|
||||
// i Session 1 slik at relasjons-steget (Step 6) kan resolvere konseptets
|
||||
// mal-sti FOR skriv (Pass-2 ordering-fiks, Revisions #21).
|
||||
export function routeLevel(type) {
|
||||
return LEVEL_BY_TYPE[type] ?? DEFAULT_LEVEL;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue