docs(scope): expand roadmap to cover all eight OKF surfaces

Operator decision: the initial v1 boundary (portfolio pair only) left
five of eight OKF surfaces uncovered. CLAUDE.md/README now define a
four-phase roadmap: door A, doors B/C, configurable bundle contract
(wiki strict-v1), and a zero-dep Node/ESM half for the second-brain
plugin world. Halves share contract and fixtures, never code. Security
stays with llm-ingestion-guard in both runtimes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QeqhJpYQyghASjiJo5EhGg
This commit is contained in:
Kjell Tore Guttormsen 2026-07-16 10:32:58 +02:00
commit e57afecf72
2 changed files with 58 additions and 28 deletions

View file

@ -34,29 +34,40 @@ side of the boundary something belongs on: ask the operator.
pre-mutation collision gate, validated `ingested_at`, typed `IngestError`)
are the library baseline. First consumer: `portfolio-optimiser-claude`.
### Open crossroads: the Node second-brain world (decision deferred)
### Roadmap (committed phases — all known OKF surfaces get covered)
The OKF second-brain plugins (okr, linkedin-studio, ms-ai-architect, and the
marketplace catalog spec) are deliberately Node/ESM zero-dependency and
cannot consume a Python library directly. okr has documented it does not
want a Python bridge. v1 therefore aligns with the catalog's
`okf-second-brain/spec.md` as a *contract* only and ships no Node code.
Revisit when any of these become true:
1. **Phase 1 — Door A (Python).** ingest-spec implementation + the §11
golden fixtures. Consumers: `portfolio-optimiser-claude` first, then
`portfolio-optimiser`.
2. **Phase 2 — Doors B/C (Python).** Bundle inbox and external-bundle
import, guard-gated.
3. **Phase 3 — Configurable bundle contract.** Types, layers, frontmatter
sets, and reserved-file policy become config instead of constants;
proving consumer is `claude-code-llm-wiki` (`strict-v1` profile).
4. **Phase 4 — Node half (`node/`).** Zero-dependency Node/ESM package
(importable *and* CLI-invokable, vendorable per plugin — matching the
marketplace precedent) for the second-brain world: bundle check, index
generation, inbox split/frontmatter/write, and doc conversion
(docx/pdf/eml/html → md). Covers okr, linkedin-studio, ms-ai-architect,
and the marketplace catalog.
1. A second Node consumer needs shared ingestion *code*, not just the
catalog conventions (`okf-check.mjs`/`okf-index.mjs`).
2. okr's doc-conversion layer (docx/pdf/eml/html → md) gets built and
duplicates Door B's extraction logic.
3. The catalog's convention-level alignment proves insufficient to keep
bundle forms interoperable.
The two halves share the OKF contract and fixture suite, **not code**.
### Non-goals (v1)
Phase 4 preconditions (coordination, not unilateral moves):
- Lifts okr's reference implementations (`okf-check.mjs`, `okf-index.mjs`,
innboks libs) in agreement with okr and the marketplace catalog; the
catalog remains the convention owner and re-pins its shared gate here.
- linkedin-studio's `ingest/published/` provenance-record grammar stays
plugin-local by design (different lifecycle) — do not normalize it.
- The Node-side persist gate remains security territory: guard-as-contract
(per okr's adoption doc) until a Node guard exists in the security repo.
No security reimplementation here, in either runtime.
### Non-goals (all phases)
- `strict-v1` wiki bundle profile (`claude-code-llm-wiki`) — v2 candidate;
requires a configurable bundle contract (types/layers/frontmatter sets/
reserved-file policy as config, not constants).
- Verdict/feedback machinery (method-spec) — stays in consumer repos.
- Embedding/RAG/retrieval layers.
- Security functionality — always the guard's domain.
## Stack
@ -66,6 +77,11 @@ The only permitted future runtime dependency is `llm-ingestion-guard`
(itself zero-dep), added when the first persist gate is implemented.
Binary extraction parsers live behind the `[extract]` extra only.
Phase 4 adds a `node/` half: Node/ESM with zero npm dependencies
(`node:` builtins only), both importable and CLI-invokable, consumed by
vendoring per plugin rather than npm publishing. The halves share contract
and fixtures, never code.
## Conventions
- Type hints everywhere; `mypy --strict` target.

View file

@ -40,20 +40,34 @@ Security is owned by the sibling package
No security functionality is reimplemented here.
## Non-goals (v1)
## Roadmap
The library is built in four phases so that every known OKF surface in the
ecosystem is eventually covered:
1. Spec-based ingestion (Python) with byte-exact golden fixtures.
2. Bundle inbox and external-bundle import (Python), guard-gated.
3. Configurable bundle contract (types, layers, frontmatter sets, and
reserved-file policy as configuration), enabling stricter bundle
profiles such as `strict-v1`.
4. A `node/` half: a zero-dependency Node/ESM package (importable and
CLI-invokable, vendored per consumer) providing bundle checking, index
generation, inbox processing, and document conversion for the OKF
second-brain plugin ecosystem. The Python and Node halves share the OKF
contract and fixture suite, not code.
## Non-goals
- The `strict-v1` bundle profile used by `claude-code-llm-wiki` (candidate
for v2; requires a configurable bundle contract).
- A Node/JavaScript port for the OKF second-brain plugin ecosystem, which is
deliberately Node/ESM zero-dependency. See CLAUDE.md for the recorded
decision criteria.
- Verdict/feedback machinery from the method specification (stays in the
consuming repositories).
- Embedding- or retrieval-layer functionality.
- Security functionality, in either runtime — that is always
`llm-ingestion-guard`'s domain.
## Requirements
Python 3.10+. The core has zero runtime dependencies.
Python 3.10+. The core has zero runtime dependencies. The planned Node half
targets Node/ESM with zero npm dependencies.
## License