docs: fjern brukernavn, hjemmekatalog-stier og privat namespace fra publisert flate

Operatørdirektiv 2026-08-18: alt av privat natur skal bort. Dette er klasse 1
fra økt 43-gjennomgangen, utvidet etter en bredere sveip enn de seks linjene
som var kjent.

FJERNET (11 linjer i 7 filer):
- /Users/ktg-stier i tre docs -> relative stier (../portfolio-optimiser-claude,
  tests/golden/...). Røpet brukernavn OG maskinens repo-layout. De relative
  formene er dessuten mer brukbare for en ekstern leser.
- `Hi there, ktg!` i demo-runbookens SSH-probe -> `<user>!`.
- `ktg-plugin-marketplace` -> `plugin-marketplace` i to plandokumenter.
- `commons`-remotens `ktg/`-referanse i CLAUDE.md -> "den private namespacen".
- git.fromaitochitta.com/ktg/portfolio-optimiser-claude ->
  .../open/portfolio-optimiser-claude. Den var både privat OG utdatert:
  søskenet ligger i open/ (verifisert med ls-remote, exit 0).

BEHOLDT, MED GRUNN:
- LICENSE:3 `Copyright (c) 2026 Kjell Tore Guttormsen` - MIT krever at
  copyright-erklæringen står. Å fjerne rettighetshaveren ville brutt lisensen,
  ikke beskyttet noe: dette er forfatterens egen, tilsiktede attribusjon på et
  åpent prosjekt.
- hello@fromaitochitta.com (SECURITY/CODE_OF_CONDUCT) og
  git.fromaitochitta.com/open/... - organisasjonens publiserte kontaktpunkt og
  publiseringsvert. Å fjerne verten ville brukket install-instruksjonene.
- Statens vegvesen-sitatene under shared/examples/ - offentlige håndbøker
  (V124, N500) sitert som kildemateriale, ikke en opplysning om noen.

IKKE RØRT, RAPPORTERT VIDERE: tre linjer under shared/ (.gitignore:7 "KTG
global", 2026-07-26-...:608 `human:ktg`, 2026-07-31-...:92
`~/repos/ktg-plugin-marketplace/catalog`). shared/ er en pull-only subtree av
commons; å redigere den her ville brutt subtree-kontrakten og blitt overskrevet
ved neste pull. Meldt til commons, som er source of truth.

MÅLT: ingen test, gate eller kode pinner de redigerte strengene (0 treff i
tests/+src/+scripts/; kjent-positiv kontroll fant DEPLOY.md pinnet i to tester).
Regresjonsgaten: 869 passed / 5 skipped, likt referansen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WVTZgMF94VZtNa7nGVtupF
This commit is contained in:
Kjell Tore Guttormsen 2026-08-18 13:20:23 +02:00
commit 6d2837fdca
7 changed files with 13 additions and 13 deletions

View file

@ -24,7 +24,7 @@ Python ≥3.10. MAF (`agent-framework-core` 1.9.0). Pakkehåndtering: `uv`. To b
- Modell-valg som konfig (modell-map rolle→Foundry-deployment), ikke spredt i kode.
- Metode kodifiseres som **Agent Skill** (`agentskills.io`: `SKILL.md` + `scripts/` + `references/`).
- Datatilgang: in-process `FunctionTool` er default-sømmen i kjørestien. **MCP er wiret som opt-in i kjørestien** (`mcp_tools.py` + `--mcp-config`, Trekk B 2026-08-05): konkrete eksterne servere blir verktøy agentene kan kalle UNDER debatten. Uten konfig gjøres null nettverkskall og verktøylista er uendret. Tre regler er load-bearing: **allowlist er påkrevd** (tom liste ville latt motparten bestemme hva agentene får kalle), **hver server og hvert tillatte verktøy navngis i kunngjøringen før første kall** (også uten `--mandate` — ingen udeklarert egress), og `--live-dry-run` åpner **ingenting**. Egen søm fra `ingest_mcp.py` (kildedokumenter FØR kjøring, null-argument-tools) — samme protokoll, ulik jobb. `build_mcp_server` (`datasource.py`) er fortsatt kun demo. Data-source-konfig JSON-Schema-validert, fail-fast.
- `shared/` er en **git subtree** av [`portfolio-optimiser-commons`](https://git.fromaitochitta.com/open/portfolio-optimiser-commons) (source of truth, R1 realisert 2026-07-03; publisert i `open/` 2026-08-04 — `commons`-remoten peker fortsatt på `ktg/` og virker uendret). Synk er **pull-only**: endringer committes i commons og hentes med `git subtree pull --prefix=shared commons main --squash`. ALDRI `git subtree push` fra konsument — re-split lekker hele konsument-historikken inn i commons (observert + opprydd 2026-07-03). Se `shared/README.md`. Wheelen bærer treet som pakkede data siden Fase 4a — se invarianten under.
- `shared/` er en **git subtree** av [`portfolio-optimiser-commons`](https://git.fromaitochitta.com/open/portfolio-optimiser-commons) (source of truth, R1 realisert 2026-07-03; publisert i `open/` 2026-08-04 — `commons`-remoten peker fortsatt på den private namespacen og virker uendret). Synk er **pull-only**: endringer committes i commons og hentes med `git subtree pull --prefix=shared commons main --squash`. ALDRI `git subtree push` fra konsument — re-split lekker hele konsument-historikken inn i commons (observert + opprydd 2026-07-03). Se `shared/README.md`. Wheelen bærer treet som pakkede data siden Fase 4a — se invarianten under.
## Kommandoer
- Sync: `uv sync` — installerer to konsoll-kommandoer: `portfolio-optimiser` (CLI, `run:main`) og

View file

@ -69,7 +69,7 @@ nøkkel/nettverk · mypy/ruff grønne.
## I3 — D7-speil: filkatalog/CSV **[GATET: annet repo]**
**Mål:** Samme kontrakt konsumert uendret fra commons i søskenrepoet
(`/Users/ktg/repos/portfolio-optimiser-claude`) — beviser at ingest-spec-en faktisk er delt.
(`../portfolio-optimiser-claude`) — beviser at ingest-spec-en faktisk er delt.
**Innhold:** forankres i søskenets STATE + egen `/trekbrief`. Commons-pull der; egen impl mot
samme spec; speiltester av I2s load-bearing-sett; søskenets framework-guard utvides

View file

@ -37,8 +37,8 @@
|---|---|---|---|
| A1 | `portfolio-optimiser/src/portfolio_optimiser/okf.py` | Py, 202 l | les + skriv + validér |
| A2 | `portfolio-optimiser-claude/src/portfolio_optimiser_claude/okf.py` | Py, 134 l | **kun les** (mangler skrive-halvdelen/Steg 8-primitiver) |
| B1 | `ktg-plugin-marketplace/okr/` (lib+scripts `.mjs`) | JS | index-generering + validering |
| B2 | `ktg-plugin-marketplace/linkedin-studio/scripts/brain/` | TS | emit + conformance-test |
| B1 | `plugin-marketplace/okr/` (lib+scripts `.mjs`) | JS | index-generering + validering |
| B2 | `plugin-marketplace/linkedin-studio/scripts/brain/` | TS | emit + conformance-test |
| C1 | `claude-code-llm-wiki/tools/wiki_ingest/bundle.py` | Py, 436 l | OKF-produsent (ingest→bundle) |
| C2 | `llm-ingestion-pipeline-security/src/llm_ingestion_guard/okf.py` | Py, 579 l | defensiv validator, **reject-by-default** |

View file

@ -25,7 +25,7 @@ kodelokasjoner (revisjonspakke §0.2, verifisert mot ground truth 2026-07-14):
| A2 | `portfolio-optimiser-claude/.../okf.py` | 134 l | **kun les** — mangler skrive-halvdelen |
| C1 | `claude-code-llm-wiki/tools/wiki_ingest/bundle.py` | 436 l | OKF-produsent (ingest→bundle) |
| C2 | `llm-ingestion-pipeline-security/.../okf.py` | 579 l | defensiv validator, reject-by-default |
| B1/B2 | `ktg-plugin-marketplace/` (`.mjs`/`.ts`) | JS/TS | index-generering + conformance |
| B1/B2 | `plugin-marketplace/` (`.mjs`/`.ts`) | JS/TS | index-generering + conformance |
≥4 uavhengige Python-`parse_frontmatter` + 2 i JS. Konsekvensene (F-INT-2): duplisert
vedlikehold, og at Claude-søskenet (A2) **mangler skrive-halvdelen** A1 har — så det ikke kan
@ -93,7 +93,7 @@ UNDER det D7-sammenligningen måler, så delt kode her forurenser ikke sammenlig
mangler i dag** (Steg 8-primitiver). Dette er hovedgevinsten for D-Gs «minst like godt»-mål.
3. **`claude-code-llm-wiki` (C1)** → senere; produsent-stien (ingest→bundle) legges på
`okf-core` + fabrikken.
4. **`ktg-plugin-marketplace` (B1/B2)** → forblir JS/TS (kan ikke dele Python-kode), men
4. **`plugin-marketplace` (B1/B2)** → forblir JS/TS (kan ikke dele Python-kode), men
konsumerer **formatprøven** som delt data.
5. **`llm-ingestion-guard` (C2)** → migreres IKKE; forblir eget repo og trekkes inn som
**avhengighet** i fabrikkens sikkerhetsvask.

View file

@ -175,7 +175,7 @@ andre enden — å avgi dommen etterpå — er `docs/ekspert-svar.md`.
**Feiler live-kjøringen på scenen: ikke debug. Vis fila.**
```
cat /Users/ktg/repos/portfolio-optimiser/tests/golden/demo-transcript.stdout
cat tests/golden/demo-transcript.stdout
```
**Stien er absolutt med vilje.** Prosaen under peker på feil katalog som en sannsynlig årsak — og en
@ -307,7 +307,7 @@ til **hakene** — de er det eneste som ellers ville havnet i fila etter `Y`.
Et `| wc -l` alene kan altså ikke skille dem, og lest som «taggen landet ikke» er det en abort
på feil grunnlag — dagen etter at push-en faktisk lyktes. **Exit 128: vent til porten svarer
igjen, og bruk en probe — ikke en klokke:** `ssh -T git@git.fromaitochitta.com` → `Hi there,
ktg!`. Det er dette som kom tilbake da forbindelsen løsnet 08-11; **ingen fast ventetid er
<user>!`. Det er dette som kom tilbake da forbindelsen løsnet 08-11; **ingen fast ventetid er
målt**, så et tall her ville vært gjettet. Kjør så kommandoen på nytt. `git tag -l` er lokal og
svarer uansett; den skiller «tagget lokalt» fra «nådde origin» uten å røre nettverket.
**Ble PUSH-en selv rate-limitet (punkt 10), er retry både riktig og trygt** — målt: `git push`

View file

@ -148,7 +148,7 @@ derfor re-kjøringen som et erklært protokollavvik — det absorberes ikke stil
kjøring 1 førsteklasses, jf. tabellen over.
**Konfig-diff mellom feilet og vellykket kjøring (publisert):**
`git -C /Users/ktg/repos/portfolio-optimiser-claude diff 0238507..7637c6f --stat` viser 7 filer
`git -C ../portfolio-optimiser-claude diff 0238507..7637c6f --stat` viser 7 filer
endret, 253 innsettinger, 25 slettinger (`artifacts.py`, `loop.py`, `run_s10.py`, `sdk_client.py`
+ tre testfiler), samlet i fiks-commiten `7637c6f` «fix(run): S10 del 2 — post-mortem:
stopp-artefakt, SDK-isolasjon, raw-JSON-direktiv». Endringene er harness-fikser (SDK-isolasjon
@ -248,8 +248,8 @@ Klasser: **reproduce** = kommandoen kan kjøres på nytt og skal gi samme svar;
**recompute-from-artifact** = tallet avledes av committede artefakter (live-tall re-kjøres aldri,
jf. §4.2/§4.5); **disclosed-non-reproducible** = kilden er erklært og ikke-reproduserbar.
Kommandoer kjøres fra MAF-repoets rot (`/Users/ktg/repos/portfolio-optimiser`); søskenet er
`/Users/ktg/repos/portfolio-optimiser-claude`.
Kommandoer kjøres fra MAF-repoets rot (dette repoet); søskenet er sjekket ut som nabokatalog
(`../portfolio-optimiser-claude`).
| # | Påstand | Kommando / kilde | Klasse |
|---|---|---|---|
@ -278,7 +278,7 @@ Kommandoer kjøres fra MAF-repoets rot (`/Users/ktg/repos/portfolio-optimiser`);
python3 - <<'EOF'
import json, pathlib
g = json.loads(pathlib.Path("shared/examples/bygg-energi-mikro/golden.json").read_text())["validator"]
r = json.loads(pathlib.Path("/Users/ktg/repos/portfolio-optimiser-claude/runs/s10/run_result.json").read_text())["outcome"]
r = json.loads(pathlib.Path("../portfolio-optimiser-claude/runs/s10/run_result.json").read_text())["outcome"]
for k in ("p10", "p50", "p90"):
assert g[k] == r[k], (k, g[k], r[k])
print("OK: golden == run_result (bit-for-bit p10/p50/p90)")

View file

@ -3,7 +3,7 @@
**Dato:** 2026-07-04
**Program:** ingest-konnektorer for portfolio-optimiser, avsluttende steg (I7).
**Omfang:** begge referanseimplementasjonene — MAF (dette repoet) og Claude Agent
SDK-søsknet (D7, [`portfolio-optimiser-claude`](https://git.fromaitochitta.com/ktg/portfolio-optimiser-claude),
SDK-søsknet (D7, [`portfolio-optimiser-claude`](https://git.fromaitochitta.com/open/portfolio-optimiser-claude),
sitert *read-only*).
**Bindende føring:** ærlighets-regelen — [målbilde §0 + §11 «Stack-mapping (ærlighets-avgrenset)»](../plan/2026-07-03-maalbilde-ingest-lag.md).
Rapporten skiller **kapabilitet-implementert** fra **kjørt-mot-live**, og holder to «live»-akser