docs: wheel-konsumenten får de to git-kravene i install-instruksen

Wheel-beslutningen tatt på den ene armen som ligger i DETTE repoet: dokumentér
kravene. Å publisere de to pakkene er de to ANDRE repoenes beslutning
(open/llm-ingestion-okf, open/llm-ingestion-pipeline-security) og forblir åpen.

Premisset målt på nytt før teksten ble skrevet, ikke arvet: wheelen bygget her og
Requires-Dist lest ut — llm-ingestion-okf og llm-ingestion-guard står som BARE
NAVN, som rapportens §7.2 forutsa. Install-kommandoen er kopiert ordrett fra den
målte i §7.2 (65 pakker, exit 0), ikke formulert på nytt.

Rettet samtidig en påstand som var blitt ufullstendig av 4a: «an installed
distribution works without a checkout» gjaldt DATAEN (shared/ som pakkede data),
ikke avhengighetene. Presisert til «finds its knowledge without a checkout».

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018GfbDLY7YVLKVqpUHnbwVW
This commit is contained in:
Kjell Tore Guttormsen 2026-08-14 00:07:17 +02:00
commit 9a869baf8a

View file

@ -24,10 +24,28 @@ uv sync
``` ```
The clone is the documented path because the walkthrough below points at files in the tree. It is The clone is the documented path because the walkthrough below points at files in the tree. It is
no longer a technical requirement: a built wheel carries the shared spec, the persona skill and the no longer a technical requirement for the DATA: a built wheel carries the shared spec, the persona
example bundles under [`shared/`](shared/README.md) as packaged data, and the resolver prefers a skill and the example bundles under [`shared/`](shared/README.md) as packaged data, and the
working tree when one is present (`PORTFOLIO_SHARED_ROOT` overrides both) — so an installed resolver prefers a working tree when one is present (`PORTFOLIO_SHARED_ROOT` overrides both) — so
distribution works without a checkout. an installed distribution finds its knowledge without a checkout.
### Installing a built wheel
A wheel is **not installable on its own**, and the failure is a resolver error rather than a
missing file. Two dependencies are pinned to git tags, and `[tool.uv.sources]` is uv configuration
that does not travel with wheel metadata — so the wheel names `llm-ingestion-okf` and
`llm-ingestion-guard` as bare names that no package index can resolve. Supply the two requirements
alongside the wheel (measured: 65 packages, exit 0):
```bash
uv pip install portfolio_optimiser-1.0.0-py3-none-any.whl \
"llm-ingestion-okf @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v0.3.2" \
"llm-ingestion-guard @ git+https://git.fromaitochitta.com/open/llm-ingestion-pipeline-security.git@v0.3.4"
```
Both are tag-pinned deliberately: they are security components, and a version that can move under
an install is a gate that can stop gating without a local diff. `uv sync` from a clone reads the
pins from `pyproject.toml`, which is why the source path above needs none of this.
`uv sync` installs two commands: `portfolio-optimiser` (the CLI) and `portfolio-optimiser-demo` `uv sync` installs two commands: `portfolio-optimiser` (the CLI) and `portfolio-optimiser-demo`
(the offline end-to-end proof). They are equivalent to the `python -m portfolio_optimiser.run` and (the offline end-to-end proof). They are equivalent to the `python -m portfolio_optimiser.run` and