Skip to content

feat(kernel): bind connected reads to captured provider source - #295

Merged
helmut-hoffer-von-ankershoffen merged 8 commits into
mainfrom
feat/source-bound-connected-providers
Oct 30, 2026
Merged

helmut-hoffer-von-ankershoffen merged 8 commits into
mainfrom
feat/source-bound-connected-providers

Conversation

@helmut-hoffer-von-ankershoffen

Copy link
Copy Markdown
Owner

Connected-read approval must describe the provider code actually loaded, including when an installed plugin is updated or timestamp bytecode remains stale. Default boot now captures matching installed provider packages before initialization and checks the selected service, source and sealed host runtime before and after connected calls.

Declared providers use bounded pure-Python source and captured resources; unsupported or undeclared providers retain ordinary capabilities but cannot use this guarded read path. The public capture-context predicate lets compatible plugins keep that path inactive on older cores. Human account and operation approval remains separate. This establishes local continuity for owner-selected code, not publisher verification or a Python sandbox.

ADR 0106 describes the source boundary. The source boundary received independent security and architecture review, including review of the resource and capture-context changes. On the merged current-main port, 1,401 focused source, API, connected-read, schedule, documentation and standards tests passed. A prior port also passed full preflight; required current-head preflight and CI provide the integration check. No live Google access or complete workflow claim.

Capture declared installed provider source before initialization, use a sealed host runtime for ordinary imports, and check continuity before and after connected reads. Access approval and publisher trust remain separate; this is not a Python sandbox.
…nected-providers

# Conflicts:
#	docs/adr/README.md
@helmut-hoffer-von-ankershoffen
helmut-hoffer-von-ankershoffen marked this pull request as ready for review October 30, 2026 09:03
@github-actions

Copy link
Copy Markdown
Contributor

Coverage report

Click to see where and how coverage changed

FileStatementsMissingCoverageCoverage
(new stmts)
Lines missing
  src/heinzel/kernel
  __init__.py
  _boot.py
  _captured_source.py 33-34
  _discovery.py 59-61
  _kernel.py
  _source_loading.py 52-53, 63-64, 89-90, 96-97, 105-106, 108-109, 179-180, 184-185, 188-189, 201-202, 208-209, 212-213, 242-243, 250-251, 276, 278-279, 287-288, 293-294, 297-300, 342-343, 347-348, 352-353, 379, 386-387, 390-391, 419-420, 439, 451-452, 495-496, 511-512, 521-522, 540-541, 545-546, 556-558, 595-596, 619-620, 622-623, 627-628, 630-631, 651-652, 718-719, 740-741, 806-809, 831-832, 868-869
  src/heinzel/modules/heinzel
  _connected_grants.py
Project Total  

This report was generated by python-coverage-comment-action

@helmut-hoffer-von-ankershoffen
helmut-hoffer-von-ankershoffen merged commit 8a6eb56 into main Oct 30, 2026
45 checks passed
@helmut-hoffer-von-ankershoffen
helmut-hoffer-von-ankershoffen deleted the feat/source-bound-connected-providers branch October 30, 2026 09:13
@github-actions github-actions Bot mentioned this pull request Oct 30, 2026
helmut-hoffer-von-ankershoffen added a commit that referenced this pull request Oct 31, 2026
The versionless launcher now installs and opens the verified standard
app. Updates and plugin changes preserve supported installation
constraints and daemon choices, report progress, and reload the UI.

### ✨ Features

- **kernel:** Bind connected providers to captured source
([#295](#295))
([8a6eb56](8a6eb56))
- **heinzel:** Review multiple chat sources before connected reads
([#299](#299))
([dd3c76b](dd3c76b))
- **kernel:** Record verified installation continuity
([#300](#300))
([61eae39](61eae39))
- **heinzel:** Review pause and resume in durable chat
([#269](#269))
([0c3c6b1](0c3c6b1))
- **heinzel:** Propose playbook drafts in durable chat
([#303](#303))
([9c4c3b6](9c4c3b6))
- **heads:** Launch and maintain verified standard apps
([#304](#304))
([5d4a5e3](5d4a5e3))

### 🐛 Bug fixes

- **web:** Align status details and preserve button contrast
([#292](#292))
([1f79b99](1f79b99))
- **kernel:** Keep tool changes within the running installation
([#297](#297))
([57f4c62](57f4c62))

### 🧪 Testing

- **web:** Wait for chat readiness after schedule reloads
([#298](#298))
([25e1730](25e1730))
- Make schedule and signal fixtures deterministic
([#301](#301))
([6f9985a](6f9985a))
- **heads:** Verify native shutdown and owned harness cleanup
([#302](#302))
([0b24918](0b24918))

### Release validation

Fresh standard apps select uv-managed Python; refreshes retain the
verified existing interpreter and supported installation choices.
Explicit system-only environment policies are refused before
installation state begins. With `UV_PYTHON_DOWNLOADS=never` or `manual`,
a new preflight rejects definite absence of a matching managed-Python
version before creating the pending marker. It checks hash-verified
wheel `Requires-Python` bounds and a bounded, non-executing directory
inventory. Directory names are only necessary hints: ambiguous layouts,
architecture differences, configuration-only policy, transitive
resolution and later changes remain subject to uv and the existing
conservative recovery path.

Connected reads recheck the lease that produced the value and reobserve
the approved connection after cleanup. Observed account, source, grant
or caller changes discard the result before an input receipt or model
response exposes it. These checks do not establish atomic provider state
or defend against a malicious provider.

Test diagnostics preserve the real assertions and deadlines: Electron
records only fixed boolean observations after a failed click, E2E
reports identify failed cases before teardown, and the mobile harness
drains bounded server stderr and records its pre-cleanup exit status.
Known startup tokens are redacted; the failure path avoids pytest
rendering a token-bearing command. These diagnostics do not establish
the cause of the earlier hosted connection reset.

Normal full local preflight passed for the installer/mobile batch:
Python tests 236.0s, frontend tests 53.8s, template validation 317.6s,
build 8.6s, and all lint, types, generated documentation and
managed-backend checks. The focused installer/diagnostic suite passed 64
tests. The subsequent test-only change generates its synthetic redaction
marker at runtime; its five focused tests and normal commit hooks
passed. The exact mobile sweep passed locally in 154.72s with the
diagnostic changes; this did not reproduce the hosted reset.

The E2E ordering hint starts the long mobile sweep in the initial batch
only for the pinned xdist 3.8.0 three-worker load scheduler. It
preserves the selected tests, relative order of unhinted tests, worker
count and original shared 600-second deadline. Unknown scheduler
settings retain the original order; generated plugin metadata omits this
core-only hint. Controller-to-worker integration tests exercise both the
active and fallback cases.

Current head is `26884df1693056fffcffd2d37d0814fb6f8d2a4a`. Local Make
E2E passed in 272.8s with unchanged selection and limits; full preflight
and normal commit/push hooks passed. The previous head's canonical
matrix failed when the mobile sweep passed late and left only 13 seconds
for the next test. Local success does not prove hosted timing. Provider
review data is now detached and revalidated before source binding and
host review, including constructed model instances and mutable nested
values. Invalid values produce fixed errors without serializer warnings
exposing provider metadata. The public `ConnectedReadReview` validation
method retains the kernel API boundary, and the import rule now enforces
that boundary for connected-read internals. Six focused regressions
cover refusal, copy isolation, finite values, warning privacy and valid
provider round trips; evidence uses synthetic providers and does not
establish a real-account breach.

For this repair, full local `make check` passed (Python 194.1s, web
47.7s), followed by independent post-check source review with no
Critical or Required findings. Release preflight passed (Python 213.5s,
web 53.6s, template 302.1s, build 8.5s). Normal commit hooks passed.
Fresh exact-head CI and paid source review are required; the complete
canonical matrix remains required before merge. No earlier-head review
is treated as approval of this head. Hooks, interpreter ownership
checks, time limits and branch protections remain enforced.

GitHub/PyPI publication, compatible theme/default composition, published
install/update/plugin/uninstall verification and deployment are separate
gates. This release PR does not establish complete Electron or
durable-agent delivery.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Helmut Hoffer von Ankershoffen né Oertel <helmuthva@googlemail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant