Commit graph

425 commits

Author SHA1 Message Date
baae7507a9 feat(okf): den erklaerte bundle_id-en er identiteten - mountet er en filsystem-tilfeldighet
S7a-3 pkt. 1. Til i dag NEKTET reconcile_bundle_id en base som erklaerte en id
katalogen ikke bar. Maalt mot K2 - den foerste leverte basen som erklaerer sin
egen id (618 av 630 konseptfiler + rot-index, alle "k2-trinn1-20260903", levert
som "K2-bundle-20260903") - betydde det at basen ikke kunne aapnes slik den var
levert, og at eneste botemiddel var aa montere den paa nytt for haand, en gang
per leveranse. PM-beslutning: konsumenten slakker.

- Erklaert vinner (B1s rekkefoelge uroert), avviket REGISTRERES:
  ResolvedBundleId.mount + ProvenanceStamp.bundle_id_source +
  DryRunReport.bundle_id_source + run.bundle_id_notice (None ved enighet).
  Stempel-feltet er PAAKREVD uten default: None er en VERDI (veg-stien).
- Det som fortsatt nekter er den EKTE kollisjonen: to KONSEPTER i en base som
  erklaerer ULIKE id-er (okf.assert_declared_ids_agree, kalt ved hver doer som
  aapner en base). Rot-index er IKKE med i enighets-settet - konsept-slaar-index
  er en presedens-regel, saa en index i utakt er fallbacken som taper.
- KONSEKVENS, ikke scope-krype: explore._bundle_index loeser naa den erklaerte
  id-en. Den brukte Path(raw).name mens dispatcheren brukte reconcile...id; med
  erklaert-vinner ville explore() myntet approaches som navngir MOUNTET mens
  dispatcheren ruter paa ERKLAERINGEN - en utforskning med uruterbart mandat.

Load-bearing MAALT: 10 mutasjoner alle roede mot HELE suiten, groenn kontroll
1243 passed / 5 skipped og golden demo-transcript.stdout byte-uendret
(shasum -a 1 = ea8c534773acdbe41ae68f2c55724d69aaf8be4f).
M1 1 / M2 1 / M3 1 / M4 9 / M5 2 / M6 1 / M7 1 / M8 2 / M9 2 / M11 1.

Tre armer i test_bundle_id_reconciliation_loadbearing er SKREVET OM (ikke
slettet) - de pinnet nekten beslutningen fjernet. (j) ble skarpere enn den den
erstattet: erklaert id ruter, mountet nektes.

Kontrakt: docs/okf-konsum-kontrakter.md § 3.1. Invariantrad i CLAUDE.md.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 06:47:58 +02:00
5adb1cca62 fix(docs): rediger vekk absolutt hjemmesti i S7a-2-rapporten - handover-gaten var roed paa HEAD
Ikke en del av S7a-3s fire punkter, men funnet mens kontrollen ble kjoert:
test_package_leaks_no_secret_content leser `git archive HEAD`, saa den ble roed
foerst etter at 1c540e6 var committet (funn 35: gaten er ekte, men forsinket med
en commit). Rapportens ene `/Users/ktg/corpora/...` er erstattet med `~/corpora/...`
- samme kommando, ingen hjemmesti i en pakke en ekstern organisasjon faar.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 06:02:17 +02:00
53e32bb180 docs(s7a-3): golden-hashen er sha1 av innhold, ikke git-blob - ni rader var riktige, etiketten manglet
Punkt 4 i ordre 20260903T034323Z-7704222791. MAALT, ikke gjettet:

    $ shasum -a 1 tests/golden/demo-transcript.stdout
    ea8c534773acdbe41ae68f2c55724d69aaf8be4f
    $ git hash-object tests/golden/demo-transcript.stdout
    55bdea3ad2

ea8c534... ER sha1 av filas innhold. De ni invariant-radene som siterer den er
altsaa RIKTIGE - de var bare umerket, og en oekt som soekte etter verdien som
git-objekt fant ingenting og leste fraveaeret som en fantomverdi. Git hasher
over "blob <len>\0" + innhold, saa de to kan aldri sammenfalle.

Hver av de ni radene baerer naa etiketten "shasum -a 1 = ...", og
golden-fasit-raden (P4 pkt. 3) forklarer skillet en gang, med begge par
(stdout: ea8c534 innhold / 55bdea3 blob; stderr: ede3e2f innhold /
12893ec blob).

Ingen kode roert; ingen gate lagt til (ordren ber om en docs-commit).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 05:50:54 +02:00
1c540e63f1 docs(s7a2): re-maalt mot ekte K2 - adjudication innfridd, read_bundle ble 90 % av kjoeringen
Maaling, ingen produksjonskode. Kontroll 1230/5 uendret, ruff ren, golden byte-uendret
(shasum -a 1 = ea8c534..., som CLAUDE.md-radene foerer).

Fem punkter re-maalt mot K2-bundle-20260903 (629 konsepter, 478 nestede indekser):

1. NYTT KRAV 4: basen kan ikke aapnes slik den er levert. Rot-index erklaerer
   bundle_id 'k2-trinn1-20260903', katalogen heter 'K2-bundle-20260903' -> D6/B1
   nekter med BundleIdMismatch. Foerste gang en declared-gren fyrer i naturen
   (619 filer erklaerer noekkelen; CLAUDE.md foerer begge grener som defensive).
   Botemiddelet er et staaende MANUELT steg per leveranse, og hvilket repo som
   skal endre seg er en kryss-repo-beslutning.
2. adjudication INNFRIDD: 618 proposed / 0 adjudicated / 11 unknown av 629 -
   produsentens tall bekreftet eksakt. Nevnerne sammenfaller fordi log.md er
   foreldreloes (paa disk, aldri lenket, derfor heller ikke en ufulgt lenke);
   skipped=0 betyr altsaa ikke "alt ble naadd".
3. Falsifiseringen er UENDRET: verified/sources finnes ingen steder, saa
   admits_falsification er False 629/629 og dommen undecided. Kjent-positiv
   kontroll paa patchet kopi flipper til True - gaten diskriminerer.
4. read_bundle er blitt kostnaden: 2 312 -> 42 761 tok, og resultatet rir i
   7 av 12 prompter = 307 496 tok = 90 % av alle prompt-tokens. MAJOR-3s
   asymptotiske paastand holder, men konstanten er naa hele regningen.
   S7a-rapportens 40 320/13 var revise-kjeden; like-for-like baseline er
   maalt paa nytt (39 500/11 -> 343 437/12), og 96 % av differansen er
   read_bundle alene, ikke manus-forskjellen. Stigen mangler et trinn: 478
   nestede indekser konsumeres av navigasjonen og forkastes av context_files.
5. Produsentens token-derivasjon for stoerste konsept var 18 % for lav
   (~98 700 derivert vs 119 763 maalt); tegn-tellingene stemmer til +/-1.

S7b: krav 3 innfridd, krav 1 (validator-input.json) og 2 (utfylt prisskjema)
UENDRET og begge kryss-repo, krav 4 er nytt. derive_cost_baseline nekter
fortsatt; kjent-positiv fixture gir 3 kostlinjer.

Paragraf 8 baerer en RETTELSE av min egen feil, beholdt synlig: rapporten paasto
foerst at CLAUDE.md-ens golden-fasit ea8c534 var en fantomhash. Den er
shasum -a 1 av INNHOLDET; jeg maalte git hash-object (55bdea3, hashes over
blob<len>NUL+innhold og dermed ulik av konstruksjon), fikk ikke treff, og leste
et negativt resultat fra feil spoerring som et faktum. De ni invariant-radene er
RIKTIGE. Verifiseringsloven ansikt 4 mot mitt eget instrument.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 05:46:26 +02:00
98e648310c docs(s7a): SS 5s "deler aarsak" var en paastand, ikke en maaling - og maalingen felte tallet
Rapporten paasto at de tre stoerste postene "deler aarsak: alle tre baerer
navigatoerens read_file". Det var aldri maalt. Ved aa maale det kom TO ting fram.

1. Aarsaken stemmer, og er naa dekomponert: verktoeyRESULTATENE utgjoer 87-93 % av
   hver av de tre stoerste promptene (6 527 tok), og enkeltvis er det read_file
   4 043 (62 %), read_bundle 2 354 (36 %), list_bundles 130 (2 %). read_file er
   4 043 baade i prompten og maalt isolert, saa det som rir med er hele
   returverdien - ikke en forkortet form.

2. MITT EGET INSTRUMENT VAR FEIL. Sonden summerte Message.text OG hvert
   Content.text, men Message.text ER sammenkjedingen av tekst-innholdet - altsaa
   ble tekstdelen talt to ganger. Totalen 45 643 er forkastet; riktig tall er
   40 320 over 13 prompter (manager 61 %, navigator 23 %, hypotesiser 16 %), og
   de tre stoerste er 7 532 / 7 468 / 7 037 = 55 %, ikke 8 572 / 8 444 / 7 582.
   Feilen var IKKE synlig i totalen. Den ble synlig foerst da sammensetningen ble
   brutt ned - som er hele grunnen til at en total ingen har dekomponert er en
   total ingen har kontrollert. Begge instrumentfeilene staar naa i SS 0.

Ogsaa: SS 1c skilte ikke maalt faktum fra min tolkning av hva 1 500-tegns-taket
"er". Faktumet staar (K2s read_bundle er 6 244 tegn mot en gate skrevet for
3-dokuments baser); lesningen av hva taket er ment aa binde tilhoerer den som
eier gaten.

Ingen produksjonskode. Doc-gatene gronne (25 passed).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 03:42:18 +02:00
73827a854a docs(s7a): syretesten maalt paa K2 - navigasjonen holder, tre krav staar igjen
MAALING, ingen produksjonskode. Instrumentet validert mot publisert fasit FOER
bruk (tunnel read_bundle 259 tok, bundle_context 12 595 tok - begge eksakt).

Tre premisser felt av maalingen i stedet for omgaatt:
- ordrens "ny profil med adjudication": 0 av 39 konsepter baerer noekkelen
  (kjent-positiv kontroll: 39 av 39 baerer ^type). Ingen verified/sources heller.
- ordrens punkt 4 ber om et konsept med adjudication: proposed - det finnes ikke.
  K5-terskelen er derfor kjoert paa det korpuset faktisk baerer, mot en patchet
  kopi som kontroll: admits_falsification flipper False -> True, saa "alle 39
  diskontert" er en maaling av korpuset og ikke av en doed funksjon.
- mandat-diffen foer/etter revise er TOM ved konstruksjon (hypotesiseren er et
  konstant manus). Maalt i stedet: kjeden i tre ledd. Operatoerens tekst naar
  manageren (6 av 8 kall), aldri deltakerne direkte (0 av 4 / 0 av 1); den naar
  hypotesiseren KUN via managerens egen instruction_or_question (1 av 1,
  diskriminerende sentinel), aldri via plan-teksten. Ledd 3 er ikke maalbar
  offline og er rapportert som det.

Maalt ellers: 39 konsepter, 0 ufulgte lenker, bundle_id mount-derived (foerste i
naturen). list_bundles 127 tok, read_bundle 2 312 tok, bundle_context 682 303 -
MAJOR-3 er det som gjoer K2 navigerbar i det hele tatt, ikke bare billigere.
tool_calls: list_bundles -> read_bundle -> read_file, i rekkefoelge (plan SS 5s
dialog-rad oppfylt). Ingen "object at" noe sted (BLOCKER-1 lukket paa begge
doerene); current_progress sier "(no progress ledger yet)" (PM-tillegg 4 lukket).
Tokenprofil 45 643 o200k over 13 prompter; de tre stoerste postene er 54 % og
deler aarsak: navigatoerens read_file rir med i hver senere prompt.

Tre krav for S7b, i den rekkefoelgen de blokkerer:
1. bundelen mangler validator-input.json - kjoeringen nekter etter utforskningen
   uansett priser. Kryss-repo mot llm-ingestion-okf.
2. MAJOR-4 nekter mot det ekte prisskjemaet (ingen tabell med alle tre roller;
   "Enhetspris" forekommer 0 ganger; eneste prisede rad er post 82 = 5 647 500).
   Kontroll: syntetisk fixture gir 3 kostlinjer, saa nekten er K2s egenskap.
3. adjudication mangler i hele korpuset. Kryss-repo, samme klasse som 1.

Levende kjoering IKKE gjort - alle fem env-variabler tomme, ingen model_map.
Kontroll: 1230 passed / 5 skipped uendret, golden ea8c534 byte-uendret, ruff ren.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 03:38:52 +02:00
0add73531b feat(okf): derive a cost baseline from a priced schedule, or refuse
MAJOR-4 (misjonsreview v2 section 7), owner B = the consumer. Neither existing
projection into ir.CostBaseline can serve an ingested tender corpus:
cost-baseline.json is hand-written per project and baseline_from_project belongs
to the road domain, so a K2-shaped bundle could be navigated and never anchored.
okf.derive_cost_baseline reads the numbers already in the bundle.

The premise was MEASURED before anything was built on it, and the order's two
pointers named two different forms. examples/*/expected-bundle/ carry pipe
tables, but every one of them is csv- or sql-sourced via render.render_table --
the xlsx path never reaches render_table at all. Measured with pandoc 3.10.2
under the producer's own writer and arguments: extract._extract_office converts,
and inbox.py hands that text to render_inbox_concept untouched, so an
xlsx-sourced concept file carries a pandoc SIMPLE table whose dash rule defines
the column spans. A pipe-only reader would have been inert on exactly the corpus
this exists for. Both forms are read, by two scanners over one role mapping and
one number grammar.

No judgement anywhere: the header vocabulary and the number grammar are closed,
and every ambiguity refuses -- no candidate table, more than one, two columns
claiming one role, two rows sharing a cost code, a row that prices nothing. A
partly-priced schedule refuses in full, because a half-derived baseline anchors
some codes while cost_baseline_anchored reports True.

Wired behind --derive-cost-baseline and never silently: one resolution in
run.py's bundle arm serves both the full run and the dry run, and the refusal
propagates rather than degrading to the file loader.

The two fixtures are pandoc's output verbatim, not hand-typed. The unpriced one
is K2's actual pre-award shape, and the columns survive as blanks -- so the
table IS a candidate and the refusal is the sharp one.

Load-bearing MEASURED: 18 mutations all red against the WHOLE suite, green
control 1230 passed / 5 skipped (from 1208/5, superset, 0 removed), golden
demo-transcript.stdout byte-unchanged (ea8c534773acdbe41ae68f2c55724d69aaf8be4f).
M17 is the one that matters for arm (b): dropping the positivity guard makes the
mutant raise pydantic ValidationError, which IS a ValueError but is NOT the named
class -- so pytest.raises(ValueError) would have stayed green against exactly the
mutation the arm exists to catch. Verified directly, not argued.

Honesty limits stated in the invariant row: NS 3451 section rows are not
classified (K2 itself was not available to measure), the stamp records that a run
was anchored and never which projection anchored it, the hosted surface is
deliberately untouched, and no live K2 file was read.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 03:15:39 +02:00
9e44afeefb docs: name the mechanism behind the untouched-debate proof, and re-measure all three bases
The report's strongest evidence is that the debate's three context copies are
byte-identical before and after. It was established by comparing the per-prompt
proposer/checker token lists, NOT by the probe's carries flag -- which after the
change correctly reports no, because the listing's text is not in the debate's
prompts. A flag that flips for the right reason is not a proof of sameness; the
token counts are. Said once, where the claim is made.

And bygg's copy count was carried over from the middle-slice probe that the
section immediately below declares broken. All three bases are now re-measured
with the corrected ASCII probe; bygg confirms five copies and the same
exploration total. A cell sourced from an instrument you yourself retired is
what that paragraph exists to refuse.
2026-09-03 01:30:09 +02:00
24c45f3ebd docs: the two addendum defects recorded as invariants with their measurements
[skip-docs]

PM addenda 4 and 5 to order 20260902T151931Z-250257273. Each row carries the
decision, the measurement that forced it, and the mutations that turn it red --
including the two the measurement itself corrected: that reverting both
current_progress sites left only a source-inspection arm red, and that an
actorless verified value never reaches trust_tier through evidence_for at all.
2026-09-03 01:29:01 +02:00
d296cffcd5 fix(okf): evidence_for derives a tier only for the key SPEC 5.3 tiers
[skip-docs]

PM addendum 5 to order 20260902T151931Z-250257273, reported at the close of B4
and deliberately left unfixed there as outside that order.

evidence_for(path, key="sources") raised ValueError. The tier was derived
unconditionally through trust_tier, which refuses an entry that names no `by`
actor -- correctly, because a trust level derived from an entry identifying
nobody mints the provenance it claims to read. But `by` is required of a
VERIFICATION entry (SPEC 5.2), not of every provenance key: the agreed
segmented form carries segment_id/source_offset and a sources list carries
id/resource. The guard belonging to one key was being applied to all of them.

trust_tier is UNCHANGED. evidence_for stops applying it to keys it was never
about: _TIERED_KEY names the one key SPEC 5.3 tiers, and every other key comes
back with state / reason / items_seen / entries and tier=None.

admits_falsification moved WITH it, and that is the same fact rather than
scope: it read `tier != "unverified"`, and None != "unverified" is TRUE, so a
present `sources` list would have cleared a threshold about verification. It
now names the tiers that clear it. For every value reachable before this change
both spellings are identical, which is why the existing K5 arms stay green.

Measured, and it corrected the test: an actorless `verified` value never
reaches trust_tier through evidence_for at all -- the decoder refuses that shape
first as unreadable / unsupported-flow. Both guards are now asserted where each
actually lives instead of one asserted where it is not.

Load-bearing measured, four mutations, all red against the WHOLE suite: derive
the tier unconditionally (3 red) - revert the K5 threshold (1, the consequence
arm alone) - "fix" it by never tiering at all (3, including two pre-existing
falsification arms) - loosen trust_tier instead (2, including its own
pre-existing gate). Green control 1208 passed / 5 skipped; golden
demo-transcript.stdout unchanged (ea8c534773acdbe41ae68f2c55724d69aaf8be4f).
2026-09-03 01:28:12 +02:00
7552c0ef73 fix(explore): a plan review never shows an expert the word None and calls it progress
[skip-docs]

PM addendum 4 to order 20260902T151931Z-250257273.

PlanReviewRequest.current_progress and ParkedExploration.current_progress were
both built with str(review.current_progress). The value is a
MagenticProgressLedger | None and is None in every run measured so far, so
str() produced the four characters None, the renderer's truthiness guard found
them non-empty, and the terminal printed a "progress so far" section whose only
content was None. The same four characters went into
{run_id}-plan-review.json -- the one thing that crosses the process boundary in
the asynchronous door, where nobody can ask what it meant.

_progress_text is the ONE conversion, beside _plan_text: absent becomes the
empty string, never "None". The data layer states absence by being absent, as
Bundle.skipped's empty tuple does. The TERMINAL states it in words -- this is
the one surface where omission is wrong, because silence at a gate somebody
signs is exactly what PlanReviewInputError already refuses for EOF.

Measured, and it changed the test: reverting both sites left ONLY a
source-inspection arm red, which is a lint and not a gate, because the first
arms construct a PlanReviewRequest themselves and never enter either site. Each
site now has a behavioural witness that drives the real door -- the terminal for
the synchronous one, the parked question FILE for the asynchronous one.

Load-bearing measured, five mutations, all red against the WHOLE suite, each
with its own signature: both sites reverted (3 red) - synchronous site alone
(2) - parked site alone (2) - the terminal goes silent again (2) - the
placeholder always fires, swallowing a real ledger (1, the control alone).
Green control 1202 passed / 5 skipped; golden demo-transcript.stdout unchanged
(ea8c534773acdbe41ae68f2c55724d69aaf8be4f).

The recorder wiring in resume_exploration is untouched, per the order.
2026-09-03 01:06:27 +02:00
b799cc527f feat(explore): read_bundle costs O(documents), never O(bytes of the base)
[skip-docs]

S2c / MAJOR-3, order 20260902T151931Z-250257273. The measurement landed first
in ce7f687; this commit is the one seam it authorised, plus the after-table.

read_bundle returned okf.bundle_context -- the WHOLE navigated base. Because
the exploration's participants share one conversation history, that single
function_result rode in FIVE later prompts at full price without anyone asking
for it again: 54-59 percent of every prompt-token in a CLI --explore run.

It now returns the catalogue form one rung down the ladder -- one entry per
concept document (name, type, title, chars) -- with read_file as the next rung.
Tunnel base: 12 595 -> 259 o200k tokens, exploration prompt-tokens -91 percent.

The listing is built from Bundle.context_files and never from files: that is
the property which drops the type: verdict layer at every level, and a listing
built from files would route prior verdicts in front of the navigator around
the gated ExpeL fold while every cost arm stayed green.

A premise was felled before anything was built on it: the tunnel base's root
index body is 4 763 chars alone, nearly the whole ceiling, for a field the
catalogue already excerpts and read_file still returns whole. So read_bundle
carries the listing and not the index.

The tool description and the navigator's instruction both claimed "read its
navigated context" and were updated in the same move -- a description that lies
about the body IS the model's instruction. Two pre-existing asserts would have
gone vacuously true against a list and were strengthened rather than left.

Ceiling lives in the test, not in explore.py. Deviation stated there and in the
docs: it bounds CHARACTERS, not tokens, because tiktoken is not a project
dependency and a gate that skips when an optional package is missing is a gate
that can be silently absent; the conversion was measured (2.89 chars/token) and
the order's own token criterion verified once by the instrument.

Load-bearing measured: seven mutations, all red against the WHOLE suite; green
control 1195 passed / 5 skipped (from 1189/5, strict superset); golden
demo-transcript.stdout byte-unchanged; and the debate's three bundle_context
copies are byte-identical before and after, which proves run.py and the
nav-goldens were not touched rather than asserting it.
2026-09-03 00:36:08 +02:00
ce7f687717 docs: read_bundle's context cost measured with a denominator, before any change
S2c / MAJOR-3, order 20260902T151931Z-250257273. The order's rule is MEASURE
FIRST, so the numbers land as their own commit before the seam is touched.

Instrument validated against a known positive before use: it reproduces
commons' own published bundle_context fasit exactly (3 861 / 10 406 / 12 595).
Prompts are measured as text + function_call + function_result -- .text alone
undercounts a prompt whose whole payload is a tool result.

Measured, per CLI --explore run: one read_bundle result rides in FIVE
exploration prompts (navigator 1, manager 3, hypothesiser 1), which is 54-59
percent of every prompt-token in the run. The debate's three copies come from
run.py's okf.bundle_context and are a separate decision; they are in the table
as denominator and as the after-control, never as the target.

One premise felled before building on it: the tunnel base's root index body is
4 763 chars alone, nearly the whole 1 500-token ceiling, so read_bundle carries
the concept listing and not the index body -- which the catalogue already
excerpts and read_file still returns whole.
2026-09-02 23:52:21 +02:00
8e5e33d2d5 docs: falsification against provenance as invariant, mutations measured
30 mutations, all red against the whole suite. Green control 1189 passed / 5 skipped.
Golden byte-unchanged (ea8c534773acdbe41ae68f2c55724d69aaf8be4f); node-ID superset
strict (1094 -> 1194, 0 removed). Three of the plan's predicted signatures were
falsified by the measurement and are recorded as measured, not as predicted.

Co-Authored-By: Claude <claude-opus-5>
2026-09-02 23:40:54 +02:00
488a0f2b6c feat(persona): load the falsification skill from commons at call time
[skip-docs] — the invariant row for this plan lands in Step 13, after the mutations.

Amendment 2 in the same commit: the framework-neutrality sweep covered only
expert-reviewer, so the skill that arrived by subtree pull had no framework guard
anywhere. GUARDED_SKILL_DIRS names both, and a fail-closed coverage arm turns red
when a future pull brings a third skill that is not listed.

Co-Authored-By: Claude <claude-opus-5>
2026-09-02 21:31:32 +02:00
21c476bbe7 Merge commit '74008aebfe' 2026-09-02 21:16:39 +02:00
74008aebfe Squashed 'shared/' changes from 73136eb..f35a22a
f35a22a fix(skills): eksempelet brøt skillens egen regel — undecided, ikke survived
ff7b9b7 docs(spec): Amendment A1 — sources som flow-sekvens + falsification-reviewer-persona
b2205b9 docs(plan): kø commons-shared-golden-referent Q4/§6.2 — køplassering, ikke utførelse
ba0237d docs(plan): kø commons-spec-amendments (D-A 1/2/4+D-F) — køplassering, ikke utførelse
30e1e71 docs(plan): kø SS11-budsjettfunnet — køplassering, ikke utførelse
38a1178 docs(plan): SS12-underlaget lukket — O-A ratifisert og utført (§9)
0f88324 docs(spec): §12 fører generated-undernøklene `by` og `at` som egne rader (O-A)
e307997 docs(plan): kø SS12-undernøklene — køplassering, ikke utførelse
22048ea docs(spec): «step 0 — explore» som informativ merknad; README lover ikke lenger et manglende eksempel
7495cf6 chore(privacy): fjern de tre private identifikatorene fra publiserte filer
6b39f3b docs(readme): Contents lister alle fem eksempelbundler — veglys + tunnel var usynlige
3362e82 fix(security): sikkerhetskontakt security@, ikke hello@ (D6-konsistens)
fecdb97 docs(release): CHANGELOG + v0.1.0 — første taggede snitt av det publiserte kjernen

git-subtree-dir: shared
git-subtree-split: f35a22a3043ba743b8499743d6f2c9c2bb8a579a
2026-09-02 21:16:39 +02:00
2edd3dce2b feat(verdicts): a cross-base candidate collision is reported, never dropped in silence
[skip-docs] — the invariant row for this plan lands in Step 13, after the mutations.

Co-Authored-By: Claude <claude-opus-5>
2026-09-02 21:15:50 +02:00
842c51401d feat(okf): one bundle-id rule, reconciled against the mount and origin-marked
[skip-docs] — the invariant row for this plan lands in Step 13, where the mutations
that force it have been measured. Documenting a seam before its measurement is
the claim-without-evidence class this repo writes rows against.

Co-Authored-By: Claude <claude-opus-5>
2026-09-02 21:04:04 +02:00
60e51ab76c test(okf): navigation stays tolerant while the decoder refuses, proven by bytes
Co-Authored-By: Claude <claude-opus-5>
2026-09-02 20:37:46 +02:00
ccd65d3b01 feat(okf): adjudication_for names the unknown state and a tool carries it
Co-Authored-By: Claude <claude-opus-5>
2026-09-02 20:36:54 +02:00
d62e89935c feat(okf): evidence_for distinguishes present, absent and unreadable with a reason
Co-Authored-By: Claude <claude-opus-5>
2026-09-02 20:31:18 +02:00
3d76a46d76 feat(verdicts): promoted verdicts carry a verified field with the actor verbatim
Co-Authored-By: Claude <claude-opus-5>
2026-09-02 20:29:32 +02:00
9e35cfefbf docs(okf): grep-bart anker inn i SPEC-en, ikke et linjenummer
Et linjenummer inn i et ANNET repos fil raatner paa deres neste redigering, og
denne fila skal kunne leses utenfra. Samme regel som STATE-pekere: paragraf-
anker, verifisert med en grep som faktisk treffer.

Co-Authored-By: Claude <claude-opus-5>
2026-09-02 20:23:43 +02:00
a00cde6444 feat(okf): trust_tier derives three tiers from the actor prefix
Co-Authored-By: Claude <claude-opus-5>
2026-09-02 20:17:04 +02:00
7552be239b feat(okf): read_provenance names WHY a signal is unreadable, on the SkippedLink shape
Co-Authored-By: Claude <claude-opus-5>
2026-09-02 20:16:01 +02:00
940796d9ed feat(okf): decode_flow_value reads the accepted flow subset and refuses the rest by name
Co-Authored-By: Claude <claude-opus-5>
2026-09-02 20:14:00 +02:00
ab2c509337 refactor(okf): one frontmatter scanner behind both readers, contracts unchanged
Co-Authored-By: Claude <claude-opus-5>
2026-09-02 20:06:42 +02:00
809fa04406 test(docs): klassifiser den nye kontraktfila som LIVE, ikke arkiv
Doc-gaten er fail-closed paa dekning: et nytt dokument som verken staar i
_LIVE_DOCS eller har en datert sti er UKLASSIFISERT, og et uklassifisert
dokument er uvoktet uten at noe sier fra. docs/okf-konsum-kontrakter.md er
kanonisk og skal holdes aa jour - altsaa LIVE, ikke et punkt-i-tid-notat.
Gaten gjorde jobben sin mot f6b1b77; dette er svaret, ikke en omgaaelse.

Formaterer samtidig Steg 1s testfil (ruff format).

Co-Authored-By: Claude <claude-opus-5>
2026-09-02 20:06:30 +02:00
5c59921a26 test(okf): capture block-form fixture and collection baseline before any decoder
Co-Authored-By: Claude <claude-opus-5>
2026-09-02 19:58:56 +02:00
f6b1b779e2 docs(okf): tre kryss-repo-kontrakter i EN tracked fil, med nevneren maalt (B-i)
Planen som baerer dem er local-only (repoet har et offentlig speil, saa den
globale regelen gjelder). Kontraktene selv er ikke arbeidsbenk - de spenner
produsent og konsument, og en kontrakt som bare bor i den ene sidens planfil er
en kontrakt den andre siden ikke kan holdes til. Fila erklaerer seg som kilden,
saa docstrings og invariantrader kan peke hit i stedet for aa kopiere regelen.

Nevneren i K5-terskelen var FEIL i planen og er rettet begge steder: SPEC 5.1
lister SEKS oppfoeringsnoekler (resource, id, title, author, usage_count,
last_modified - lest i den kanoniske SPEC-en l.303-313), ikke fem. Produsenten
skriver to av dem (62b6192: `sources: [{ id: ..., resource: fixture }]`, 1 av 1
fil som baerer noekkelen). 2 av 6, ikke 2 av 5 - samme nevner-disiplin som F15.

Hver kommando i fila er kjoert og gir tallet den staar ved siden av.

Co-Authored-By: Claude <claude-opus-5>
2026-09-02 19:55:55 +02:00
57e6efe193 docs(f15): nevner-disiplin anvendt paa mitt EGET instrument - 17/16/2, ikke 16/16/2
F15-rapporten og CLAUDE.md-raden sa "16 former, alle 16 sjekket, 2 endret seg".
Den formuleringen var usann, og tabellen sa det selv to rader lenger ned: den ene
av de to endrede formene (checkpoint-antallet per park) var ALDRI blant de seksten
- proben saa den ikke, testsuiten fant den. "2 av 16" tilskrev dermed proben et
funn den ikke gjorde, og skjulte at nevneren for den mekaniske sjekken er 1.

Rettet til det som faktisk ble maalt: 17 former leant paa · 16 sjekket MEKANISK
(1 endret) · den 17. funnet av SUITEN (endret) · 2 endret totalt. Grunnen staar
ogsaa skrevet: proben sjekker statiske egenskaper ved KILDEN, mens den farlige
endringen var en egenskap ved KJOERINGEN, og ingen form-probe kan se den uansett
hvor mange former den teller.

Lagt til en aerlighets-grense paa selve fiksen som manglet: vakten hviler paa at
get_latest returnerer checkpointen som BAERER forespoerselen. Maalt sant i dag og
dekket av 19 gronne tester - men skriver MAF en gang en checkpoint ETTER at
forespoerselen er reist, nekter _park en gyldig kjoering. Fail-closed-retningen,
saa det er en grense aa kjenne, ikke en defekt aa fikse.

Ingen historikk-omskriving: commit-kroppen til ef2f1cb baerer fortsatt den gamle
formuleringen, og det staar her i stedet.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-02 19:47:11 +02:00
ef2f1cbe61 fix(maf): en vakt som gikk inert i STILLHET, funnet ved aa loefte pinnen (F15, ORDRE 20260829T155150Z)
MAF core 1.9.0 -> 1.16.0, orchestrations 1.0.1 -> 1.1.1. De to kan ikke loeftes
hver for seg: orchestrations 1.1.1 krever selv core>=1.15.0.

Iron Law: vakt-testen kjoert ROED mot 1.9.0 (2 failed) FOER pinnen ble roert.
Gulvet bor i EN konstant og pyproject-asserten deriverer sin streng fra den.

NEVNER: 16 private/ugaranterte former, derivert fra repoets EGNE siteringer,
alle 16 sjekket mot begge versjoner, 2 endret seg. Kjent-positiv: MiddlewareFailure
flippet NO -> YES. KP-kandidaten _compaction.py ble FORKASTET (teller 0 i begge,
diskriminerer ingenting).

DEN FARLIGE ENDRINGEN er den ordren navnga - formen som fortsatt importerer, men
har flyttet semantikk i stillhet. En park skriver naa TO checkpoints og bare EN
baerer plan-review-typen, saa en feildeklarert _ALLOWED_CHECKPOINT_TYPES toemmer
ikke lenger listingen: den taper nOEyaktig den checkpointen som betyr noe,
get_latest returnerer den ANDRE, og _parks `latest is None`-vakt passerte mens
kjOEringen svarte rc=0 og skrev et spOErsmaal som aldri kan baere svaret. Vakten
sjekker naa EGENSKAPEN den alltid mente (request_id in pending_request_info_events
- et DEKLARERT felt) i stedet for symptomet som pleide aa innebaere den, og fjerner
dermed en privat avhengighet i stedet for aa legge til en.

ExperimentalWarning-paret P4 pkt. 2 betalte for aa BEHOLDE er borte fordi MAF
sluttet aa sende det: _feature_stage.py emitterer ved FOERSTE BRUK, ikke ved import.
Goldenens stderr regenerert som BESLUTNING (fire -> to linjer); site-packages-
maskeringen BEHOLDT (spannet er ubebodd, ikke pensjonert).

Load-bearing MAALT mot HELE suiten, gronn kontroll 1089/5, stdout BYTE-UENDRET
(ea8c534773acdbe41ae68f2c55724d69aaf8be4f): M1 revert av vakten -> 1 rod.
EN mutasjon ble IKKE rod og staar som aerlighets-grense, ikke som gate: spikens
checkpoint_ids[-1] er rekkefolge-avhengig (Path.glob), altsaa flaky.

Rapport: docs/2026-09-02-f15-maf-pinnen.md

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-02 19:35:49 +02:00
67eb8939d3 docs(claude): to invariantrader for BLOCKER-1 og MAJOR-1 (ORDRE 20260902T151931Z)
UTOVER ordrens bokstav: ordren ba om «egen commit per halvdel» og sa ingenting
om hovedboka. Raden legges likevel til fordi repoets invariant-disiplin er at
hver load-bearing beslutning baerer maalingen som tvang den og testen som gaar
roed naar den oppheves — en beslutning uten rad raatner.

To rader: plantekst-vs-repr (fire steder, fire mutasjoner EN PER LINJE, og
hvorfor `current_progress` er BEVISST uroert), og generalproevens to halvdeler
(ni mutasjoner, soesken-forholdet til `ToolCallRecorder`, og den tolvte
vakuoes-gate-falsifiseringen).

To ting er UTTALT som uvitnet/maalt etter en ekstra maaling, ikke paastaatt:
(1) recorder-wiringen i `resume_exploration` er DEFENSIV — aa detache KUN den
andre forekomsten lot hele suiten staa groenn (1087/5), saa ingen test holder
den (`budget_stop`-presedensen); (2) aa skripte navigatoeren alene aapner
INGENTING — med en konstant manager konkluderer kjoeringen etter en runde uten
aa gi noen deltaker en tur, saa manageren maa selv faa et trinn-manus per
stadium.

Co-Authored-By: Claude <claude-opus-5>
2026-09-02 18:51:40 +02:00
2654219e8c feat(explore): den offline generalproeven kan AAPNE en base (MAJOR-1 b, ORDRE 20260902T151931Z)
`--scripted-replies` tok EN konstant streng per rolle, saa ingen skriptet rolle
kunne emittere et `function_call`: maalt 0 verktoeykall / 0 approaches / 1 runde
paa 4/4 baser, mens hvert andre felt i artefaktet saa ut som en kjoering som
hadde virket. En operatoer som foelger dette repoets egen maalestige — «bevis saa
mye som mulig gratis foer det dyre trinnet» — kunne ikke bevise at navigatoeren
aapner noe.

En UTFORSKNINGSROLLE kan naa faa en LISTE av trinn, der et trinn er en tekst
eller ETT verktoeykall (`{"call": "<tool>", "args": {...}}`). Formen utvider den
ENE kanoniske `_inner_get_response`-kroppen (S2.5-konsolideringen) — ikke en
andre klient: rapportens vedlegg-A-`RecordingClient` var maaleinstrument, og en
kopi av kroppen ville drevet fra de tre conftest-dublettene som rir paa den.
Manuset ligger VED SIDEN AV selektoren, ikke inni: en selektor returnerer `str`
ved kontrakt, og et verktoeykall er ikke tekst. Naar manuset er tomt svarer
selektoren som foer, saa et utloept manus degraderer til konstantformen, ikke til
stillhet.

Listeformen NEKTES for debattens roller ved navn (proposeren svarer `generate`s
eget kall, ikke en agent-loekke som kan kalle et verktoey mellom turer), og hvert
malformet trinn nektes ved navn — validering, ALDRI reparasjon
(`write_concept_file`-regelen). Et trinn som slipper gjennom naar
`step["call"]` og krasjer midt i kjoeringen, som er nettopp MAJOR-2-klassen
filas foerste halvdel lukket.

MAALT: ni mutasjoner, alle roede mot HELE suiten, hver med sitt eget vitne +
groenn kontroll 2 failed (F15-diffen, KJENT) / 1087 passed / 5 skipped:
M1 detach recorderen fra explore() OG resume (1 roed) · M2 dropp `tool_calls`
fra `trace_payload` (3) · M3 sorter+dedupliser sinken (2) · M4 registrer navnet
uten basen (3) · M5 nekt listeformen igjen (2) · M6 aksepter lista men emitter
tekst (1) · M7 toler et malformet trinn (1) · M8 la en debattrolle ta
listeformen (1) · M9 dropp ukjent-noekkel-whitelisten (1). Golden
`demo-transcript.stdout` BYTE-UENDRET (ea8c534773acdbe41ae68f2c55724d69aaf8be4f).

M7 FALSIFISERTE TESTEN FOERST (repoets vakuoes-gate-klasse, TOLVTE gang):
nekt-testen brukte `{"invoke": "list_bundles"}` og sto GROENN med forms-sjekken
detached — UKJENT-NOEKKEL-grenen fanget den i stedet, saa den nekten som var
under test hadde intet vitne. De to grenene oeves naa av to armer med hver sin
mutasjon (M7 og M9).

Aerlighetsgrense, uttalt: at en LEVENDE modell kaller verktoeyene er fortsatt
ikke bevist (samme klasse som structured-output-grensen) — dette gjoer den
GRATIS halvdelen av stigen ekte, ikke den betalte.

Co-Authored-By: Claude <claude-opus-5>
2026-09-02 18:45:53 +02:00
4aa4f9c429 feat(explore): hvilken base som faktisk ble AAPNET forlater kjoeringen (MAJOR-1 a, ORDRE 20260902T151931Z)
`{run_id}-exploration.json` bar syv noekler og ingen rad for verktoey: en
utforskning som kalte NULL verktoey var uskillbar fra en som navigerte hele
korpuset, baade offline og etter en BETALT kjoering. `ExplorationToolRecorder`
er en `FunctionMiddleware` paa utforskningsagentene som registrerer navnet og
`bundle_id`-argumentet, i kall-rekkefoelge, paa den kaller-eide
`ExplorationTrace` — og `trace_payload` skriver det ved siden av
`quick_validations`.

SOESKEN av `mcp_tools.ToolCallRecorder`, ALDRI en gjenbruk: invariantene er
motsatte. Den filtrerer til KONFIGURERTE eksterne verktoey, dedupliserer per
`(server, tool)` og returnerer SORTERT, fordi dens rad er en egress-paastand i
et byte-deterministisk artefakt. Denne beholder hvert kall i REKKEFOELGE uten
dedup, fordi spoersmaalet er det motsatte: aapnet navigatoeren noe, og i hvilken
sekvens. Et sortert dedupet sett kan ikke skille en generalproeve som LESTE en
base fra en som bare listet dem. Aa generalisere den ene til aa tjene begge
ville brutt den andre.

RESULTATET registreres ALDRI — det er basens innhold, altsaa nettopp det som er
for stort til aa ri med (MAJOR-3 maalte 73-93 % av alle prompt-tokens), og et
spor som bar det ville vaert en andre kopi av konteksten. Middlewaren observerer
kun; `call_next` ventes alltid.

MAALT FOERST (Iron Law): fire tester roede mot HEAD foer sommen fantes.
`FunctionInvocationContext.arguments` er `BaseModel | Mapping[str, Any]` (maalt
mot den installerte signaturen), saa BEGGE former leses; et verktoey uten
`bundle_id` gir `""`, aldri en oppdiktet etikett. Wiret i BEGGE
workflow-byggene — `explore()` OG `resume_exploration()` — ellers ville et
gjenopptatt leg registrert null verktoeykall, samme stille gap som
`plan_reviews.extend` i oekt 64.

Suite 2 failed (F15-diffen, KJENT) / 1082 passed / 5 skipped (1089 samlet, +4).
Golden `demo-transcript.stdout` BYTE-UENDRET
(ea8c534773acdbe41ae68f2c55724d69aaf8be4f).

Co-Authored-By: Claude <claude-opus-5>
2026-09-02 17:49:45 +02:00
4075b46a00 fix(hitl): planen et menneske signerer er TEKST, aldri en objekt-repr (BLOCKER-1, ORDRE 20260902T151931Z)
Fire steder gjorde `str(review.plan)` paa en MAF `Message` som ikke har noen
`__str__` (maalt: `type(Message).__str__ is object.__str__`), saa BEGGE
HITL-doerene viste og lagret `<agent_framework._types.Message object at 0x…>`:
terminalen F4 spoer ved (`:1395`), de to opptakene i `plan_reviews` (`:1404`
approve, `:1418` revise) og den PARKERTE spoersmaalsfila U12 (`:1478`) som er
det ENESTE som krysser prosessgrensen. En ekspert som svarte `approve` signerte
blindt. Fiksen er den eksisterende `_plan_text` (`:966`) paa alle fire; ingen ny
hjelper.

Fire asserts var gronne mot defekten fordi de var TRUTHINESS eller
selv-sammenligning: `reviews[1]["plan"] != ""`, `waiting[0].plan`, og
`reviews[0]["plan"][:40] in out` — den siste sammenlignet den samme repr-en med
seg selv, saa de to flatene var enige mens begge var uleselige. Diskriminatoren
er innhold som KUN kan komme av `Message.text`: MAF komponerer plan-meldingen
rundt managerens svar ordrett (maalt), saa en sentinel i det skriptede svaret er
til stede naar teksten ble tatt og fravaerende naar repr-en ble det. Sentinelen
bor i et `reason`-felt fordi ingenting leser dem — aa nokle den til en ANSWER
ville endret kjoringen den maaler. I tillegg en NEGATIV assert (` object at 0x`
finnes ingen steder i stdout, artefaktet eller spoersmaalsfila), som fanger hele
defektklassen og ikke bare denne ene.

MAALT: fire mutasjoner, EN PER LINJE (ordrens ene samlede revert underteste —
`:1418` er revise-grenens egen kopi og hadde ellers ikke noe roedt vitne):
:1395 -> 1 roed (T2 stdout) · :1404 -> 2 roede · :1418 -> 1 roed (T1 alene) ·
:1478 -> 1 roed (async T9). Suite 2 failed (F15-diffen, KJENT) / 1078 passed /
5 skipped — uendret fra baseline. Golden `demo-transcript.stdout` BYTE-UENDRET
(ea8c534773acdbe41ae68f2c55724d69aaf8be4f).

Aerlighetsgrense, uttalt: `str(review.current_progress)` (`:1396`/`:1479`) er
IKKE roert. Den er en `MagenticProgressLedger | None`, ikke en `Message`, og
maalt renderer pydantic den lesbart — men i disse kjoringene er den `None`, saa
terminalen skriver «progress so far: None». Det er en annen defekt og en annen
ordre.

Co-Authored-By: Claude <claude-opus-5>
2026-09-02 17:38:25 +02:00
e2d26c50ed docs: misjonsreview v2 mot bruksscenarioet — målt, ikke bygget (S2, ORDRE 20260902T113744Z-1245330375)
M1–M6 med kommando, tall og nevner per punkt. 1 BLOCKER (plan-review viser
`<Message object at 0x…>` på alle tre HITL-flater; fire asserts grønne på
`plan != ""`), 4 MAJOR (vakuøs offline-generalprøve uten tool_calls-rad;
ingen in-run-dør for ekspert-feedback; bundle-kontekst re-sendt 3×/7× =
73–93 % av prompt-tokens; K2 stopper på håndskrevet validator-input.json),
4 MINOR, 3 NICE. Ordreutkast per MAJOR+. Ingen src/tests rørt; golden
byte-uendret; F15-diffen i treet sett og ikke rørt.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-02 17:17:39 +02:00
3bdc5c1b7c docs: MAF-gjeldens omfang malt, ikke bygget (F3/F15/F16/U16-17-19, ORDRE 20260825T214801Z)
F15 re-verifisert EKSTERNT i dag (29.08): core siste er 1.16.0 (28.08), ikke 1.15.0 -
repoet er sju minor bak, ikke seks. Scratch-venv-diff (1.9.0 vs 1.16.0, slettet etter
bruk) bekrefter de to konkrete private-API-premissene testen navngir holder strukturelt
stabile. Fresh U1-U19-telling flytter U12 fra nei til ja siden c08ae91 (checkpoint landet
26.08, etter reviewen) - 6/5/8 av 19, ikke reviewens 5/5/9. U17 og U19 lukkes i dette
dokumentet med begrunnelse (ordrens eget unntak for smaa U-rader); U16 er et ekte,
udesignet gap og forblir aapent med et konkret revisit-vilkaar. Ingen kode, pin eller
kjorende sti er rort.
2026-08-29 09:30:01 +02:00
56f4f6d084 feat(hitl): ekspertdommen kan ikke oppstaa av stillhet (F2, ORDRE 20260825T214801Z)
run_project KREVDE verdict_input og kjorte capture_verdict ubetinget; CLI-en
defaultet det til {"approved", "reviewed by expert"} og hosting listet det som
PAAKREVD. Netto: hver flaggloes kjoering myntet en ekspertgodkjenning ingen ga,
den gikk inn i den delte storen, og run_portfolio bar den inn i neste prosjekts
hypotese-prompt som en prior expert verdict -- paa flaten som ble overlevert
14.08. Non-goal 3, brutt i en soem.

RunResult.verdict er naa Verdict | None, og None er hva stillhet produserer:
ingenting myntes, ingenting lagres, ingenting varsles. Prinsippet sto allerede i
repoet -- RunFailure sin docstring: aa fylle et felt med en dummy legger
FABRIKKERT proveniens inn i aggregatet.

Traceability koster ingenting: RunResult.verdict_key (property, derivert fra
kandidaten) er verdicts.verdict_key sitt alt dokumenterte formaal -- identisk
med verdict.id naar en dom BLE gitt, og fortsatt meningsfull naar ingen ble det.
Det er den outboxen og den hostede responsen stempler.

Halv dom NEKTES paa begge doerer (FeedbackContract er eneste sted formen
valideres; CLI-en nekter ved navn FOER enhver mode-dispatch). Validering, aldri
reparasjon. De to mode-partisjonene fikk --decision/--rationale inn: kommentarene
sa ordrett at en aerlig nekt var uimplementerbar fordi de non-None
argparse-defaultene gjorde en eksplisitt verdi uskillbar fra defaulten -- med
defaultene borte er den implementerbar.

Hosting er WIDENING, ikke bryting: verdict_input flyttet fra _REQUIRED_FIELDS
til _OPTIONAL_FIELDS. Ingen ekstern kaller brekker.

AERLIGHETS-GRENSE: referanse-fixturens SYNTETISKE verdict_input-rader staar
uroert -- de er merket SYNTETISK paa fire steder og er reviewens F5 (maaling av
misjonspaastanden), ikke F2. Project.verdict_input er naa valgfri.

Load-bearing MAALT (tests/test_ungiven_verdict_loadbearing.py, 15 armer), aatte
mutasjoner alle roede mot HELE suiten + gronn kontroll 1080/5 og golden
demo-transcript.stdout BYTE-UENDRET (ea8c534773acdbe41ae68f2c55724d69aaf8be4f).
En mutasjon falsifiserte testen foerst (vakuoes-gate-klassen, ellevte gang):
--report-armen brukte et bart --report, som nekter rc 1 uansett fordi --ledger
mangler.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-27 01:22:07 +02:00
a1f8522bdf feat(explore): katalogkallet koster O(baser), ikke O(korpus) (ORDRE 20260825T213645Z)
list_bundles returnerte hele rot-indeksens body for HVER konfigurert base samtidig,
pluss ett JSON-objekt per ufulgt kryss-lenke. Begge vokser med korpuset, saa prisen
paa aa finne ut HVILKE baser som finnes ble satt av hvor mye de INNEHOLDER - progressiv
disclosure snudd paa hodet.

Maalt med o200k_base, instrumentet foerst validert mot commons' egne fasittall:
  tre flate Vegnormal-baser   112 116 -> 362 tokens   (-99,7 %)
  171 grenbaser               124 942 -> 21 448       (-82,8 %)
Grenformen (vegnormal-okf 8145c23) lukket bundle-siden og gjorde katalogsiden verre,
noeyaktig som det repoet forutsa.

Et premiss ble felt FOER noe ble bygget paa det: "indeksbodyen forteller hva basen
handler om" er usant for maskin-importerte baser - grenbasenes index.md er en ren
lenkeliste uten frontmatter og prosa, saa feltet var dyrt OG innholdsloest der.

Fast vindu (200 tegn), aldri en andel av basen. Avkorting annonseres som FELT
(index_truncated), og en base som passer blir ikke merket avkortet. En ufulgt lenke
overlever som ANTALL; per-lenke-detaljen blir liggende der den er handlingsbar.
Hele indeksen er fortsatt ett read_file(id, "index.md") unna.

Taket (500 tegn/base) bor i TESTEN, ikke i explore.py.

Load-bearing MAALT: tests/test_catalogue_cost_loadbearing.py, 7 armer, ni mutasjoner
alle roede mot HELE suiten + groenn kontroll 1066/5 og golden demo-transcript.stdout
byte-uendret (ea8c534773acdbe41ae68f2c55724d69aaf8be4f).

Ogsaa: MINOR-1 i syretest-rapporten rettet - flatheten er Doer C sin
(llm-ingestion-okf importer.py, §6-index-blokka), ikke vegnormals emitterform.
Verifisert mot kilden, ikke mot meldingen.

Maaling: docs/2026-08-26-katalogkostnaden.md
2026-08-26 14:45:16 +02:00
c08ae91809 feat(explore): plan-reviewen kan besvares over DAGER (U12 + asynkron U13, rad 3)
F4 gjorde "be om svar, BRUKE svarene" naabar, men bare SYNKRONT: terminal_plan_reviewer
blokkerer loekka paa et menneske ved en terminal, saa svaret maa komme mens prosessen lever.
Maalbilde §3s tidsskala er den andre - eksperten svarer dager senere, i en prosess som aldri
saa kjoeringen.

--checkpoint-dir PARKERER reviewen (FileCheckpointStorage + {run_id}-plan-review.json) og
avslutter; --resume <run_id> leser svaret fra --review-inbox i en fersk interpreter. Det
eneste som krysser prosessgrensen er disk.

MAALT FELLE (Verifiseringsloven ansikt 4): list_checkpoints (_checkpoint.py:386-388) svelger
en blokkert deserialisering til en logger.warning og returnerer TOM liste. Uten BEGGE
MagenticPlanReviewRequest/Response i allowed_checkpoint_types feiler en resume som et FRAVAER,
ikke som en feil. _ALLOWED_CHECKPOINT_TYPES har derfor EN kopi, checkpoint_storage er eneste
konstruksjonssted, og en tom listing ved park raiser CheckpointUnreadable i stedet for aa
skrive et spoersmaal ingen kan besvare.

Budsjettet og revisjons-capen spenner over suspensjonen (meter.charge(parked.tokens_spent) +
trace.ledger.extend), ellers faar hver park et helt budsjett paa nytt. Fail-closed paa
ekspertens egen fil: request_id-mismatch, ord utenfor vokabularet og revise uten innhold
refuseres alle ved navn. hitl.pending_plan_reviews er registeret over hvem som venter.

Load-bearing MAALT: 17 tester, TRETTEN mutasjoner alle roede mot HELE suiten, groenn kontroll
1059 passed / 5 skipped, golden demo-transcript.stdout byte-uendret
(ea8c534773acdbe41ae68f2c55724d69aaf8be4f).

EN MUTASJON FALSIFISERTE SUITEN (vakuoes-gate-klassen, tiende gang): detach av
trace.plan_reviews.extend(parked.plan_reviews) lot HELE suiten staa groenn - capen leser
parked.plan_reviews DIREKTE, saa den binder uansett, og de to foerste legene er identiske
under begge implementasjoner. Gaten maatte bli det TREDJE leget, der artefaktet ellers taper
dag 1s revisjon og to ulike planer deler indeks 1. Ny test skrevet mot mutasjonen foerst.

Aerlighets-grenser: hostet flate NEKTER fortsatt (synkron review ville blokkert baade
requesten og event-loekka som svarer /readiness); en park midt i loepet etter en stall har
ingen naabar sti under det skriptede manuset, saa carry-overen som betjener den drives gjennom
en CRAFTED parkert tilstand.

Ordre 20260825T114645Z-6622513622-from-portfolio-optimiser.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-26 12:26:04 +02:00
6020f4453d docs(explore): PlanReviewInputError inn i unnslippings-listen (F4-oppfoelging) [skip-docs]
Kommentaren over explore-kallet i run.py teller opp hva som fortsatt KAN forlate sloeyfa etter at
konfig-nektene er hoistet. Etter F4 er det tre ting, ikke to - en ubesvart plan-review er den
tredje. Repoet gater prosa-paastander flater gjoer om seg selv; en liste som ikke lenger er komplett
er den samme klassen, bare i kommentarform.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LtMDsh2zfp4Bmw8KGJ4aLD
2026-08-26 00:36:45 +02:00
84e8de8679 feat(explore): --plan-review gjoer "be om svar, bruke svarene" naabar fra CLI (F4, ORDRE 20260825T133139Z)
F4 fra misjonsreviewen: begge operatorflatene nektet enable_plan_review, og eneste doer var
explore(..., plan_reviewer=...) i bibliotek-APIet. Maalbildets HITL-loop var dermed unaabar for
enhver som ikke importerte pakka. Reviewens tre fil:linje-paastander ble verifisert mot kilden foer
bygging og stemte.

Flate: CLI. `--plan-review` bygger en terminal_plan_reviewer() og gir den til den UENDREDE sloeyfa.
Operatoren vises planen og svarer "approve" eller "revise <hva>"; en revisjon gaar tilbake til
manageren, som replanlegger og spoer IGJEN om den NYE planen.

Gaten er den ANDRE halvdelen av setningen. En doer som printer planen, leser linja og kaster den
bestaar "operatoren ble spurt" og feiler maalbildet -- repoets vakuoes-gate-klasse. T1 er derfor
test_explore_loadbearing sin T15 loeftet til CLI-niva og er ROED mot en alltid-godkjenn-reviewer.
Vitnet er {run_id}-exploration.json (skrevet fra en finally), ikke skrapet stdout.

Fail-closed paa operatorens egen input: alt utenfor vokabularet spoerres paa nytt, og EOF raiser
PlanReviewInputError -- stillhet er aldri en signatur.

Fire nekter ved navn, hvorav to lukket et stille dropp ingen test dekket: report_forbidden (report-
modus returnerer FOER hver utforsknings-nekt) og portefoelje-partisjonen. De to konfig-avhengige
nektene deler tokenet enable_plan_review og har derfor ulik saertekst; den eksisterende testen
asserterte paa det delte tokenet og er rettet (oekt-57-mutasjonen, niende gang).

Hosting nekter fortsatt -- reviewen er synkron og ville blokkert bade HTTP-requesten og event-loekka
som svarer /readiness -- men meldingen navngir na CLI-doeren i stedet for aa paasta at biblioteket er
den eneste.

Mid-loep-spoersmaal er IKKE bygget, og fravaeret er MAALT: _magentic.py har noeyaktig ETT
ctx.request_info (:1044, plan review) i hele modulen. Reviewens "kun plan-review FOER loepet" er
derimot upresist -- samme forespoersel fyrer ogsaa ved re-plan etter en stall.

Load-bearing MAALT (tests/test_plan_review_cli_door_loadbearing.py, 12 tester), elleve mutasjoner
alle roede mot HELE suiten + groenn kontroll 1040/5 og golden demo-transcript.stdout BYTE-UENDRET
(ea8c534773acdbe41ae68f2c55724d69aaf8be4f).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LtMDsh2zfp4Bmw8KGJ4aLD
2026-08-26 00:27:36 +02:00
444fea7e94 fix(explore): lukk KeyError:'navigator' i --explore --scripted-replies
_SCRIPTED_ROLES = ("proposer", "checker") var det ENESTE rollesettet
_load_scripted_replies validerte OG returnerte. explore()s tre ekstra
roller (manager/navigator/hypothesiser) ble filtrert bort selv når de
fantes i --scripted-replies-JSON-en, og manglet en av dem krasjet CLI-en
med en rå KeyError midt i eksplorasjonssløyfa i stedet for en ren
"run refused:"-linje (MAJOR-2, docs/2026-08-25-syretest-vei-ab.md).

_EXPLORATION_SCRIPTED_ROLES legges nå til kravet KUN når --explore er
satt, slik at en manglende rolle nektes VED NAVN ved døren, før
explore() kalles. En rein debattkjøring skal ikke måtte svare for
roller den aldri bruker.

Målt (ikke bare antatt): med alle fem roller scriptet fullfører CLI-en
uten krasj, men sløyfa er fortsatt delvis vakuøs (1 runde, 0 approaches)
som syretesten forutså — en konstant streng per rolle kan ikke svare
korrekt på magentic-managerens stadiespesifikke former.

1028 passed / 5 skipped (+3 nye tester, RØD→GRØNN). Golden
demo-transcript byte-uendret.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YSHNrYvKxDR5uct1QoVZng
2026-08-25 15:42:15 +02:00
932ece345b fix(docs): rett README-statusen — to usanne paastander paa offentlig flate (ORDRE 20260825T122454Z)
"no live-model run yet" var falskt siden 14.08 (docs/2026-08-14-fase1b-forste-levende-kjoring.md):
en live koersel mot gpt-4.1-mini konkluderte "rejected" — korrekt utfall, men modellen fant opp
en kostkode. "sibling built in parallel" stemte ikke: po-claude er PARKERT (STATE.md). Begge
punkt verifisert mot primaerkilde foer retting (Verifiseringsloven ansikt 3).

Statusavsnittet er ogsaa gjort mer noekternt: ingen validerte forslag mot levende modell enna,
ingen ekte ekspertdommer i treet (kun AI-forfattede froe, merket som saadan).

Utvidet test_public_surface_claims_loadbearing.py med to nye rode->groenne gater (Iron Law):
begge paastandene kan ikke gjeninnfores usett. Fant og fikset en linjebrudd-felle i egen test
underveis (blockquote-wrap gjorde "no live-model run yet" usynlig for et raatt substring-soek).

Ingen kodeendring i src/. Ingen push til open (Azure-gatet, egen ordre). 1025 passed / 5 skipped.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RF8QXXBWJ917Uj9zMf18nz
2026-08-25 15:07:08 +02:00
98cbb80a45 docs: syretesten vei A/B — tre Vegnormal-baser MAALT gjennom po (ORDRE 20260825T111038Z)
MAAL, IKKE BYGG: ingen fil under src/ er endret. 1021 passed / 5 skipped (166 s),
golden demo-transcript byte-uendret (ea8c534773acdbe41ae68f2c55724d69aaf8be4f).

Alle seks maalepunkter dekket, hvert tall fra en kommando kjoert i oekten.
Instrumentet er validert mot commons' tre fasittall (3861/12595/10406) foer
Vegnormal-tallene ble konsumert.

Kjernetall: 446/1017/270 konsepter; 93 422 / 250 785 / 85 937 o200k_base-tokens
(sum 430 144); list_bundles() = 112 116 tokens i ETT verktoeykall; 0 av 3 baser
har validator-input.json eller cost-baseline.json; 0 nestede index.md av 1733.

Funn: BLOCKER-1 kontekstkostnaden gjoer live utforskning ugjennomfoerbar som
korpuset staar · MAJOR-1 gjentatt --bundle-dir forkastes STILLE, exit 0
(run.py:1581-1583 + :2070) · MAJOR-2 --explore --scripted-replies krasjer med
KeyError: 'navigator' (run.py:1531) · MAJOR-3 multi-base = N PROSJEKTER, ikke
1 prosjekt x N referansebaser (okf.py:433 via run.py:1491) · MINOR-1 flat
importform · NICE-1 ukjent base nektes ved navn.

Punkt 5 delvis vakuoest, som ordren forutsaa: sloeyfa FULLFOERER offline mot tre
baser og produserer et rutet mandat (bundle_id, stop=None), men 0 verktoeykall og
0 quick_validate - navigatoren aapnet aldri en base. Plumbing bevist, verdi ikke.
Syretesten trenger en levende modell.

Eksponerings-grensen holdt: ingen bundle kopiert, ingen kravtekst gjengitt,
rapporten baerer kun tall/stier/kommandoer/egne observasjoner. Ingen Azure-
handling, ingen live modellkall, ingen push til open.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4zGuDG2X7FQHMWBTDPLxF
2026-08-25 14:35:15 +02:00
d01a157986 docs: Fable 5 misjons-review — nærmer systemet seg faktisk målet? (ORDRE 20260825T104711Z)
Uavhengig adversarial review av hele repoet mot README-løftet, non-goals,
status-advarselen, operatørens målbilde (23.08) og §15.1 U1–U19. Konklusjon:
DELVIS — mekanismen er komplett og målt grønn (1021/5, ruff, mypy, golden
ea8c534), misjonsbeviset mangler (null validerte forslag mot levende modell,
null ekte ekspertdommer, ingen måling av utforskningens verdi), og
MAF-dekningen er 5 fullt / 5 delvis / 9 nei av 19 på en versjon seks
minor-releaser bak. Ingen kodeendringer.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014hWpJms7fLyC1BtwAmffFg
2026-08-25 14:12:23 +02:00
785261f229 docs: multi-base som invariant + den ende-til-ende-sloeyfa som beviser den (ORDRE 20260825T080753Z)
CLAUDE.md-invarianten «Multi-base er en PARTISJON, aldri en videre
run_project-signatur» baerer hele designet: den strukturelle grunnen til at
run_project ikke KAN ta flere bundle_dir (fire enkeltverdier avledet fra DEN
basen), de tre soemmene, hvorfor dispatchen ikke tar project_id, de tolv maalte
mutasjonene, og de fire uttalte aerlighets-grensene - inkludert at CLI-en er
BEVISST uroert (§ C.8 ber om ETT nytt kallsted i run.py, levert i 57; et
repeterbart --bundle-dir er en NY operatoerflate og en egen beslutning).

README faar multi-base-doeren beskrevet der --explore alt er beskrevet, med den
samme nekten uttalt for en leser som ikke leser CLAUDE.md: en hypotese som ikke
navngir noen base blir NEKTET naar flere er konfigurert, aldri rutet til en
gjetning.

T22 er ende-til-ende-vitnet, og det eneste stedet de tre soemmene moetes:
prompt + TO baser -> hypotesiseren former to retninger og navngir hver sin base
-> route_by_bundle partisjonerer -> hver base sin run_project svarer for SIN
hypotese og ingen andres. Assertet paa COVERAGE-radene, ikke paa kall-argumenter,
fordi det er rapporten en fagperson faktisk leser: en approach som havnet i feil
base ville fortsatt sett evaluert ut.

1021 passed / 5 skipped; golden demo-transcript.stdout byte-uendret
(ea8c534773acdbe41ae68f2c55724d69aaf8be4f); mypy/ruff rene.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L3YHobQC3WzYVoxSgZus4d
2026-08-25 13:41:31 +02:00
18af86e422 feat(explore): U4+U13 del 3 - multi-base er en PARTISJON, ikke en videre signatur (ORDRE 20260825T080753Z) [skip-docs]
Ordrens premiss («endrer run_project sin signatur») er FALSIFISERT foer bygging,
og ordren ba selv om nettopp den sjekken. run_project kan ikke ta mer enn en
bundle_dir: paa bundle-stien avleder den FIRE enkeltverdier fra DEN basen -
prosjektet (_project_from_bundle fail-faster naar basens egen project_id ikke er
den forespurte), validatorens stage-0-baseline, agentenes lesekontekst og
ExpeL-noekkelen - og returnerer ETT stemplet RunResult. En andre katalog paa den
signaturen ville tvunget et stille velg-en for alle fire. Planens egen setning
sier det samme lest naert: «pipelinen kjoeres per bundle som i dag
(run_portfolio-formen)» = N kall, ikke ett kall med N.

Levert form, tre soemmer:
- mandate.Approach.bundle_id (default "" - hvert mandat skrevet foer i dag er
  fortsatt gyldig og dispatchbart uendret)
- mandate.route_by_bundle - ren partisjon, fail-fast paa et mandat som ikke kan
  utfoeres som skrevet (load_mandate-regelen). En base som ingen approach navngir
  kjoeres ikke; med NOEYAKTIG en base absorberer den alt uten navn, som ikke er en
  gjetning men det eneste mulige svaret.
- run.run_mandate_across_bundles - dispatchen. INGEN project_id-parameter:
  hver base sitt prosjekt leses fra DEN basens egen IR-projeksjon, altsaa den
  verdien _project_from_bundle allerede fail-faster mot. En delt VerdictStore
  traades paa tvers (kryss-base-laering, run_portfolio-formen), og med
  portfolio_meter gjelder de to S3.4-tennene som HAR mening her: oppstartsnekt
  (BudgetRefused) og aldri-startet + budget_stop + not_evaluated-rader.

INGEN eksisterende kaller endrer signatur - CLI, hosting og simulation sender
fortsatt en base hver, og kan fortsatt gjoere det.

explore(): hver myntet approach baerer bundle_id; markoeren kan navngi basen;
en umerket markoer med flere baser NEKTES (HypothesisParseError), med en base
resolveres den. Froe-approaches VALIDERES men skrives ALDRI om (§ C.6 doer 1 er
en bevaringsregel) - og valideringen skjer FOER foerste modellkall, samme
oekt-57-hoist-grunn: ved unntaket alene ser en nekt etter forbruket identisk ut.
explore()-docstringens gamle aerlighets-grense («venter paa at run_project tar
mer enn en bundle_dir») er RETTET - den ville vaert usann fra i dag.

Load-bearing MAALT, 12 mutasjoner alle roede mot HELE suiten, groenn kontroll
1020/5 (fra 999/5 + 21 nye tester); golden demo-transcript.stdout BYTE-UENDRET
(ea8c534773acdbe41ae68f2c55724d69aaf8be4f): detach myntet bundle_id (2) ·
stille gjennomfall ved >1 base (1) · ukjent id resolvert etter rekkefoelge (1) ·
froe-sjekk etter forbruket (2) · ruteren gjetter foerste base (1) · uroutbar
approach droppet (1) · dispatchen kollapser til en base (5) · project_id fra
foerste base (2) · detach aldri-startet-tannen (1) · unreached urapportert (1) ·
fersk store per base (1) · detach oppstartsnekten (2).

EN MUTASJON FALSIFISERTE TESTEN FOERST (repoets vakuoes-gate-klasse, aattende
gang): store-testen sammenlignet med ==, og VerdictStore er en pydantic-modell
med VERDI-likhet - tre ulike tomme stores er alle like, saa «fersk store per
base» lot hele suiten staa groenn. Delt INSTANS er paastanden, saa testen
asserterer naa paa `is`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L3YHobQC3WzYVoxSgZus4d
2026-08-25 13:35:39 +02:00