okf._walk toleret en ulesbar/utenfor-basen lenke uten aa etterlate spor (okf.py:182
"continue # broken link"), og navigate_bundle returnerte kun filene den FANT. En base
der halve innholdet aldri ble lest var derfor umulig aa skille fra en base der de
dokumentene aldri ble skrevet - og toerrkjoeringen sa ingenting.
Toleransen er UROERT: OKF SPEC §4 krever at navigasjonen ikke kaster, og den kaster
fortsatt ikke. Dette er synlighet, ikke en ny nekt.
To tenner (samme form som ordre 20260821T092039Z, synlig uforankring):
1. okf.SkippedLink + Bundle.skipped - strukturert spor, aldri en streng: hvilken fil
lenken sto i, lenketeksten ORDRETT (operatoeren redigerer den teksten, ikke den
resolverte stien), og hvilken av de TO grunnene som gjaldt - outside-bundle (escape,
ofte bevisst) eller missing (inne i basen, ingen lesbar fil, nesten alltid en
skrivefeil). Dedup-grenen (canonical in seen) registreres ALDRI: den er korrekt
navigasjon og det som terminerer sykler.
2. run.skipped_links_notice - EN renderer, tar den alt opploeste tuppelen, returnerer
None naar ingenting ble hoppet over. Printes paa BEGGE flater: --live-dry-run og
den fulle enkeltkjoeringen (en kjoering som PRODUSERTE et forslag fra en halvlest
base er der tausheten kostet mest).
Defaulten er MOTSATT forrige ordres, og forskjellen er innsikten: cost_baseline_anchored
er paakrevd fordi begge defaults lyver, mens en TOM tuppel her er et aerlig positivt
utsagn ("hver lenke ble fulgt") - external_calls-presedensen. Vei-stien navigerer ingen
base, saa tom er bokstavelig sant der ogsaa.
Sporet bor paa RunResult.skipped_links (RUN-nivaa: navigasjonen skjer EN gang per
kjoering, foer noe forslag finnes), aldri paa ProvenanceStamp, som beskriver gaten som
doemte EN kandidat. Ingenting av dette naar bundle_context - derfor er de commons-eide
nav-goldenene byte-uendret, og Bundle( har fortsatt EN konstruksjons-sted (maalt).
Load-bearing MAALT (tests/test_navigation_visibility_loadbearing.py), aatte mutasjoner
alle roede mot HELE suiten + groenn kontroll 897 passed / 5 skipped:
detach missing-registreringen (6 roede) · detach outside-bundle (2) · kollaps de to
grunnene til en (2) · registrer dedup-grenen (1) · renderer returnerer alltid linja
(3, inkl. kontrollene - omisjonen er selv gatet) · detach dry-run-printen (1) ·
detach full-run-printen (1) · konstant tom trace ut av run_project (4).
Docs rettet der de paasto det motsatte: kunnskapsbase-for-en-kjoring.md §5.7 + §6,
presentasjon-bygge-kunnskapsbase.html (steg 8, steg 9, fallgruve 3, avslutningen),
README-ens navigasjonsavsnitt, og CLAUDE.md-ens navigasjons-kontrakt-invariant.
475 lines
28 KiB
HTML
475 lines
28 KiB
HTML
<!doctype html>
|
||
<html lang="no">
|
||
<meta charset="utf-8">
|
||
<title>Slik bygger du kunnskapsbasen</title>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<style>
|
||
:root { color-scheme: light; }
|
||
* { box-sizing: border-box; }
|
||
body { margin:0; background:#fff; color:#000;
|
||
font:17px/1.6 -apple-system, "Segoe UI", system-ui, sans-serif; }
|
||
.slide { display:none; min-height:100vh; padding:6vh 6vw 14vh; max-width:52rem; margin:0 auto; }
|
||
.slide.on { display:block; }
|
||
h1 { font-size:2.1rem; margin:0 0 .5em; line-height:1.2; }
|
||
h2 { font-size:1.5rem; margin:0 0 .9em; line-height:1.3; }
|
||
.kicker { color:#666; text-transform:uppercase; letter-spacing:.1em;
|
||
font-size:.72rem; margin:0 0 1.4em; }
|
||
.step { display:inline-block; border:2px solid #000; border-radius:4px;
|
||
padding:.05em .55em; font-weight:700; margin-right:.5em; }
|
||
p { margin:0 0 1em; }
|
||
ol, ul { padding-left:1.4em; margin:0 0 1em; }
|
||
li { margin:.5em 0; }
|
||
.lead { font-size:1.15rem; color:#444; }
|
||
table { border-collapse:collapse; width:100%; margin:1.2em 0; font-size:.94rem; }
|
||
th, td { border-bottom:1px solid #ddd; text-align:left; padding:.5em .6em; vertical-align:top; }
|
||
th { color:#666; font-weight:600; font-size:.78rem; text-transform:uppercase; letter-spacing:.04em; }
|
||
.done { border:2px solid #000; padding:.7em 1em; margin:1.4em 0; font-size:.95rem; }
|
||
.done b { display:block; font-size:.72rem; text-transform:uppercase; letter-spacing:.08em;
|
||
color:#666; margin-bottom:.25em; }
|
||
.note { border-left:3px solid #ccc; padding:.3em 0 .3em 1.1em; color:#444;
|
||
margin:1.4em 0; font-size:.95rem; }
|
||
figure { margin:1.6em 0; }
|
||
figure svg { width:100%; height:auto; display:block; }
|
||
figcaption { font-size:.82rem; color:#666; margin-top:.6em; text-align:center; }
|
||
nav { position:fixed; bottom:0; left:0; right:0; padding:.7em 6vw;
|
||
background:#fff; border-top:1px solid #ddd;
|
||
display:flex; gap:1em; align-items:center; font-size:.85rem; }
|
||
button { font:inherit; padding:.3em .9em; cursor:pointer; border:1px solid #bbb;
|
||
background:#fff; color:#000; border-radius:4px; }
|
||
#pos { color:#666; margin-left:auto; }
|
||
.d { fill:none; stroke:#000; stroke-width:2; }
|
||
.dt { fill:#000; font:13px -apple-system,"Segoe UI",system-ui,sans-serif; }
|
||
.dt-s { fill:#444; font:11px -apple-system,"Segoe UI",system-ui,sans-serif; }
|
||
.dim { stroke:#bbb; }
|
||
.dimt { fill:#999; font:12px -apple-system,"Segoe UI",system-ui,sans-serif; }
|
||
.fill { fill:#000; }
|
||
.hatch { fill:#eee; stroke:#000; stroke-width:2; }
|
||
</style>
|
||
|
||
<section class="slide on">
|
||
<p class="kicker">Optimaliseringsprosjekt</p>
|
||
<h1>Slik bygger du kunnskapsbasen</h1>
|
||
<p class="lead">Ni steg fra ingenting til en kunnskapsbase som kan kjøres. Hvert steg sier hvem
|
||
som gjør det, hva som leveres, og når du er ferdig med det.</p>
|
||
<p>Kunnskapsbasen er den lille, kuraterte samlingen systemet leser før det foreslår tiltak.
|
||
Uten den vet systemet ingenting om anlegget ditt.</p>
|
||
|
||
<figure>
|
||
<svg viewBox="0 0 720 118" role="img" aria-label="Ni steg fordelt på fire faser">
|
||
<rect class="d" x="8" y="26" width="150" height="52" rx="4"/>
|
||
<text class="dt" x="83" y="48" text-anchor="middle" font-weight="700">Ramme</text>
|
||
<text class="dt-s" x="83" y="66" text-anchor="middle">steg 1–3</text>
|
||
<path class="d" d="M158 52 h20"/><path class="fill" d="M186 52 l-10 -5 v10 z"/>
|
||
|
||
<rect class="d" x="186" y="26" width="150" height="52" rx="4"/>
|
||
<text class="dt" x="261" y="48" text-anchor="middle" font-weight="700">Innhold</text>
|
||
<text class="dt-s" x="261" y="66" text-anchor="middle">steg 4–6</text>
|
||
<path class="d" d="M336 52 h20"/><path class="fill" d="M364 52 l-10 -5 v10 z"/>
|
||
|
||
<rect class="d" x="364" y="26" width="150" height="52" rx="4"/>
|
||
<text class="dt" x="439" y="48" text-anchor="middle" font-weight="700">Bind sammen</text>
|
||
<text class="dt-s" x="439" y="66" text-anchor="middle">steg 7–8</text>
|
||
<path class="d" d="M514 52 h20"/><path class="fill" d="M542 52 l-10 -5 v10 z"/>
|
||
|
||
<rect class="d" x="542" y="26" width="170" height="52" rx="4"/>
|
||
<text class="dt" x="627" y="48" text-anchor="middle" font-weight="700">Kjør og lær</text>
|
||
<text class="dt-s" x="627" y="66" text-anchor="middle">steg 9</text>
|
||
|
||
<text class="dimt" x="360" y="108" text-anchor="middle">samlet: én til to uker, og det tunge er steg 2</text>
|
||
</svg>
|
||
</figure>
|
||
</section>
|
||
|
||
<section class="slide">
|
||
<p class="kicker">Før du starter</p>
|
||
<h2>To roller, og de kan ikke bytte plass</h2>
|
||
|
||
<figure>
|
||
<svg viewBox="0 0 720 165" role="img" aria-label="Fagpersonen eier innholdet, den tekniske personen eier formen">
|
||
<rect class="d" x="8" y="14" width="340" height="130" rx="4"/>
|
||
<text class="dt" x="178" y="42" text-anchor="middle" font-weight="700">FAGPERSONEN</text>
|
||
<path class="d dim" d="M40 54 h276"/>
|
||
<text class="dt-s" x="178" y="78" text-anchor="middle">eier innholdet og korrektheten</text>
|
||
<text class="dt-s" x="178" y="98" text-anchor="middle">tallene, rammene, tiltakene, dommene</text>
|
||
<text class="dt-s" x="178" y="126" text-anchor="middle">leverer i den formen de allerede jobber i</text>
|
||
|
||
<rect class="d" x="372" y="14" width="340" height="130" rx="4"/>
|
||
<text class="dt" x="542" y="42" text-anchor="middle" font-weight="700">DEN TEKNISKE PERSONEN</text>
|
||
<path class="d dim" d="M404 54 h276"/>
|
||
<text class="dt-s" x="542" y="78" text-anchor="middle">eier formen og strukturen</text>
|
||
<text class="dt-s" x="542" y="98" text-anchor="middle">oversetter til dokumenter og tall</text>
|
||
<text class="dt-s" x="542" y="126" text-anchor="middle">finner aldri opp et tall selv</text>
|
||
</svg>
|
||
</figure>
|
||
|
||
<p>Fagpersonen leverer regneark, notater og henvisninger — ikke ferdige dokumenter. Den tekniske
|
||
personen oversetter. <strong>Regelen som ikke kan brytes: den tekniske personen utleder aldri et
|
||
tall fagpersonen ikke har oppgitt.</strong> Mangler et tall, står det som mangler.</p>
|
||
<div class="note">Det finnes ingen automatikk som gjør denne jobben. Oversettelsen er håndarbeid,
|
||
og det er derfor det tar én til to uker.</div>
|
||
</section>
|
||
|
||
<section class="slide">
|
||
<p class="kicker">Ramme</p>
|
||
<h2><span class="step">1</span> Bestem hvilket anlegg det gjelder</h2>
|
||
<p>Én kunnskapsbase dekker <strong>ett</strong> prosjekt eller anlegg. Har du flere, blir det
|
||
flere baser — ikke én stor.</p>
|
||
<p><strong>Gjør dette:</strong> velg et navn på anlegget og skriv det ned ett sted. Navnet skal
|
||
brukes helt likt overalt siden, uten mellomrom og uten æ, ø og å.</p>
|
||
<table>
|
||
<tr><th>Hvem</th><th>Leverer</th></tr>
|
||
<tr><td>Prosjekteier</td><td>hvilket anlegg, og hva det skal hete</td></tr>
|
||
</table>
|
||
<div class="done"><b>Ferdig når</b>Navnet er bestemt, og alle er enige om at basen dekker akkurat
|
||
dette anlegget — ikke to naboanlegg «mens vi først er i gang».</div>
|
||
</section>
|
||
|
||
<section class="slide">
|
||
<p class="kicker">Ramme</p>
|
||
<h2><span class="step">2</span> Skaff de faktiske kostnadstallene</h2>
|
||
<p>Dette er det tunge steget, og det som avgjør om resten er verdt noe. Systemet skal senere
|
||
kontrollere hvert forslag mot ekte kostnadslinjer — mengde ganger enhetspris.</p>
|
||
|
||
<figure>
|
||
<svg viewBox="0 0 720 150" role="img" aria-label="Med kostnadstall avvises et oppdiktet forslag; uten dem passerer det">
|
||
<text class="dt" x="8" y="22" font-weight="700">MED ekte tall</text>
|
||
<rect class="d" x="8" y="32" width="120" height="40" rx="4"/>
|
||
<text class="dt-s" x="68" y="56" text-anchor="middle">Oppdiktet forslag</text>
|
||
<path class="d" d="M128 52 h30"/><path class="fill" d="M168 52 l-11 -5 v10 z"/>
|
||
<rect class="d" x="168" y="32" width="150" height="40" rx="4" stroke-width="3"/>
|
||
<text class="dt-s" x="243" y="56" text-anchor="middle">Avstemmes mot fasit</text>
|
||
<path class="d" d="M318 52 h30"/><path class="fill" d="M358 52 l-11 -5 v10 z"/>
|
||
<text class="dt" x="370" y="57" font-weight="700">AVVIST</text>
|
||
|
||
<text class="dt" x="8" y="112" font-weight="700">UTEN ekte tall</text>
|
||
<rect class="d" x="8" y="122" width="120" height="0" rx="4"/>
|
||
<rect class="d" x="8" y="102" width="120" height="40" rx="4"/>
|
||
<text class="dt-s" x="68" y="126" text-anchor="middle">Oppdiktet forslag</text>
|
||
<path class="d" d="M128 122 h30"/><path class="fill" d="M168 122 l-11 -5 v10 z"/>
|
||
<rect class="d dim" x="168" y="102" width="150" height="40" rx="4" stroke-dasharray="6 5"/>
|
||
<text class="dimt" x="243" y="126" text-anchor="middle">ingenting å avstemme mot</text>
|
||
<path class="d" d="M318 122 h30"/><path class="fill" d="M358 122 l-11 -5 v10 z"/>
|
||
<text class="dt" x="370" y="127" font-weight="700">GODKJENT</text>
|
||
<text class="dimt" x="440" y="127">— og kjøringen ser helt normal ut</text>
|
||
</svg>
|
||
</figure>
|
||
|
||
<p><strong>Gjør dette:</strong> list opp hver kostnadslinje tiltakene kan komme til å treffe, med
|
||
mengde og enhetspris. Ikke bare linjen til det tiltaket du tror på — alle linjene som er i spill.</p>
|
||
<p><strong>Ta ikke med tall du ikke har.</strong> Har dere ingen kilde på hva noe koster per enhet,
|
||
skal linjen utelates. En utledet verdi hører ikke hjemme her.</p>
|
||
<div class="done"><b>Ferdig når</b>Hver linje har en mengde og en enhetspris, og du kan si hvor
|
||
hvert tall kom fra. Får du ikke tak i tallene: skriv uttrykkelig at kjøringen blir uforankret, så
|
||
ingen leser et godkjent-resultat som mer enn det er.</div>
|
||
</section>
|
||
|
||
<section class="slide">
|
||
<p class="kicker">Ramme</p>
|
||
<h2><span class="step">3</span> Skriv ned hva som allerede er gjort</h2>
|
||
<p>Systemet vet ingenting om anlegget utover det basen sier. Er noe allerede bygget om, og det
|
||
ikke står noe sted, vil systemet foreslå det på nytt — og love en besparelse som allerede er tatt ut.</p>
|
||
|
||
<figure>
|
||
<svg viewBox="0 0 720 130" role="img" aria-label="Gjennomførte tiltak hører i anleggsbeskrivelsen, tidligere vurderinger i erfaringslaget">
|
||
<rect class="d" x="8" y="14" width="340" height="100" rx="4"/>
|
||
<text class="dt" x="178" y="42" text-anchor="middle" font-weight="700">Gjennomførte tiltak</text>
|
||
<text class="dt-s" x="178" y="66" text-anchor="middle">hva som faktisk er bygget om,</text>
|
||
<text class="dt-s" x="178" y="84" text-anchor="middle">når, og på hvor mye av anlegget</text>
|
||
<text class="dt-s" x="178" y="106" text-anchor="middle">→ inn i anleggsbeskrivelsen</text>
|
||
|
||
<rect class="d" x="372" y="14" width="340" height="100" rx="4"/>
|
||
<text class="dt" x="542" y="42" text-anchor="middle" font-weight="700">Tidligere vurderinger</text>
|
||
<text class="dt-s" x="542" y="66" text-anchor="middle">hva fagfolk mente om et forslag,</text>
|
||
<text class="dt-s" x="542" y="84" text-anchor="middle">og hvor mye som faktisk ble realisert</text>
|
||
<text class="dt-s" x="542" y="106" text-anchor="middle">→ inn i erfaringslaget (steg 7)</text>
|
||
</svg>
|
||
</figure>
|
||
|
||
<p><strong>Gjør dette:</strong> lag en kort liste over gjennomførte tiltak, og sørg for at
|
||
kostnadstallene fra steg 2 viser <em>dagens</em> situasjon — ikke situasjonen før forrige tiltak.</p>
|
||
<div class="done"><b>Ferdig når</b>Ingen kan peke på et tiltak som er gjennomført uten å stå i
|
||
basen, og kostnadstallene stemmer med hva anlegget bruker i dag.</div>
|
||
</section>
|
||
|
||
<section class="slide">
|
||
<p class="kicker">Innhold</p>
|
||
<h2><span class="step">4</span> Beskriv anlegget og rammene</h2>
|
||
<p>Ett kort dokument som svarer: hva er dette anlegget, hva består det av, og hva kan
|
||
<em>ikke</em> fravikes?</p>
|
||
<p><strong>Rammene er den viktigste halvdelen.</strong> Uten dem foreslår systemet tiltak som
|
||
bryter krav ingen har fortalt det om — og fagpersonen må bruke tid på å avvise det samme igjen
|
||
og igjen.</p>
|
||
<table>
|
||
<tr><th>Ta med</th><th>Eksempeltype</th></tr>
|
||
<tr><td>Hva anlegget består av</td><td>antall enheter, alder, tilstand, kapasitet</td></tr>
|
||
<tr><td>Dagens forbruk eller kostnad</td><td>gulvet ingen besparelse kan gå under</td></tr>
|
||
<tr><td>Krav som ikke kan fravikes</td><td>minstekrav, sikkerhetskrav, avtalefestede nivåer</td></tr>
|
||
<tr><td>Antakelser som ikke holder</td><td>«vi kan ikke forutsette at X er mulig her»</td></tr>
|
||
</table>
|
||
<div class="done"><b>Ferdig når</b>En fagperson som ikke kjenner anlegget kan lese dokumentet og
|
||
vite hva som er lov å foreslå.</div>
|
||
</section>
|
||
|
||
<section class="slide">
|
||
<p class="kicker">Innhold</p>
|
||
<h2><span class="step">5</span> Skriv tiltaksnotatene</h2>
|
||
<p>Ett kort notat per kandidat-tiltak. Systemet skal <em>forbedre</em> disse, ikke finne opp sine
|
||
egne fra bunnen — så jo mer konkrete de er, jo bedre blir svaret.</p>
|
||
<p><strong>Hvert notat skal ha:</strong> hva tiltaket går ut på, hvilke kostnadslinjer det virker
|
||
på, hvor mye det er beregnet å spare, hva som er usikkert, og hva som er utledet framfor målt.</p>
|
||
<p><strong>Trenger du hjelp til å finne kandidatene?</strong> For de fleste anleggstyper finnes
|
||
det et ganske stabilt sett tiltakstyper — utskifting til nyere teknologi, behovsstyring framfor
|
||
fast drift, tilstandsbasert vedlikehold framfor intervallbasert, og levetidsforlengelse framfor
|
||
utskifting. Fagmiljøet har listen for sin type; jobben er å avgjøre hvilke som er aktuelle her.</p>
|
||
<div class="note"><strong>Filteret som avgjør:</strong> et tiltak må kunne uttrykkes som en
|
||
kostnadslinje — en mengde ganger en enhetspris. Kan det ikke det, kan systemet foreslå det, men
|
||
ikke kontrollere det. Da er svaret verdt akkurat like mye som et vanlig godt råd.</div>
|
||
<div class="done"><b>Ferdig når</b>Hvert notat peker på kostnadslinjer som finnes i steg 2, og
|
||
det er tydelig merket hva som er målt og hva som er antatt.</div>
|
||
</section>
|
||
|
||
<section class="slide">
|
||
<p class="kicker">Innhold</p>
|
||
<h2><span class="step">6</span> Velg det ene tiltaket som skal regnes på</h2>
|
||
<p>Én kandidat får en egen, presis form som den deterministiske kontrollen kan konsumere:
|
||
kostnadslinjene den virker på, den beregnede besparelsen, og et usikkerhetsbånd.</p>
|
||
<p><strong>Denne kandidaten er også nøkkelen til tidligere erfaring</strong> — det er dens
|
||
kostnadslinjer og størrelsesorden som avgjør hvilke tidligere dommer systemet henter fram.</p>
|
||
|
||
<figure>
|
||
<svg viewBox="0 0 720 120" role="img" aria-label="Den regnede kandidaten og kostnadsgrunnlaget skrives fra samme regnestykke">
|
||
<rect class="d" x="200" y="8" width="320" height="40" rx="4" stroke-width="3"/>
|
||
<text class="dt" x="360" y="33" text-anchor="middle" font-weight="700">Ett regnestykke</text>
|
||
<path class="d" d="M300 48 C 300 68, 180 68, 180 82"/><path class="fill" d="M180 92 l-5 -11 h10 z"/>
|
||
<path class="d" d="M420 48 C 420 68, 540 68, 540 82"/><path class="fill" d="M540 92 l-5 -11 h10 z"/>
|
||
<rect class="d" x="50" y="92" width="260" height="24" rx="4"/>
|
||
<text class="dt-s" x="180" y="109" text-anchor="middle">Kostnadsgrunnlaget (steg 2)</text>
|
||
<rect class="d" x="410" y="92" width="260" height="24" rx="4"/>
|
||
<text class="dt-s" x="540" y="109" text-anchor="middle">Den regnede kandidaten</text>
|
||
</svg>
|
||
<figcaption>Samme kostnadslinje, samme mengde, samme enhetspris — skrevet ut fra ett regnestykke.</figcaption>
|
||
</figure>
|
||
|
||
<div class="done"><b>Ferdig når</b>Kandidaten og kostnadsgrunnlaget bærer nøyaktig samme tall for
|
||
de linjene de deler. Er de skrevet inn hver for seg, blir et lite avvik bare slurv — ikke et signal.</div>
|
||
</section>
|
||
|
||
<section class="slide">
|
||
<p class="kicker">Bind sammen</p>
|
||
<h2><span class="step">7</span> Legg inn metode, kilder og første erfaring</h2>
|
||
<p>Tre korte dokumenter som gjør forskjellen mellom et tall og et troverdig tall.</p>
|
||
<table>
|
||
<tr><th>Dokument</th><th>Hvem</th><th>Svarer på</th></tr>
|
||
<tr><td><strong>Metode</strong></td><td>fagmiljøet</td>
|
||
<td>hvordan skal effekten måles i etterkant — og hvilke metoder er stengt for dette anlegget?</td></tr>
|
||
<tr><td><strong>Kilder</strong></td><td>fagmiljøet</td>
|
||
<td>hva sier litteraturen om avviket mellom beregnet og faktisk effekt? Med årstall og opphav.</td></tr>
|
||
<tr><td><strong>Første erfaring</strong></td><td>fageksperten</td>
|
||
<td>hva pleier å skje? «Forvent rundt X prosent av beregnet, fordi …»</td></tr>
|
||
</table>
|
||
<p><strong>Skill eget materiale fra lånt.</strong> Har dere ingen egne målinger og må låne et tall
|
||
fra litteraturen, skal det stå uttrykkelig at det er lånt. Det er ikke en svakhet — det er det som
|
||
gjør at neste person kan vurdere om lånet holder.</p>
|
||
<div class="done"><b>Ferdig når</b>Hvert tall som ikke er målt hos dere, har en navngitt kilde
|
||
ved siden av seg.</div>
|
||
</section>
|
||
|
||
<section class="slide">
|
||
<p class="kicker">Bind sammen</p>
|
||
<h2><span class="step">8</span> Skriv innholdsfortegnelsen som binder alt</h2>
|
||
<p>Systemet <strong>navigerer</strong>, det søker ikke. Det starter i innholdsfortegnelsen, følger
|
||
lenkene derfra, og leser hvert dokument det når — helt, eller ikke i det hele tatt.</p>
|
||
|
||
<figure>
|
||
<svg viewBox="0 0 720 180" role="img" aria-label="Innholdsfortegnelsen lenker til dokumentene; et dokument uten lenke nås aldri">
|
||
<rect class="d" x="30" y="60" width="130" height="56" rx="4"/>
|
||
<text class="dt" x="95" y="83" text-anchor="middle">Innholds-</text>
|
||
<text class="dt" x="95" y="101" text-anchor="middle">fortegnelse</text>
|
||
|
||
<rect class="d" x="290" y="14" width="180" height="34" rx="4"/>
|
||
<text class="dt-s" x="380" y="35" text-anchor="middle">Anlegg og rammer</text>
|
||
<rect class="d" x="290" y="58" width="180" height="34" rx="4"/>
|
||
<text class="dt-s" x="380" y="79" text-anchor="middle">Tiltaksnotater</text>
|
||
<rect class="d" x="290" y="102" width="180" height="34" rx="4"/>
|
||
<text class="dt-s" x="380" y="123" text-anchor="middle">Metode og kilder</text>
|
||
|
||
<path class="d" d="M160 82 C 210 82, 230 31, 280 31"/><path class="fill" d="M290 31 l-11 -5 v10 z"/>
|
||
<path class="d" d="M160 88 h120"/><path class="fill" d="M290 75 l-11 -5 v10 z"/>
|
||
<path class="d" d="M160 94 C 210 94, 230 119, 280 119"/><path class="fill" d="M290 119 l-11 -5 v10 z"/>
|
||
|
||
<rect class="hatch" x="30" y="132" width="180" height="34" rx="4" stroke-dasharray="5 4"/>
|
||
<text class="dimt" x="120" y="153" text-anchor="middle">dokument uten lenke — finnes ikke</text>
|
||
|
||
<rect class="d dim" x="530" y="58" width="160" height="34" rx="4" stroke-dasharray="5 4"/>
|
||
<text class="dimt" x="610" y="79" text-anchor="middle">annen base</text>
|
||
<path class="d dim" d="M470 75 h44" stroke-dasharray="6 5"/>
|
||
<path class="d" d="M480 63 l22 24 M502 63 l-22 24" stroke-width="2.5"/>
|
||
<text class="dimt" x="610" y="112" text-anchor="middle">lenker ut følges aldri</text>
|
||
</svg>
|
||
</figure>
|
||
|
||
<p><strong>Gjør dette:</strong> skriv et kort avsnitt om hva prosjektet er og hvorfor dette
|
||
fagområdet er valgt — det er det aller første systemet leser — og lenk til hvert eneste dokument
|
||
du vil at det skal se.</p>
|
||
<div class="done"><b>Ferdig når</b>Hvert dokument du har laget er lenket. Et dokument uten lenke
|
||
eksisterer ikke, uansett hvor det ligger. Og trenger du fagstoff fra en annen base: kopier det
|
||
inn — lenker ut av basen følges aldri, men tørrkjøringen lister dem, så du ser at det skjedde.</div>
|
||
</section>
|
||
|
||
<section class="slide">
|
||
<p class="kicker">Kjør og lær</p>
|
||
<h2><span class="step">9</span> Sjekk at basen åpner, så kjør</h2>
|
||
<p>Kjør en tørrkjøring først. Den går hele veien fram til det første kallet mot språkmodellen og
|
||
stopper der — den koster ingenting, og kan kjøres hver gang basen endres.</p>
|
||
<table>
|
||
<tr><th>Tørrkjøringen beviser</th><th>Den beviser ikke</th></tr>
|
||
<tr><td>at basen åpner</td><td>at innholdet er godt</td></tr>
|
||
<tr><td>at navnet stemmer overalt</td><td>at forslagene blir kloke</td></tr>
|
||
<tr><td>at kostnadsgrunnlaget er lesbart</td><td>at alt du laget faktisk er lenket</td></tr>
|
||
<tr><td>hvilke lenker den ikke klarte å følge</td><td>—</td></tr>
|
||
<tr><td>at ingen ekstern tjeneste kontaktes</td><td>—</td></tr>
|
||
</table>
|
||
<p>Mangler kostnadsgrunnlaget, sier tørrkjøringen fra. Er en lenke brutt, stopper den fortsatt
|
||
ikke kjøringen — men den skrives ut, med dokumentet den pekte på og hvorfor den ikke ble fulgt
|
||
(<code>missing</code> = ingen fil der, <code>outside-bundle</code> = peker ut av basen). Er alle
|
||
lenker fulgt, står det ingenting. Den feilen den fortsatt ikke kan se, er dokumentet
|
||
<em>ingen</em> lenker til — da finnes det ingen lenke å rapportere.</p>
|
||
<div class="done"><b>Ferdig når</b>Tørrkjøringen er grønn, den lister ingen lenker den ikke fulgte,
|
||
og du har lest gjennom listen over dokumenter den faktisk fant.</div>
|
||
</section>
|
||
|
||
<section class="slide">
|
||
<p class="kicker">Kjør og lær</p>
|
||
<h2>Etter kjøringen: dommen tilbake i basen</h2>
|
||
|
||
<figure>
|
||
<svg viewBox="0 0 720 210" role="img" aria-label="Kjøring gir forslag, fagperson dømmer, dommen leses av neste kjøring">
|
||
<rect class="d" x="30" y="24" width="150" height="46" rx="4"/>
|
||
<text class="dt" x="105" y="52" text-anchor="middle">Kjøring</text>
|
||
<path class="d" d="M180 47 h64"/><path class="fill" d="M254 47 l-11 -5 v10 z"/>
|
||
|
||
<rect class="d" x="254" y="24" width="180" height="46" rx="4"/>
|
||
<text class="dt" x="344" y="44" text-anchor="middle">Forslag + kontroll</text>
|
||
<text class="dt-s" x="344" y="62" text-anchor="middle">ett per vurdert tilnærming</text>
|
||
<path class="d" d="M434 47 h64"/><path class="fill" d="M508 47 l-11 -5 v10 z"/>
|
||
|
||
<rect class="d" x="508" y="24" width="182" height="46" rx="4" stroke-width="3"/>
|
||
<text class="dt" x="599" y="44" text-anchor="middle" font-weight="700">Fagperson dømmer</text>
|
||
<text class="dt-s" x="599" y="62" text-anchor="middle">godkjent / avvist / korrigert</text>
|
||
|
||
<path class="d" d="M599 70 v42 H344"/><path class="fill" d="M344 112 l11 -5 v10 z"/>
|
||
<rect class="d" x="254" y="112" width="180" height="46" rx="4"/>
|
||
<text class="dt" x="344" y="140" text-anchor="middle">Innboks</text>
|
||
|
||
<path class="d" d="M254 135 H105 V76"/><path class="fill" d="M105 70 l-5 11 h10 z"/>
|
||
<text class="dt-s" x="118" y="105">leses før neste forslag</text>
|
||
|
||
<text class="dimt" x="360" y="192" text-anchor="middle">systemet leser innboksen — mennesket skriver den</text>
|
||
</svg>
|
||
</figure>
|
||
|
||
<p>Neste kjøring leser dommene <em>før</em> den former sitt forslag. Dommen påvirker altså det
|
||
neste forslaget, ikke bare arkivet. Godkjennes en dom for varig bruk, løftes den inn i basen.</p>
|
||
<div class="note"><strong>Regelen som ikke kan brytes:</strong> systemet leser innboksen,
|
||
mennesket skriver den. En kjøring lagrer aldri sin egen vurdering tilbake som kunnskap — ellers
|
||
ville systemet lært av seg selv.</div>
|
||
</section>
|
||
|
||
<section class="slide">
|
||
<p class="kicker">Underveis</p>
|
||
<h2>Må systemet spørre andre fagsystemer?</h2>
|
||
<p>Utgangspunktet er <strong>ingen integrasjon</strong>: uten konfigurasjon gjøres null
|
||
nettverkskall. Trenger du likevel data fra et annet system, er det to helt ulike veier — og valget
|
||
avgjøres av <em>når</em> svaret trengs.</p>
|
||
<table>
|
||
<tr><th></th><th>Hent på forhånd</th><th>Slå opp underveis</th></tr>
|
||
<tr><td>Når</td><td>før kjøringen</td><td>mens forslaget formes</td></tr>
|
||
<tr><td>Blir</td><td>et dokument i basen</td><td>et verktøy systemet kan kalle</td></tr>
|
||
<tr><td>Fordel</td><td>fagpersonen kan lese og korrigere det først</td><td>fanger opp noe som endrer seg</td></tr>
|
||
<tr><td>Krever</td><td>opphav og dato på dokumentet</td><td>uttrykkelig liste over tillatte kall</td></tr>
|
||
<tr><td>Nettverk under kjøring</td><td>null</td><td>ja, og alt navngis på forhånd</td></tr>
|
||
</table>
|
||
<p><strong>Velg «hent på forhånd» hvis du kan.</strong> Det er billigere, det kan kvalitetssikres
|
||
av et menneske, og det gjør at du kan si nøyaktig hva en kjøring har rørt.</p>
|
||
</section>
|
||
|
||
<section class="slide">
|
||
<p class="kicker">Sjekkliste</p>
|
||
<h2>Hvem leverer hva</h2>
|
||
<table>
|
||
<tr><th>Steg</th><th>Hvem</th><th>Leveranse</th></tr>
|
||
<tr><td>1</td><td>Prosjekteier</td><td>anlegg og navn</td></tr>
|
||
<tr><td><strong>2</strong></td><td><strong>Drift / økonomi</strong></td><td><strong>kostnadslinjer med mengde og enhetspris</strong></td></tr>
|
||
<tr><td>3</td><td>Drift</td><td>liste over allerede gjennomførte tiltak</td></tr>
|
||
<tr><td>4</td><td>Prosjekteier + fagmiljø</td><td>anleggsbeskrivelse og rammer</td></tr>
|
||
<tr><td>5</td><td>Drift + fagmiljø</td><td>kandidat-tiltak med parametere</td></tr>
|
||
<tr><td>6</td><td>Teknisk person</td><td>den ene kandidaten i presis form</td></tr>
|
||
<tr><td>7</td><td>Fagmiljø + fagekspert</td><td>metode, kilder, første erfaring</td></tr>
|
||
<tr><td>8</td><td>Teknisk person</td><td>innholdsfortegnelsen med alle lenker</td></tr>
|
||
<tr><td>9</td><td>Teknisk person</td><td>tørrkjøring, så kjøring</td></tr>
|
||
</table>
|
||
<p>Steg 2 er markert fordi det er det som stopper prosjekter. Alt annet kan skrives på en dag
|
||
hvis fagpersonene er tilgjengelige.</p>
|
||
</section>
|
||
|
||
<section class="slide">
|
||
<p class="kicker">Fallgruver</p>
|
||
<h2>De fem feilene som koster mest</h2>
|
||
<ol>
|
||
<li><strong>Ingen kostnadstall.</strong> Kjøringen går, resultatet ser normalt ut, og kontrollen
|
||
dømmer bare mot tall forslaget fant på selv. Dette er den dyreste feilen, fordi den er usynlig.</li>
|
||
<li><strong>Gjennomførte tiltak står ikke i basen.</strong> Systemet foreslår dem på nytt, og
|
||
besparelsen dobbelttelles.</li>
|
||
<li><strong>Dokumenter uten lenke.</strong> De leses aldri, og ingen feilmelding sier fra —
|
||
for det finnes ingen lenke å klage på. Er lenken der, men feil, sier tørrkjøringen nå fra;
|
||
er den aldri skrevet, er dokumentet usynlig. Symptomet er at forslagene virker uinformerte
|
||
uten at noen skjønner hvorfor.</li>
|
||
<li><strong>For mye materiale.</strong> Alt som lenkes leses i sin helhet. Ti sider støy koster
|
||
like mye oppmerksomhet som ti sider substans.</li>
|
||
<li><strong>Utledede tall.</strong> Et tall ingen kan peke på en kilde for, forurenser alt som
|
||
bygger på det. Mangler et tall, skal det stå som manglende.</li>
|
||
</ol>
|
||
</section>
|
||
|
||
<section class="slide">
|
||
<p class="kicker">Til slutt</p>
|
||
<h2>Hva dette lover — og ikke lover</h2>
|
||
<ul>
|
||
<li><strong>Én til to uker</strong> for en god base. Det tunge er ikke teknikken, men å få tak i
|
||
kostnadstallene og å få en fagperson til å skrive ned rammene sine.</li>
|
||
<li><strong>Det finnes ingen automatikk</strong> som lager basen av regnearkene deres. Det er
|
||
håndarbeid, og det er derfor det tar tid.</li>
|
||
<li><strong>Det finnes ingen «er basen klar»-knapp.</strong> Tørrkjøringen er det nærmeste: den
|
||
sier fra om kostnadsgrunnlaget mangler og lister lenkene den ikke klarte å følge, men den sier
|
||
ingenting om et dokument ingen har lenket til, og ingenting om innholdet er godt.</li>
|
||
<li><strong>Systemet dømmer ikke.</strong> Det foreslår og kontrollerer regnestykket.
|
||
Vurderingen av om tiltaket er klokt, gjør fagpersonen — og den vurderingen er det basen lærer av.</li>
|
||
</ul>
|
||
<div class="note">Basen blir bedre for hver kjøring, men bare hvis noen faktisk avgir dommen
|
||
etterpå. En base ingen dømmer imot, står stille.</div>
|
||
</section>
|
||
|
||
<nav>
|
||
<button id="prev">← Forrige</button>
|
||
<button id="next">Neste →</button>
|
||
<span id="pos"></span>
|
||
</nav>
|
||
|
||
<script>
|
||
const slides = document.querySelectorAll('.slide');
|
||
let i = 0;
|
||
function show(n) {
|
||
i = Math.max(0, Math.min(slides.length - 1, n));
|
||
slides.forEach((s, k) => s.classList.toggle('on', k === i));
|
||
document.getElementById('pos').textContent = (i + 1) + ' / ' + slides.length;
|
||
window.scrollTo(0, 0);
|
||
}
|
||
document.getElementById('prev').onclick = () => show(i - 1);
|
||
document.getElementById('next').onclick = () => show(i + 1);
|
||
document.addEventListener('keydown', e => {
|
||
if (e.key === 'ArrowRight' || e.key === 'PageDown' || e.key === ' ') show(i + 1);
|
||
if (e.key === 'ArrowLeft' || e.key === 'PageUp') show(i - 1);
|
||
});
|
||
show(0);
|
||
</script>
|
||
</html>
|