Skip to content

onnx.7: sync dev post-beta.4 (tool pipeline refactor, webhook HMAC), prepare 0.25.0-alpha.onnx.7 - #1662

Merged
Aaronontheweb merged 41 commits into
netclaw-dev:feature/memory-embeddingsfrom
Aaronontheweb:release/0.25.0-alpha.onnx.7
Jul 16, 2026
Merged

onnx.7: sync dev post-beta.4 (tool pipeline refactor, webhook HMAC), prepare 0.25.0-alpha.onnx.7#1662
Aaronontheweb merged 41 commits into
netclaw-dev:feature/memory-embeddingsfrom
Aaronontheweb:release/0.25.0-alpha.onnx.7

Conversation

@Aaronontheweb

Copy link
Copy Markdown
Collaborator

Merges upstream/dev (post-0.25.0-beta.4) into feature/memory-embeddings, resolving 33 conflicts (stale merge-base artifacts from the onnx.6 squash-merge). Bumps version to 0.25.0-alpha.onnx.7. No memory/embeddings behavior changes vs onnx.6.

Conflict resolution:

  • A (took dev, 26 files): feature branch had no unique changes vs beta.4 for these files — pure squash artifacts.
  • B (took feature, 2 files): MemoryCurationEvaluator.cs + parity tests — dev unchanged since beta.4.
  • C (three-way merge, 2 files): LlmSessionActor.cs, Program.cs — merged dev's tool-execution refactor with feature's memory recall/curation wiring.
  • D (release files, 3): Directory.Build.props (VersionSuffix), RELEASE_NOTES.md (combined sections + new onnx.7 entry), netclaw-operations/SKILL.md (combined content edits, version bumped to 2.32.0).

Also fixed a preexisting Directory.Packages.props package-downgrade break inherited from dev: Microsoft.Extensions.AI was bumped to 10.8.0 (dev #1650) without bumping the transitively-required System.Numerics.Tensors floor; re-pinned to 10.0.10.

Gates:

  • dotnet build: 0 warnings, 0 errors
  • dotnet test: 6246 passed, 0 failed, 14 skipped (environment-gated integration tests) across 9 test projects
  • dotnet slopwatch analyze: 0 issues
  • Add-FileHeaders.ps1 -Verify: all files have headers

Post-merge security check: fail-closed sub-agent approval bridging (#1616) verified intact — dev refactored the old nullable ApprovalBridge pattern into a discriminated-union InteractiveApprovalCapability.Available/.Unavailable type; construction is still gated on SupportsInteractiveApproval && HasApprovalRequester.

Aaronontheweb and others added 30 commits July 11, 2026 14:32
)

Updated ModelContextProtocol package versions to use a variable for versioning.

Signed-off-by: Aaron Stannard <aaron@petabridge.com>
Co-authored-by: Aaron Stannard <aaron@petabridge.com>
---
updated-dependencies:
- dependency-name: MessagePack
  dependency-version: 3.1.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…tclaw-dev#1127) (netclaw-dev#1610)

* fix(cli): model set/picker preserve hand-set modalities on re-set (netclaw-dev#1127)

Re-selecting a model that is already configured wiped operator-set attributes on it.
The write path rebuilt the Models[role] entry from scratch via ModelEntryWriter, which
only writes modalities it was handed (a probe result). Modalities have no CLI input and
can only be hand-edited, so a manual 'model set' (or a context-window tweak, or the TUI
picker re-selecting the same model) passed null and silently deleted a hand-set
InputModalities/OutputModalities — the concrete netclaw-dev#1127 loss.

Add ModelEntryWriter.WriteRole, a non-destructive persist: when the role already points
at the same (provider, modelId), preserve the existing modalities and context window the
caller did not supply; switching to a different model still starts clean (old attributes
belonged to the old model). Routed 'model set' and the TUI model manager through it.

Verified against the shipped binary: on stock beta 0.25.0, 'model set main <same-model>
--context-window N' wipes InputModalities; with this fix the same command preserves it.

No config-shape or schema change, so this is fully backwards compatible.

Tests: WriteRole_SameModelWithoutModalities_PreservesHandSetModalities,
WriteRole_DifferentModel_DropsPreviousModelModalities.

* fix(cli): make model-set metadata operator-owned; discovery never clobbers it

Hardens the non-destructive `model set`/picker rewrite (netclaw-dev#1127) against every issue
surfaced reviewing netclaw-dev#1610, and closes the loop on modality overrides.

ContextWindow and modalities are documented to "take precedence over provider-reported
capability detection", so they are now treated as operator-owned overrides with a single
precedence rule: explicit operator input > existing stored value > probe. A fresh probe
seeds a first-time set or a model switch but never overwrites a value already on disk.

Changes:

1. ContextWindow clamp preserved on same-model re-set. WriteRole takes the explicit
   --context-window and the probe default separately; the old callers collapsed them
   (`contextWindow ?? discovered`), so probe/picker paths always passed a non-null value
   and the operator's clamp was overwritten on every re-selection.

2. Modalities are no longer silently overwritten by discovery. Previously a probe that
   reported modalities replaced a stored override (the netclaw-dev#1127 loss's twin); now the stored
   value wins, matching the field's "manual override bypasses detection" contract.

3. Operators can change/remove those overrides. Since discovery no longer edits them, add
   `--input-modalities`, `--output-modalities`, and `--clear-modalities` to `model set`.
   Explicit set replaces the stored value; clear removes it (runtime detection resolves).
   Supplying any of them (like --context-window) skips the probe as manual configuration.

4. Corrupt/legacy existing entry no longer aborts the command. ReadSameModelEntry guards
   the deserialize (catch JsonException): an unreadable entry (e.g. an unrecognized modality
   enum string) degrades to "nothing to preserve" and the command overwrites/repairs it.

5. No false-match on ModelReference defaults. Provider/ModelId default to the stock
   local-ollama model, so an entry omitting either key deserialized to that default and
   would false-match a re-set of the stock model; preservation now requires both keys.

6. Provenance not downgraded. A same-model re-set that did not re-resolve the ID (no probe
   → Manual) keeps a previously discovered origin (Live/Defaults); only a fresh discovery
   updates it.

Tests: ModelEntryWriter unit coverage for each precedence path (clamp-over-probe, probe-
does-not-override-existing-modalities, explicit set, clear-over-probe, first-time seeding,
default-model false-match, corrupt-entry overwrite, provenance preserve/update) plus CLI
end-to-end coverage for the new flags. Full CLI suite green; slopwatch clean; model-manager
smoke tape passes.

* fix(cli): harden model-set overrides + add --clear-context-window (netclaw-dev#1610)

Addresses code-review findings on the non-destructive model-set change:

- probe gate: only --context-window short-circuits the probe; a modality flag
  no longer skips model-existence validation and context-window discovery
- preservation read: a corrupt modality enum string no longer discards a valid
  operator-owned ContextWindow (field-tolerant recovery)
- arg parsing: missing flag values and unknown args fail loudly instead of
  being silently dropped
- cleared modality is now sticky: discovery is hands-off once a same-model
  entry exists, so a later probe cannot resurrect a --clear-modalities removal
- TryParseModalities rejects raw numeric strings (named flags only)
- provenance: preserve a prior discovered origin on any non-Live re-set
  (was only guarding Manual)
- new --clear-context-window flag to force window re-detection (symmetry with
  --clear-modalities)

Also hardens LoadModelSelection: a corrupt/legacy config no longer crashes
`model set` (repairs it) or `model list` (reports it cleanly) or the TUI.

Generalizes ModalityOverride into a shared ValueOverride<T> tri-state.
Updates netclaw-operations skill (providers.md). Docs website tracked in
netclaw-dev/netclaw-website#83.

* feat(config): preserve model definitions across role switches

* fix(config): validate named model role references

* fix(cli): preserve models when editing providers
)

Bumps [dotnet-sdk](https://github.com/dotnet/sdk) from 10.0.300 to 10.0.301.
- [Release notes](https://github.com/dotnet/sdk/releases)
- [Commits](dotnet/sdk@v10.0.300...v10.0.301)

---
updated-dependencies:
- dependency-name: dotnet-sdk
  dependency-version: 10.0.301
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
netclaw-dev#1622)

* Add deployment agent mission playbook

* Keep identity routing in embedded guidance

* Evaluate embedded identity routing

* Prioritize specialized subagent guidance
…-dev#1634)

* feat(skills): use logical skill access

* docs(evals): restore README

* test(skills): use root-preserving path joins
…ev#1630)

* feat: preserve git context across subagents

* fix: make subagent git context deterministic

* test: make fixture path intent explicit
…etclaw-dev#1637)

When a curation Create decision landed on an anchor that already had a
document, both batch appliers reused the existing document_id, and the
ON CONFLICT DO UPDATE overwrote that document's title, body, and
classification with the new proposal. The old content was lost; there
is no history table to recover it from.

Now a Create collision appends the new content below a dated separator
and keeps the existing title, boundary, audience, and sensitivity. If
the incoming content is already present verbatim, the write is skipped.
Consolidate decisions carry an explicit target document id, so they
keep replacing near-duplicates as designed. Update decisions and
no-collision inserts are unchanged.
…w-dev#1641)

* refactor(tools): checkpoint execution context cleanup

* test(tools): restore explicit execution fixtures

* docs: prohibit global namespace qualifiers

* test(tools): prove execution scope isolation

* docs(tools): record invocation identity design

* test(tools): centralize execution context fixtures

* test(tools): migrate scoped execution fixtures

* test(tools): remove legacy execution context construction

* docs(tools): document isolated invocation scope

* test(tools): migrate daemon execution fixtures

* refactor(tools): tighten invocation context boundaries

* refactor(tools): separate pipeline and invocation state

* refactor(tools): address context review findings

* refactor(tools): remove stale audience fallbacks
---
updated-dependencies:
- dependency-name: Mattermost.NET
  dependency-version: 5.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* docs(tools): record stage one delivery

* refactor(tools): compose session execution pipeline

* fix(tools): remove unused batch timeout local

* fix(tools): require explicit audit logger registration
)

* docs: record session pipeline delivery

* refactor: fork typed subagent execution context

* refactor: type child completion boundaries

* fix: preserve turn state across context inspection

* fix: handle git termination race

* fix: close async context lifecycle races

* fix: make nullable reason formatting explicit
…etclaw-dev#1645)

Add TSV alongside CSV as a supported text MIME type. TSV files are
plain tab-delimited text with no magic bytes, so they use the same
AnyContent matcher as CSV. Updates the MIME catalog, validator, and
extension-to-MIME normalization override.
* refactor(tools): remove disabled audit sink

* fix(tools): close context lifecycle gaps

* docs(tools): record closeout evidence

* docs(openspec): complete compatibility audit

* docs(openspec): record adversarial closeout

* fix(subagents): preserve fatal spawn failures

* fix(subagents): complete fatal failure lifecycles
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](actions/upload-artifact@v4...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Aaronontheweb and others added 11 commits July 15, 2026 17:30
---
updated-dependencies:
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.8.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Aaron Stannard <aaron@petabridge.com>
…law-dev#1657)

---
updated-dependencies:
- dependency-name: Microsoft.AspNetCore.DataProtection
  dependency-version: 10.0.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: microsoft-platform
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Aaron Stannard <aaron@petabridge.com>
---
updated-dependencies:
- dependency-name: Microsoft.Extensions.AI
  dependency-version: 10.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: microsoft-extensions-ai
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Aaron Stannard <aaron@petabridge.com>
)

Bumps [dotnet-sdk](https://github.com/dotnet/sdk) from 10.0.301 to 10.0.302.
- [Release notes](https://github.com/dotnet/sdk/releases)
- [Commits](dotnet/sdk@v10.0.301...v10.0.302)

---
updated-dependencies:
- dependency-name: dotnet-sdk
  dependency-version: 10.0.302
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Aaron Stannard <aaron@petabridge.com>
* feat(webhooks): add timestamped HMAC verification

* fix(webhooks): preserve verified route configuration

* fix(webhooks): harden concurrent route updates

* fix(daemon): make restart drain tests deterministic

* fix: address webhook and restart review findings

* fix: close final concurrency review gaps

* fix(webhooks): canonicalize nested route path aliases

* test(webhooks): accept platform-specific write errors

* docs(openspec): complete webhook verification checklist

* fix(webhooks): honor configured HMAC algorithm
…xtensions.AI 10.8.0 floor

Dependabot bumped Microsoft.Extensions.AI 10.6.0 -> 10.8.0 (upstream netclaw-dev#1650) without
updating the transitively-required System.Numerics.Tensors floor (now >= 10.0.10),
leaving upstream/dev's own build broken via NU1109 package downgrade. Re-pins to
10.0.10, matching $(MicrosoftAspNetCoreVersion) per the existing comment policy.
@Aaronontheweb
Aaronontheweb merged commit 5c7278f into netclaw-dev:feature/memory-embeddings Jul 16, 2026
15 checks passed
@Aaronontheweb
Aaronontheweb deleted the release/0.25.0-alpha.onnx.7 branch July 16, 2026 11:43
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