Every reading now leads with "vs your own baseline", and no verdict is given
when N is too small to carry one.
- stats.ts: median + medianAbsoluteDeviation (robust pair; mean/stddev stay for
the alert engine, which wants outlier sensitivity), rollingBaseline with a
10-post positional window, median ± 1·MAD band floored at 0, and a typed
insufficient-data refusal below MIN_BASELINE_N=5. readAgainstBaseline returns
above/within/below-band, or no-verdict when the baseline was refused.
- baselineByGroup + buildBaselineBlock: per-format/per-pillar baselines, each
judged on its own N; the reported period is excluded from its own baseline and
compared on its median, not its mean.
- queue-join.ts (new): read-only date join supplying format/pillar from the post
queue. Every ambiguity resolves to unlabelled, an entry labels at most one
post, and a missing/broken queue degrades to no labels.
- weekly/monthly reports attach the block unconditionally (refusal included);
optional in the types, so pre-N17 reports load unchanged.
- CLI: report output leads with the baseline; new `baseline [--by format|pillar]`
verb with coverage reporting.
- report.md leads with baseline framing and prints the code's reading rather
than judging the band by eye; WoW loses to the baseline on disagreement.
analyze.md Step 2a tests whether the drop is real before diagnosing it.
TDD: 58 analytics tests written red first (144 -> 202). test-runner Section 16x,
23 unconditional checks + self-test (247 -> 270; anti-erosion floor 228 -> 251).
tsc clean. All suites green: trends 300, brain 134, editions 72,
specifics-bank 45, contract-gate 33, hooks 191, tests 35, render 60.
Also closes the OKF phase-4 scope follow-up in docs/okf-ingestion/plan.md §8
(coord round 2026-07-25): phase 4 tracks the contract, parse is in scope, and
our claim on read_concept/navigate_bundle is withdrawn as unnecessary.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QxvWAjte7vPcF79QeSRvRJ
OKF-runden lukket ved trinn F (konsensus). Vår trinn E-svarfil bodde i den
interne postkassen (~/repos/_okf-interim/), som nå rives. Løfter den varige
substansen som kun fantes der inn i planen (ny §10): vår §7-registerrad
(status `planned`, ingen dør-A-stempling, uforfalskbarhet utenfor fila),
D1-posisjon (ratifisert D1 matcher vår innvending), D3 `partial`-posisjon
(ratifisert def = samme dør; vi er `planned`, ikke `partial`), samt tre
fremadrettede tekniske krav som ellers gikk tapt: tomt-vokabular-ikke-snap
(+ okrs egen RECOMMENDED-konstant som støtte), index preserve-unowned-grensen,
og lag-1-som-sett (delte golden-fixtures over fire resolve_link-akser).
Alt verifisert mot kode 2026-07-20. Ingen kodeendring i pluginen.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S7SQpXJpBSNvpWaTNq1kWZ
To selvkorreksjoner verifisert mot kode:
- type-vokabularet er tre verdier, ikke fem (JournalEntry/TributarySummary
finnes kun i designnotat, aldri i kode)
- tilslutningen til lukket vokabular ble gitt uten aa sjekke innholdet;
okf-check --strict-ingest exit 1 paa vaart konforme bundle, og safe
default kollapser alle tre typene til Dokument
Nytt empirisk argument mot obligatorisk noekkel-prefiks: referanse-checkerens
egen konstant heter RECOMMENDED, ikke REQUIRED (exit 0 med advarsler).
Q3 (fase 4-omfang) besvart av llm-ingestion-okf: lag 1-primitivene, ikke
materialize_bundle-paritet. Status forblir planned.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019uzhvLjCm39mNQXVFwG7w2
Forrige commit hevdet at delt fixture-korpus MÅ bære et verbatim,
ikke-normalisert tilfelle. Kryssjekk mot claude-playlist-corpus' trinn
D-svar viser at det var overdrevet: vår newline-frie serializer gjelder
ingest/published/, som er ekskludert fra OKF-bundelen ved design.
Filene write_concept faktisk ville skrevet (brain/) far trailing newline
fra var egen serializer. Pa konseptstien er vi enige med dem.
Det som overlever: write_concept skal ogsa tjene som generell verbatim-
writer utenfor en bundle, sa ramme-normalisering bor vaere en dokumentert
parameter, ikke en ubetinget garanti.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019uzhvLjCm39mNQXVFwG7w2
Trinn D-review besvart i _okf-interim (postkasse, ikke tracked her).
Verifisering mot egen kode avkreftet to påstander i plan §4 R5:
- Ingen stabile err.code i noen av de fire CLI-ene (fritekst-Error +
numerisk process.exit). err.code er et krav TIL biblioteket, ikke en
disiplin vi speiler.
- "Nøyaktig én avsluttende newline" er ikke vår invariant;
serializePublishedRecord utelater den bevisst for byte-eksakt
round-trip (SC2). Delt fixture-korpus må bære et verbatim,
ikke-normalisert tilfelle.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019uzhvLjCm39mNQXVFwG7w2
Legger det varige innholdet fra adopsjonsrunden i eiende repo (postkassens
regel 2: beslutninger bor i eiende repos docs, kopien i _okf-interim er
varselet).
Nytt par. 6: bundle-inventar + plassering. Vi har EN OKF-bundle (brain/),
og alt bruker-eid ligger allerede utenfor repo-treet via data-dir-seamen
(M0/v0.6.0) - beslutningen krever ingen migrasjon hos oss.
Innsigelse mot taksonomien: beslutningstabellen diskriminerer paa hvem som
skriver. Vaar brain/ skrives av pluginen og ville derfor klassifisert som
plugin-eid og hoert hjemme i repoet - som er akkurat feil for det mest
personlige vi har, i et offentlig distribuert repo. Riktig akse er hvilken
livssyklus innholdet foelger. Maskinskrevet + bruker-eid er ikke et hjoerne,
det er hva ethvert laerende system produserer.
Par. 7-9 renummerert.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019uzhvLjCm39mNQXVFwG7w2
Kartlegger repoets inntaksflater mot dor A i llm-ingestion-okf v0.3.1 og
leverer kravgrunnlaget som avgjor F1 for dette repoet.
Kjernefunn: F1 (manglende fritekst-connector) er ikke var blokker. All
ekstern henting i pluginen skjer i en modell-tur (trend-spotter WebSearch/
WebFetch, /linkedin:react WebFetch) - det finnes ingen rah HTTP-fetch i
plugin-kode. Dor A forutsetter at kode kan hente bytene; for var storste
og minst betrodde flate kan den ikke det. Kravet vart er derfor R1: en
dor som tar imot allerede-hentet, modellprodusert payload og
materialiserer den deterministisk. trends capture er den kontrakten
allerede, og donerbar som presedens.
Fire verifiserte kollisjoner mot dor A: fast 7-nokkels frontmatter uten
extension keys; rewrite-on-run-eierskap mot inkrementell akkresjon;
slug-ids mot content-adresserte ids; tabell-render som kollapser
linjeskift.
ingest/published/ forblir plugin-lokal ved design - na med teknisk gulv,
ikke bare beslutning: byte-eksakt round-trip (SC2), un-normalisert
mintContentId(body), YAML-fri grammatikk (samme grunn som Stage-1-bundlen
ekskluderte ingest/), og model-collapse-guard-semantikk.
Markorlinje satt i STATE.md (local-only): planned.
Separat fra docs/ingestion-guard/plan.md - grensen er beskrevet i par. 6.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019uzhvLjCm39mNQXVFwG7w2