Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
192 commits
Select commit Hold shift + click to select a range
e1b0888
Add durable model store with activation journal
chris-beckman Oct 30, 2026
4f0c132
Make store operations durable and admission strict
chris-beckman Oct 30, 2026
1087287
Confine artifact paths with os.Root and reject corrupt journal records
chris-beckman Oct 30, 2026
7eb2a80
Complete modelstore leases, garbage collection, disk admission, and r…
chris-beckman Oct 30, 2026
af2567c
Add nativegen provider adapter and factory wiring
chris-beckman Oct 30, 2026
38618f6
Add stdio round-trip check against the nativegen binary
chris-beckman Oct 30, 2026
cbfc50d
Align the adapter's frame codec with the service protocol
chris-beckman Oct 30, 2026
f77e850
Send the manifest field on load; the service requires it
chris-beckman Oct 30, 2026
2d638a0
Bound the round-trip test with a 30s context
chris-beckman Oct 30, 2026
965a51d
Complete Gemma 4 E4B nativegen provider, chat template, and 64K budget
chris-beckman Oct 31, 2026
8be785e
Hold journal lock across activation verification and release suppleme…
chris-beckman Oct 31, 2026
78e2760
Merge branches 'feat/native-generation-engine' and 'feat/durable-mode…
chris-beckman Oct 31, 2026
cb1d860
fix(nativegen): align Rust wire protocol, tokenizer decoding, and mod…
chris-beckman Oct 31, 2026
e5791d3
Add bounded physical inference admission and memory reservations
chris-beckman Oct 31, 2026
3ff716c
Publish immutable authenticated model revisions with cross-process le…
chris-beckman Oct 31, 2026
44ed2be
Repair released model revisions with atomic directory exchange
chris-beckman Oct 31, 2026
fa6e65b
Merge remote-tracking branch 'origin/feat/durable-model-store' into f…
chris-beckman Nov 1, 2026
c9febb8
Reap decision runtimes when their response pipe fails
chris-beckman Nov 1, 2026
2c47779
Use plain fixture names for response-pipe failures
chris-beckman Nov 1, 2026
23c80d7
Separate physical memory budgets from inference compute queues
chris-beckman Nov 1, 2026
2eaeeef
Bind Bialy physical work to shared device admission
chris-beckman Nov 1, 2026
a9136ec
Record the loaded decision engine lifecycle boundary
chris-beckman Nov 1, 2026
709b990
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
7646e44
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
99d4af9
feat(nativegen): supervise bounded RPC with retained memory admission
chris-beckman Nov 1, 2026
43bb699
feat(nativegen): share the model runtime across exact-rendered provid…
chris-beckman Nov 1, 2026
154aaee
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
7667488
feat(nativegen): inject shared runtime through provider lifecycle
chris-beckman Nov 1, 2026
85064d7
fix(nativegen): report runtime context and bound default output reserve
chris-beckman Nov 1, 2026
1746996
feat(nativegen): validate GPU facts and fence active model revisions
chris-beckman Nov 1, 2026
b0d4546
Merge native GPU inventory into the provider integration
chris-beckman Nov 1, 2026
3fab897
feat(modelstore): import authenticated local model bundles
chris-beckman Nov 1, 2026
378bb42
feat(inference): admit Bialy startup on a pinned physical device
chris-beckman Nov 1, 2026
5df67b7
Merge authenticated bundle import for native provider startup
chris-beckman Nov 1, 2026
3d42571
Merge post-CI application integration as model-store prerequisite
chris-beckman Nov 1, 2026
06e4c01
Merge application prerequisites and adapt native runtime injection
chris-beckman Nov 1, 2026
f5476db
Merge model-store prerequisite composition
chris-beckman Nov 1, 2026
166f727
Query packaged generation device inventory through bounded host execu…
chris-beckman Nov 1, 2026
27819e9
Validate generation completion against the requested output contract
chris-beckman Nov 1, 2026
9eaa656
Decode co-shipped model release authority and require explicit store …
chris-beckman Nov 1, 2026
e5c4557
Merge branch 'feat/durable-model-store' into feat/native-generation-p…
chris-beckman Nov 1, 2026
24376e9
Enforce physical RAM and device working-set admission independently
chris-beckman Nov 1, 2026
8299d47
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
99f4ba1
Audit pinned model contents and publish read-only payloads
chris-beckman Nov 1, 2026
a69d9fa
Merge branch 'feat/durable-model-store' into feat/native-generation-p…
chris-beckman Nov 1, 2026
824e674
Select local accelerators by stable physical identity and capacity
chris-beckman Nov 1, 2026
1374549
Audit pinned model content before native process startup
chris-beckman Nov 1, 2026
a2a41b8
Admit generation context against shared model memory budgets
chris-beckman Nov 1, 2026
3af5aae
Preserve compiler plugin metadata in decision engine builds
chris-beckman Nov 1, 2026
0a4f392
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
9ea0ce3
Keep Bialy MLX activations half precision and admit batch memory
chris-beckman Nov 1, 2026
a3d1be0
Reap the owned decision engine during host shutdown
chris-beckman Nov 1, 2026
a2d088c
Admit the native runtime's declared host memory plan
chris-beckman Nov 1, 2026
bca8ed3
Plan bounded Bialy checkpoint memory before process startup
chris-beckman Nov 1, 2026
cb569fc
Merge remote-tracking branch 'origin/feat/native-generation-engine' i…
chris-beckman Nov 1, 2026
11bf13e
Keep Bialy memory capacity available across runtime restarts
chris-beckman Nov 1, 2026
ed85a9d
Compose bundled generation and Bialy resources during host startup
chris-beckman Nov 1, 2026
34044ff
Cover M2 Pro decision residency in the MLX memory plan
chris-beckman Nov 1, 2026
741f7fd
Record bounded host composition and MLX graph review
chris-beckman Nov 1, 2026
69e607f
Preserve build-time Rust library metadata for macOS host builds
chris-beckman Nov 1, 2026
02aa936
Discover native models through admitted host runtime
chris-beckman Nov 1, 2026
970d47e
Classify native process responses and declare its transport
chris-beckman Nov 1, 2026
6c1fdd5
Integrate native prompt measurement for request fitting
chris-beckman Nov 1, 2026
875b2f7
Fit local requests with exact artifact token counts
chris-beckman Nov 1, 2026
dc89fe4
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
ed64886
Share bounded MLX workspace between generation and decisions
chris-beckman Nov 1, 2026
0d174a9
Bind model bundle import and repair to the requested slot
chris-beckman Nov 1, 2026
8de4044
Merge model store target-slot validation
chris-beckman Nov 1, 2026
d354cfa
Select the bundled generation slot explicitly at startup
chris-beckman Nov 1, 2026
89ae6fc
Retain immutable model identity across process exit
chris-beckman Nov 1, 2026
6c46008
Repair bundled generation artifacts within the runtime lifetime
chris-beckman Nov 1, 2026
069ef27
Publish current generation admission and recovery state
chris-beckman Nov 1, 2026
07c62cd
Expose current local generation readiness and authenticated repair
chris-beckman Nov 1, 2026
f29a093
Keep local model recovery available after seed import failures
chris-beckman Nov 1, 2026
4e84ca0
Retain resident generation after bounded step cancellation
chris-beckman Nov 1, 2026
05f8f57
Merge remote-tracking branch 'origin/review/post-ci-integration' into…
chris-beckman Nov 1, 2026
244a69d
Compose the refreshed prerequisite contracts with local inference
chris-beckman Nov 1, 2026
67825a7
Merge remote-tracking branch 'origin/feat/durable-model-store' into f…
chris-beckman Nov 1, 2026
2d6f9ba
Describe native generation cache and reasoning capabilities accurately
chris-beckman Nov 1, 2026
658aba0
Record the bounded model administration recovery boundary
chris-beckman Nov 1, 2026
13a682d
Verify signed model seeds before packaging
chris-beckman Nov 1, 2026
d8ebf4f
Merge remote-tracking branch 'origin/feat/durable-model-store' into f…
chris-beckman Nov 1, 2026
cd962a1
Merge remote-tracking branch 'origin/feat/native-generation-engine' i…
chris-beckman Nov 1, 2026
06f662a
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
ecf00fd
Stage the native runner and authenticated generation seed in applicat…
chris-beckman Nov 1, 2026
f7e2eba
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
7c7d7c8
Include generation runtime in Linux closures and dependency notices
chris-beckman Nov 1, 2026
66dad05
Keep generation packaging orchestration within its runtime module
chris-beckman Nov 1, 2026
c521d46
Record bounded generation packaging and notice assembly reviews
chris-beckman Nov 1, 2026
3e1b8e7
Preserve local inference startup failures in provider readiness
chris-beckman Nov 1, 2026
de08b60
Allow Nix lock regeneration before validating packaged notice inputs
chris-beckman Nov 1, 2026
2531902
Refresh generated Nix frontend inputs and classify generation crate l…
chris-beckman Nov 1, 2026
6c763a2
Name the pinned llama source as a gzip archive for Nix unpacking
chris-beckman Nov 1, 2026
62cdf1b
Resolve the Vulkan shader compiler from its executable output
chris-beckman Nov 1, 2026
e74db1e
Resolve the Nix adapter source relative to its build directory
chris-beckman Nov 1, 2026
97b3f08
Bound Bialy ranking requests to shared device batches
chris-beckman Nov 1, 2026
c40367b
Authenticate exported model bundles with explicit release keys
chris-beckman Nov 1, 2026
5eca63e
Merge branch 'feat/durable-model-store' into feat/native-generation-p…
chris-beckman Nov 1, 2026
936e3ee
Yield shared inference admission between decision batches
chris-beckman Nov 1, 2026
efc1e5a
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
fe1ba23
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
d1967e6
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
6c6ed92
Merge remote-tracking branch 'origin/review/post-ci-integration' into…
chris-beckman Nov 1, 2026
cbf95aa
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
12121c5
Merge branch 'feat/durable-model-store' into feat/native-generation-p…
chris-beckman Nov 1, 2026
78a7219
fix(bialy): enable persistent Vulkan kernel caches
chris-beckman Nov 1, 2026
ceefbfd
Prepare measured model exports from explicit payloads
chris-beckman Nov 1, 2026
0694fc4
Merge remote-tracking branch 'origin/feat/durable-model-store' into f…
chris-beckman Nov 1, 2026
1d3abec
Assemble authenticated generation seeds in Nix resources
chris-beckman Nov 1, 2026
3e368d3
Pin current shared Go vendor inputs for Nix builds
chris-beckman Nov 1, 2026
7a48b78
Pass explicit release fields to the generation seed builder
chris-beckman Nov 1, 2026
8c45b06
Record the model store transaction boundary review
chris-beckman Nov 1, 2026
53576b4
Record native runtime lifetime and admission boundaries
chris-beckman Nov 1, 2026
39c8cab
Merge remote-tracking branch 'origin/feat/durable-model-store' into f…
chris-beckman Nov 1, 2026
865c7c4
Merge remote-tracking branch 'origin/feat/native-generation-engine' i…
chris-beckman Nov 1, 2026
4d1617e
Prepare process-local NVIDIA drivers for packaged inference
chris-beckman Nov 1, 2026
c039635
Exercise versioned driver resolution against isolated system fixtures
chris-beckman Nov 1, 2026
f97ba31
Set explicit ownership permissions on system-library fixture
chris-beckman Nov 1, 2026
4408bbc
Preserve NVIDIA driver API metadata in private ICDs
chris-beckman Nov 1, 2026
3f1e5b7
Add scheduled Bialy dependency preparation and lock persistent cache …
chris-beckman Nov 1, 2026
8e454d7
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
6b68634
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
7dc5756
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
1d8531b
Reuse verified model payloads when repairing revision links
chris-beckman Nov 1, 2026
9c847b2
Merge branch 'feat/durable-model-store' into feat/native-generation-p…
chris-beckman Nov 1, 2026
a37af07
Review verified repair reuse within the store transaction
chris-beckman Nov 1, 2026
ca0295b
Merge branch 'feat/durable-model-store' into feat/native-generation-p…
chris-beckman Nov 1, 2026
ef0b2b6
Accumulate Vulkan decision normalization in float32
chris-beckman Nov 1, 2026
f88242e
Use checked tensor extraction in normalization regression
chris-beckman Nov 1, 2026
dad41a7
Expose decision device admission latency in debug logs
chris-beckman Nov 1, 2026
699f658
fix(inference): retain decision priority across native batches
chris-beckman Nov 1, 2026
75371d8
fix(inference): honor explicit Vulkan ICD selection
chris-beckman Nov 1, 2026
1f021e5
fix(modelstore): record full architectural review commit
chris-beckman Nov 1, 2026
afcaf88
Merge branch 'feat/durable-model-store' into feat/native-generation-p…
chris-beckman Nov 1, 2026
21b2781
refactor(build): group Bialy dependency preparation with toolchains
chris-beckman Nov 1, 2026
11f140b
fix(build): resolve relocated Bialy preparation entrypoint
chris-beckman Nov 1, 2026
5b75a91
docs(inference): review decision scheduling and process boundaries
chris-beckman Nov 1, 2026
8287086
docs(nativegen): retain child cleanup within process lifetime
chris-beckman Nov 1, 2026
27ed567
fix(inference): load NVIDIA device creation dependencies
chris-beckman Nov 1, 2026
9a76bea
Merge remote-tracking branch 'origin/feat/native-generation-engine' i…
chris-beckman Nov 1, 2026
ee46839
Merge remote-tracking branch 'origin/feat/native-generation-engine' i…
chris-beckman Nov 1, 2026
5283d4b
Merge remote-tracking branch 'origin/feat/native-generation-engine' i…
chris-beckman Nov 1, 2026
914722a
perf(nativegen): admit full-context prefix measurements
chris-beckman Nov 1, 2026
452b7ff
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
6e1fe41
docs(generation): renew composed benchmark boundary review
chris-beckman Nov 1, 2026
54c19c5
Merge native prefix review with composed packaging contracts
chris-beckman Nov 1, 2026
d1e8dad
test(nativegen): distinguish verified reuse from damaged repair
chris-beckman Nov 1, 2026
b73c0fc
perf(nativegen): preserve conversation prefixes across utility calls
chris-beckman Nov 1, 2026
c5c4949
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
f7abcf8
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
0770fd8
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
5e740d2
Use the largest admitted native generation context
chris-beckman Nov 1, 2026
538b0d9
Bound two-row MLX decision workspace from full-length probes
chris-beckman Nov 1, 2026
203fa5b
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
ce50570
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
e975c6d
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
b9ebe9d
Qualify large native prompts and 48K shared memory admission
chris-beckman Nov 1, 2026
07506c7
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
2cc6cba
Accept bounded native conversation continuation reuse
chris-beckman Nov 1, 2026
721c6a6
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
ac69a52
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
14dd014
Apply the pinned KV cursor patch in Linux packages
chris-beckman Nov 1, 2026
1cc4a54
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
16fb1a1
fix(modelstore): persist publication directory ancestry
chris-beckman Nov 1, 2026
d2075d6
Merge remote-tracking branch 'origin/feat/durable-model-store' into f…
chris-beckman Nov 1, 2026
4dd5b9b
docs(modelstore): review durable publication boundary
chris-beckman Nov 1, 2026
419475e
Merge remote-tracking branch 'origin/feat/durable-model-store' into f…
chris-beckman Nov 1, 2026
58de872
Merge remote-tracking branch 'origin/feat/native-generation-engine' i…
chris-beckman Nov 1, 2026
00af680
Merge remote-tracking branch 'origin/feat/native-generation-engine' i…
chris-beckman Nov 1, 2026
6e49534
feat(nativegen): prepare declared context with foreground preemption
chris-beckman Nov 1, 2026
14389b2
docs(nativegen): review preparation admission boundary
chris-beckman Nov 1, 2026
75594c9
Merge remote-tracking branch 'origin/feat/native-generation-engine' i…
chris-beckman Nov 1, 2026
62c4760
feat(nativegen): prepare declared reusable history
chris-beckman Nov 1, 2026
cad5df3
Retain the standing boundary when preparing known history
chris-beckman Nov 1, 2026
f5b325c
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
31c319c
Screen local preparation without turn or approval effects
chris-beckman Nov 1, 2026
d9476d0
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
be45e13
Expose non-starting local preparation eligibility
chris-beckman Nov 1, 2026
563346d
Cover preparation eligibility without provider startup
chris-beckman Nov 1, 2026
2b2ec52
Prepare standing context when history needs fitting
chris-beckman Nov 1, 2026
e2386da
Review resident runtime preparation and checkpoint boundaries
chris-beckman Nov 1, 2026
8660cc3
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
cab6f4d
Preserve preparation capability with request logging enabled
chris-beckman Nov 1, 2026
f6d5ddd
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
0ccfe77
Merge branch 'feat/native-generation-engine' into feat/native-generat…
chris-beckman Nov 1, 2026
5d4f9b2
fix: explain deferred context preparation in debug diagnostics
chris-beckman Nov 1, 2026
eb0290b
feat: capture screened preparation under model debug logging
chris-beckman Nov 1, 2026
964fdf2
test: keep preparation separate from session task capture
chris-beckman Nov 1, 2026
8cf815c
Decode Gemma thought channels separately from visible output
chris-beckman Nov 1, 2026
4d028fd
Keep anticipatory history on the foreground prefill chunk grid
chris-beckman Nov 1, 2026
66152cb
Renew native runtime lifecycle boundary reviews
chris-beckman Nov 1, 2026
5d61925
fix(localdata,wire): classify local-models dir and stub provider repa…
chris-beckman Nov 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 11 additions & 30 deletions Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -94,33 +94,9 @@ tasks:
- bash {{.SCRIPTS_DIR}}/repo-snapshot-lock.sh read -- go build -tags=paintedwolf_release ./...

build:lycaon-dev:
desc: Build lycaon-dev + sibling pw-logs, bialy, and pw-document-core — local den:sidecar + stable @self MCP (not go run)
desc: Build the development host and its document, decision, and generation runtimes
dir: '{{.GO_DIR}}'
sources:
- '**/*.go'
- 'internal/harnessfixture/contract.json'
- 'internal/documentcore/native/src/**/*.rs'
- internal/documentcore/native/Cargo.toml
- internal/documentcore/native/Cargo.lock
- '../scripts/build-document-core.sh'
- 'internal/db/*.sql'
- 'internal/db/released-baselines.json'
- 'internal/backup/archive-limits.json'
- 'config/**/*'
- go.mod
- go.sum
- '../VERSION'
- '../scripts/sign-dev-binary.sh'
- '../scripts/dev-signing-config.sh'
- '../scripts/build-dev-engine.sh'
- '../scripts/resolve-opengrep.sh'
- '../scripts/stage-bundled-opengrep.sh'
generates:
- '{{.BUILD_DIR}}/lycaon-dev'
- '{{.BUILD_DIR}}/pw-logs'
- '{{.BUILD_DIR}}/pw-document-core'
status:
- env -u LYCAON_OPENGREP_CANDIDATE '{{.BUILD_DIR}}/lycaon-dev' scan engines verify-bundled --root {{.ROOT_DIR}}/lycaon-den/src-tauri/engine-root >/dev/null
# Seed paths and signing inputs are selected outside the source tree.
cmds:
- bash {{.SCRIPTS_DIR}}/build-dev-engine.sh

Expand Down Expand Up @@ -687,22 +663,27 @@ tasks:
generation:prepare:
desc: Prepare pinned generation runtime dependencies or prototype artifacts
cmds:
- python3 {{.SCRIPTS_DIR}}/generation/runtime.py prepare {{.CLI_ARGS}}
- bash {{.SCRIPTS_DIR}}/generation/run.sh prepare {{.CLI_ARGS}}

generation:build:
desc: Build a native generation runtime candidate
cmds:
- python3 {{.SCRIPTS_DIR}}/generation/runtime.py build {{.CLI_ARGS}}
- bash {{.SCRIPTS_DIR}}/generation/run.sh build {{.CLI_ARGS}}

generation:test:
desc: Run fixture-only generation runtime tests
cmds:
- python3 {{.SCRIPTS_DIR}}/generation/runtime.py test {{.CLI_ARGS}}
- bash {{.SCRIPTS_DIR}}/generation/run.sh test {{.CLI_ARGS}}

generation:bench:
desc: Measure an explicitly selected local prototype model
cmds:
- python3 {{.SCRIPTS_DIR}}/generation/runtime.py bench {{.CLI_ARGS}}
- bash {{.SCRIPTS_DIR}}/generation/run.sh bench {{.CLI_ARGS}}

decide:prepare:
desc: Fetch pinned Bialy dependencies or refresh its workspace lockfile
cmds:
- python3 {{.SCRIPTS_DIR}}/toolchain/decide_prepare.py {{.CLI_ARGS}}

decide:test:
desc: Decision engine (bialy) Rust tests
Expand Down
8 changes: 8 additions & 0 deletions docs/compatibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,8 @@ Responses remain additive-friendly: Den ignores unknown properties. Request obje

The Linux launch broker's descriptor-slot layout is co-shipped native `bundle` wire, not persisted state or agent vocabulary. Its optional layout preserves explicitly closed inherited slots across descriptor transport; an omitted layout keeps all supplied slots open. The engine relay and broker move together, with validation and actual-child descriptor invariants covering both sides. No store migration or OpenAPI consumer changes are involved.

The packaged `generation/vulkan-drivers.json` resource is co-shipped internal `bundle` data. Format 1 declares the closure's Mesa ICD paths. The inference host validates the exact shape and prepares process-local NVIDIA driver selection when needed. Its temporary ICD files are ephemeral and remain alive until their reader process exits; they contain no device settings or model state.

Health reports product, store, and schema revisions as distinct facts. Product SemVer does not stand in for the database schema version, and the Den cache revision does not stand in for either.

## User-repository overlays
Expand Down Expand Up @@ -355,6 +357,12 @@ Free-form display copy is not agent-public vocabulary. The structured id behind

Provider credentials, device model policy, extension desired state, exact grants, and application state are not contained in `store.db`. Deleting the database must not silently erase or reinterpret them.

Local model activation history and device selection are device configuration; the authenticated payload bytes are reacquirable content. Model-store journal format 1 authenticates each revision with host-trusted Ed25519 keys. A revision identity cannot be rebound to different contents, and collection or repair cannot remove a revision while a runtime holds its lease. Database deletion does not reset model activation or trust.

A local model bundle contains `manifest.json` and explicitly named payload files. The manifest is bounded to 128 KiB and rejects unknown fields and trailing content. Its signature covers the `paintedwolf-model-manifest/1` domain and the canonical `SigningBytes` representation. The bundle supplies a key identifier, never a new trust authority. Import verifies that signature before opening payloads, then checks each declared size and SHA-256 before activation. Payload names are single safe path components; `manifest.json` is reserved. Activated revisions hard-link verified content inside the store, avoiding a second model copy. Importing a valid bundle establishes artifact integrity, not runtime compatibility or model quality. Published payloads are read-only. Routine lease and readiness checks inspect the revision seal, size, and modification time without scanning model contents. A lease audit hashes the actual pinned revision, detects same-size corruption even with unchanged timestamps, and supports cancellation. Repair replaces damaged inodes only after readers release their leases.

The model release-key registry is a co-versioned application resource, separate from downloaded model bundles and mutable device state. Format 1 contains `format: 1` and a `keys` array of `{id, public_key}` entries, where each public key is a base64-encoded Ed25519 key. The decoder bounds the registry to 16 KiB and 16 distinct keys and refuses unknown fields, formats and trailing content. Key rotation ships through the trusted application distribution.

The host identity key (`host-identity.pem`) is device configuration too. A store reset keeps it, and backups neither carry nor restore it: a backup restored on another machine becomes a new host with the same people. An unreadable key stops startup rather than silently minting a new identity. The people who author durable facts live in `store.db` and travel with it.

Native update preferences are device configuration too. The unversioned `{checks_enabled, channel, rollout_bucket}` record that 1.0.x clients wrote has one explicit migration to `updates/preferences.json` format 2: `checks_enabled` becomes `automatic_updates_enabled`, which governs discovery, background download, and lifecycle installation, so an existing opt-out remains off; channel and bucket are unchanged. Unknown versions and malformed records are refused without overwriting them. Per-installation operational records live under `updates/installations/<path-sha256>/`, keyed by the canonical application path, and the device-wide `updates/feed-state.json` records the newest signed pointer timestamp accepted per feed. Unknown ephemeral records (`ready.json`, `rejected.json`, `feed-state.json`) are quarantined unchanged and rebuilt; an unreadable preference file disables automatic updating for that run without being rewritten. Update archives are ephemeral, but an unresolved activation journal is recovery-critical operational state and cannot be cleared as a cache. An `update-state.json` journal written by a 1.0.x client is reconciled against the running product version: it completes only when its target or a newer version runs, and it never manufactures staged bytes or missing artifacts.
Expand Down
8 changes: 8 additions & 0 deletions docs/dev-tasks.md
Original file line number Diff line number Diff line change
Expand Up @@ -687,6 +687,7 @@ Gate composition lives in `scripts/verification-plan.json`.
| `db:wipe` | Clears the store and every store-keyed host tree; preserves Den app preferences, device configuration, credentials, debug captures, and upgrade recovery archives. Refuses while any process holds the store open — stop the engine first |
| `budgets` / `coverage:changes` / `den:coverage:changes` / `scripts:coverage:changes` | Hold what a change touches to its limits and test the statements it adds; warnings arrive before the limit, and `PW_BUDGETS_INSPECT="<path>"` shows a file or directory's standing before editing it. `scripts:coverage:changes` shares the `runner` resource with `test:runner` and installs the pinned coverage.py once per interpreter under the [bin directory](#build-outputs-caches-and-locks); `./task setup-dev -- --ci-inputs` provisions it before an offline CI lane. See [Size budgets and changed coverage](test-strategy.md#size-budgets-and-changed-coverage) |
| `check:coverage` / `check:coverage:packages` | `check:coverage` produces aggregate and package reports from one test run. Floors come from `scripts/coverage-policy.json`: `COVERAGE_MIN` overrides the aggregate floor; the per-package report is advisory until `COVERAGE_PKG_ENFORCE=1`, with `COVERAGE_PKG_MIN` overriding its floor and exemptions in `lycaon/coverage-exempt.txt`. Floors must be finite percentages from 0 through 100; fractional floors are compared without truncation. Go and Den coverage runs use the digest runners and retain failure diagnostics |
| `decide:prepare` | Fetch Bialy dependencies with the existing lockfile. Pass `-- --refresh-lock` to resolve changed workspace features while retaining pinned dependency versions, then fetch the resulting locked graph. Review and commit the lockfile before building. |
| `build:decide` / `decide:test` | Build and test `bialy` with the host's features (`scripts/decide-features.sh`: `mlx` on Apple silicon, `vulkan` on Linux). On Linux, `decide:test` runs the Vulkan parity tests on the first GPU, or on Mesa's lavapipe (`mesa-vulkan-drivers`) without one. The first MLX build compiles the framework from source: several minutes, a network fetch, and Xcode's Metal toolchain (`xcodebuild -downloadComponent MetalToolchain` when the build cannot execute `metal`). Development builds stage heads installed under `$(python3 scripts/artifact_paths.py bin .)/decide-heads/`; the dev sidecar provisions the checkpoint at its first boot |
| `build:document-core` | Builds `pw-document-core` for this host into the shared, content-addressed cache and prints its path. Go and Vitest digests, fuzz, and benchmark runs call it themselves and export `LYCAON_DOCUMENT_CORE_BINARY`, so editor tests always run the core built from the source they test; `build:lycaon-dev` stages a copy beside `lycaon-dev` |
| `den:stage-engine` | Stages the sidecar and engine-root a desktop Playwright run expects. `e2e:den:desktop` does **not** stage for you — the release workflow runs `den:stage-engine` immediately before it, and a local reproduction without it fails on a missing engine |
Expand All @@ -696,6 +697,13 @@ Gate composition lives in `scripts/verification-plan.json`.
| `upgrade:corpus:prepare` / `upgrade:corpus:boot` | `prepare` writes an immutable fixture under `lycaon/testdata/upgrade-corpus/<VERSION>/` that you **review and commit with the candidate**; the release workflow uploads that reviewed tree rather than minting evidence after the tag. `boot` proves the committed fixtures locally |
| `openapi:diff` | Report wire differences against the committed baseline, or `-- --baseline-ref <commit>` for a pinned stable release. Release CI retains the report automatically; permitted bundle differences succeed and tool failures block release |

The `budgets` artifact directory also contains `reports/native-requests/*.json`.
These complete static request fixtures use the existing rendered coordinator
cases, coordinator injection blocks and all tools available on each surface.
They contain no captured conversation history and are not a normal turn's
selected tool set. Use them for explicitly authorized native-runner prompt
measurements; record native token counts separately from budget estimates.

### Protected Linux desktop component

`./task test:confine:linux -- launch` tests the real launcher with its reporting
Expand Down
88 changes: 87 additions & 1 deletion docs/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10045,6 +10045,38 @@ paths:
$ref: '#/components/responses/TooManyRequests'
default:
$ref: '#/components/responses/Error'
/v1/providers/{provider_id}/repair:
post:
tags:
- providers
operationId: repairLocalGeneration
x-person-action: record
summary: Repair the bundled local generation model
description: Releases the generation reader, restores the authenticated packaged revision, and attempts admission. Failed attempts return their current recovery state.
parameters:
- name: provider_id
in: path
required: true
schema:
type: string
pattern: ^[a-zA-Z0-9_.-]+$
responses:
'200':
description: Repair attempt completed
content:
application/json:
schema:
$ref: '#/components/schemas/LocalGenerationRepairResult'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
default:
$ref: '#/components/responses/Error'
/v1/providers/{provider_id}/refresh:
post:
tags:
Expand Down Expand Up @@ -23324,7 +23356,7 @@ components:
configured:
type: boolean
description: |
True when the provider can make API calls. Keyed AI providers require a non-empty credential saved via PUT /v1/providers/{provider_id}/credential (environment variables do not configure). Local keyless providers are ready without credentials; ambient providers must resolve their declared credential chain. List membership is providers.local.yaml — Den does not keep a parallel hide allowlist.
True when the provider can make API calls. Keyed AI providers require a non-empty credential saved via PUT /v1/providers/{provider_id}/credential (environment variables do not configure). Keyless providers need no credentials; bundled local generation also requires host admission. Ambient providers must resolve their declared credential chain. List membership is providers.local.yaml — Den does not keep a parallel hide allowlist.
credential_present:
type: boolean
description: True when credentials are saved for this provider instance.
Expand Down Expand Up @@ -23391,6 +23423,9 @@ components:
- stale
- unavailable
description: models.dev document freshness for catalog merge.
local_runtime:
x-go-pointer: true
$ref: '#/components/schemas/LocalGenerationStatus'
discovery_status:
type: string
enum:
Expand Down Expand Up @@ -37179,6 +37214,44 @@ components:
type: integer
format: int64
description: Estimated USD overage in nano-USD for usage above the included daily allowance when applicable.
LocalGenerationStatus:
x-go-generate: true
type: object
required:
- state
- recovery_action
additionalProperties: false
properties:
state:
type: string
enum:
- idle
- loading
- ready
- repairing
- unavailable
- repair_required
- insufficient_memory
- stopped
description: Current host runtime state, independent of cached model discovery.
recovery_action:
type: string
enum:
- none
- retry
- repair
- reinstall
description: Available recovery action selected from host facts.
detail:
type: string
description: Diagnostic detail; recovery_action supplies the available action.
revision:
type: string
description: Authenticated revision held by the admitted model process.
context_tokens:
type: integer
minimum: 0
description: Admitted context capacity of the ready process.
ProviderListResponse:
x-go-generate: true
type: object
Expand Down Expand Up @@ -37265,6 +37338,19 @@ components:
type: array
items:
$ref: '#/components/schemas/ProviderKindTemplate'
LocalGenerationRepairResult:
x-go-generate: true
type: object
required:
- ok
- status
additionalProperties: false
properties:
ok:
x-go-name: OK
type: boolean
status:
$ref: '#/components/schemas/LocalGenerationStatus'
WebResearchProviderRole:
type: string
enum:
Expand Down
37 changes: 37 additions & 0 deletions docs/openapi/components/schemas/settings/local-runtime.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
components:
schemas:
LocalGenerationStatus:
x-go-generate: true
type: object
required: [state, recovery_action]
additionalProperties: false
properties:
state:
type: string
enum: [idle, loading, ready, repairing, unavailable, repair_required, insufficient_memory, stopped]
description: Current host runtime state, independent of cached model discovery.
recovery_action:
type: string
enum: [none, retry, repair, reinstall]
description: Available recovery action selected from host facts.
detail:
type: string
description: Diagnostic detail; recovery_action supplies the available action.
revision:
type: string
description: Authenticated revision held by the admitted model process.
context_tokens:
type: integer
minimum: 0
description: Admitted context capacity of the ready process.
LocalGenerationRepairResult:
x-go-generate: true
type: object
required: [ok, status]
additionalProperties: false
properties:
ok:
x-go-name: OK
type: boolean
status:
$ref: '#/components/schemas/LocalGenerationStatus'
7 changes: 5 additions & 2 deletions docs/openapi/components/schemas/settings/providers.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ components:
description: >
True when the provider can make API calls. Keyed AI providers require a
non-empty credential saved via PUT /v1/providers/{provider_id}/credential
(environment variables do not configure). Local keyless providers are
ready without credentials; ambient providers must resolve their declared
(environment variables do not configure). Keyless providers need no credentials; bundled local generation also
requires host admission. Ambient providers must resolve their declared
credential chain. List membership is providers.local.yaml —
Den does not keep a parallel hide allowlist.
credential_present:
Expand Down Expand Up @@ -120,6 +120,9 @@ components:
- stale
- unavailable
description: models.dev document freshness for catalog merge.
local_runtime:
x-go-pointer: true
$ref: local-runtime.yaml#/components/schemas/LocalGenerationStatus
discovery_status:
type: string
enum:
Expand Down
Loading