feat(fase6): gate-promote approved verdicts back into the OKF wiki (Steg 8)
Close the last agentic-loop seam (målbilde §3/§6/§7/§11 step 6): an APPROVED verdict is promoted from the raw output layer into the context layer (the OKF bundle) as a navigable `type: verdict` concept file, so human/persona-approved knowledge reaches the next run's hypothesis. - okf.py (pure stdlib, MAF-free): render_frontmatter / write_concept_file / link_in_index — the D7-portable OKF write counterpart of navigate. - verdicts.py: promote_verdict + PromotionRefused gate (fail-closed; only approved decisions enter the wiki, never raw agent output), provenance stamp (who/experiment/when; timestamp a required kwarg), neutral index label (signal reaches a prompt only via the gated ExpeL fold, never bundle_context), _safe_filename_token (id sanitised for path/link). - R4 = optional+gated: a public opt-in primitive, NOT wired into run_project (mirrors write_verdict — the system reads, the gate promotes). - Load-bearing trio (test_step8_promotion_loadbearing.py): gate refuses a non-approved verdict, approved verdict is navigable, promoted signal stays out of the read-context — all proven RED-on-detach. Suite 144->148. Design hardened by an adversarial plan-critic (12 findings; the BLOCKER — index-link leak into bundle_context via index_summary — closed by the neutral label + a no-leak test). Honesty limits documented: promoted file is minimal (signal as prose only), and the learning-key id means same-candidate approvals share a filename (last-write-wins). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MHR8iKxJRxDiDfNw8HZmWE
This commit is contained in:
parent
e2861cac0c
commit
6b645ad32a
6 changed files with 385 additions and 2 deletions
18
CLAUDE.md
18
CLAUDE.md
|
|
@ -69,6 +69,24 @@ Python ≥3.10. MAF (`agent-framework-core` 1.9.0). Pakkehåndtering: `uv`. To b
|
|||
`tests/test_step7_async_loop_loadbearing.py` — en dom droppet etter Run A MÅ nå Run B's prompt
|
||||
(Run B bruker FERSK store → overføringen er fil-løkka, ikke in-memory-carryover); tom-inbox-kontroll
|
||||
beviser kausalitet. Markør = realiseringsverdi som finnes ingen steder i bundelen (ikke frøets 0.82).
|
||||
- **Gated wiki-promotering (Steg 8, målbilde §3/§6/§7):** når en ekspert/persona GODKJENNER et
|
||||
utfall, løfter `verdicts.promote_verdict` det fra RAW output-laget inn i kontekst-laget (OKF-bundelen)
|
||||
som en `type: verdict`-konseptfil, navigerbar av neste kjørings `seed_store_from_bundle`. **Gaten er
|
||||
fail-closed:** en ikke-godkjent dom (`decision ∉ {approved, approved_with_adjustment}`) raiser
|
||||
`PromotionRefused` og skriver/linker INGENTING — kun menneske/persona-godkjent kunnskap når wikien,
|
||||
aldri rå agent-output (selv-forurensning). Provenance-stemplet (hvem/eksperiment/når; `timestamp` er
|
||||
påkrevd keyword, ingen wall-clock-default → deterministisk). **OKF-skriveren bor i `okf.py` og er ren
|
||||
stdlib** (D7-portabel, MAF-fri — håndhevet av `test_okf_is_maf_free`); navigasjon følger KUN
|
||||
index-cross-links, så `promote_verdict` linker filen i `index.md` via en NØYTRAL label (ellers lekker
|
||||
signalet inn i `index_summary`→`bundle_context` utenom gaten). **R4 = valgfri+gated:** `promote_verdict`
|
||||
er en offentlig opt-in-primitiv, wires IKKE inn i `run_project` (speiler `write_verdict` — systemet
|
||||
leser; gaten/personaen promoterer). Ærlighets-grenser: promotert fil er MINIMAL (læringssignal kun som
|
||||
`description`/body-prosa, reproduserer ikke seedens strukturerte `realization_rate` o.l.); id =
|
||||
læringsnøkkel, så to godkjenninger om samme kandidat deler filnavn (last-write-wins, som `write_verdict`)
|
||||
— wikien vokser én kuratert fil per distinkt kandidat, ikke per dom-hendelse. Load-bearing-trio
|
||||
(`tests/test_step8_promotion_loadbearing.py`): gaten avviser ikke-godkjent dom (RØD uten gate); godkjent
|
||||
dom er navigerbar (RØD når `link_in_index` detaches); promotert signal holdes ute av `bundle_context`
|
||||
(RØD når en beskrivende index-label lekker det inn). Index-RMW er ikke-atomisk (enprosess-MVP).
|
||||
- **Kostnadsdisiplin:** utvikle primært på lokal profil (gratis); Foundry/Azure (privat tenant finnes) kun til målrettet, minimal verifisering; billigste modeller + små syntetiske data + harde token-tak. Ingen tunge test-kjøringer.
|
||||
- **STATE.md er local-only** (gitignored). Voyage session-state er efemert; STATE.md er kanonisk kontinuitet.
|
||||
- Prosess: Voyage-plugin (`/trekbrief → /trekplan → /trekexecute → /trekreview`) per større fase.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue