Skip to content

chore(deps): accept the published first-party cohort - #33

Merged
drewstone merged 1 commit into
mainfrom
chore/deps-align
Aug 21, 2026
Merged

chore(deps): accept the published first-party cohort#33
drewstone merged 1 commit into
mainfrom
chore/deps-align

Conversation

@drewstone

@drewstone drewstone commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Why

Braid pinned the whole first-party cohort at the versions current when #31 landed. Every one of them has published since:

package was now
@tangle-network/agent-eval 0.149.0 0.163.2
@tangle-network/agent-interface 1.3.0 1.4.0
@tangle-network/agent-runtime 0.143.0 0.153.2
@tangle-network/agent-provider-cli-bridge 0.9.4 0.9.5
@tangle-network/agent-provider-tangle 0.13.0 0.13.1
@tangle-network/sandbox 0.31.0 0.31.0 (already current)

Braid could not be moved on its own. .npmrc sets strict-peer-dependencies=true, and pinning Eval forward while Runtime and Knowledge still declared >=0.149.0 <0.150.0 produced:

✕ unmet peer @tangle-network/agent-eval
  Installed: 0.163.2
  Wanted: ">=0.149.0 <0.150.0"  @tangle-network/agent-runtime@0.153.1, @tangle-network/agent-knowledge@8.0.10

So this is the last step of a four-repo sequence: Eval published the fix cohort, Knowledge 10.6.1 widened its Eval peer, Runtime 0.153.2 widened its Eval peer and moved Knowledge two majors, and only then can Braid pin all six at once with the peer graph satisfied.

What

Six exact pins moved to what the registry served when this branch was cut (2026-08-21), and version 0.2.00.2.1.

Pinned to published, not to main. Simplification work is landing continuously in Eval and Runtime, so their main versions run ahead of npm. This PR takes the versions npm actually serves; a later pass can move it again cheaply. Chasing a moving main is how a dependency PR never converges.

pnpm-workspace.yaml: minimumReleaseAgeExclude gains the new versions. Braid sets a minimumReleaseAge cooldown, so without those entries a package published minutes ago cannot be installed at all.

0.2.1 rather than reusing 0.2.0 because 0.2.0 is already on the registry, and scripts/release/check-registry-collision.mjs refuses to publish a version the registry holds.

The real fallout: Runtime now refuses metadata.maxTokens

Runtime 0.153.2 carries the model-ceiling work. profileModelExecutionSettings rejects the old field outright:

Braid semantic release judge: AgentProfile.model.metadata.maxTokens is ambiguous
across providers; declare AgentProfile.model.maxVisibleOutputTokens,
maxReasoningTokens, or maxTotalOutputTokens instead

That reddened 5 tests across test/eval.test.ts and test/trace-analysis-configuration.test.ts.

src/eval/execution.ts built the judge profile with metadata.maxTokens, and separately hand-wrote the wire field in extraBody:

metadata: {
  maxTokens: EVAL_TOTAL_COMPLETION_TOKENS,
  extraBody: {
    // Router treats this field as the hard ceiling over visible and reasoning tokens.
    max_completion_tokens: EVAL_TOTAL_COMPLETION_TOKENS,

The old wire body carried both max_tokens: 2048 (visible, from a request-level cap) and max_completion_tokens: 2048 (total, from extraBody). Runtime now owns that lowering — "Router and OpenAI-compatible routes send the visible ceiling as max_tokens and the total as max_completion_tokens" — so the profile declares the two ceilings and stops naming the wire field:

maxVisibleOutputTokens: EVAL_TOTAL_COMPLETION_TOKENS,
maxTotalOutputTokens: EVAL_TOTAL_COMPLETION_TOKENS,

The wire body is unchanged. test/eval.test.ts still asserts the same max_tokens and max_completion_tokens on the outgoing request, and that assertion passes untouched — which is what proves this is a migration and not a behaviour change.

Two test assertions moved with it: the pinned profile shape, and the refusal message for a smaller request cap, which Runtime now states as request maxTokens 320 conflicts with AgentProfile.model.maxVisibleOutputTokens 2048. That refusal test keeps its place — it is a fail-closed gate that stops a mis-capped judge before any provider spend.

The declared ceilings now actually reach the provider

test/trace-analysis-configuration.test.ts asserted receivedBody.max_tokens === undefined for a profile that declares maxVisibleOutputTokens: 64 and maxTotalOutputTokens: 384. That assertion was pinning the old behaviour, where a declared ceiling was accepted and then silently never sent. Runtime 0.153.2 lowers both onto the Router route, so the wire now carries max_tokens: 64 and max_completion_tokens: 384, and the test asserts that instead. This is the ceiling arriving where it was always meant to go, not a new limit.

Knowledge 8 → 10 does not reach Braid

Braid does not depend on @tangle-network/agent-knowledge directly; it arrives transitively through Runtime, which pins ^10.7.0. Braid touches no retrieval receipt, so the replaced receipt shape crosses without a source change here.

Proof

Node 24.11.1, macOS, TMPDIR set to a short non-symlinked path.

gate result
pnpm run format:check (biome) exit 0 — 770 files
pnpm run lint (biome) exit 0 — 770 files
pnpm run typecheck exit 0
pnpm run boundaries exit 0 — modules=495, edges=2538, cyclicSccs=0
pnpm run dependencies:check exit 0 — 94 production packages, no high or critical audit finding
pnpm run attribution exit 0
pnpm run build exit 0
pnpm run check:release exit 0 — 26 stable scripts, 12 required source artifacts
pnpm run test -- --scope unit exit 0
pnpm test (all scopes) 1 failing test, the pre-existing macOS one below
pnpm run licenses:check fails on macOS, on clean main too — see below

The install resolves the whole cohort with zero unmet peers, which is the point of the four-repo sequence:

agent-eval 0.163.2   agent-runtime 0.153.2   agent-interface 1.4.0
agent-provider-cli-bridge 0.9.5   agent-provider-tangle 0.13.1   sandbox 0.31.0

Before Knowledge and Runtime widened their Eval peers, that same install reported:

✕ unmet peer @tangle-network/agent-eval
  Installed: 0.163.2
  Wanted: ">=0.149.0 <0.150.0"  @tangle-network/agent-runtime, @tangle-network/agent-knowledge

licenses:check is platform noise, and that was verified rather than assumed

THIRD_PARTY_LICENSES.json is generated from pnpm licenses list --prod, which reports the host's optional binaries. Regenerating on macOS produces a 63-entry file that differs from the committed 63-entry file in exactly three rows:

only in committed (Linux):   @dataiku/uv-linux-x64, @koromix/koffi-linux-x64, @napi-rs/keyring-linux-x64-gnu
only in regenerated (macOS): @dataiku/uv-darwin-arm64, @koromix/koffi-darwin-arm64, @napi-rs/keyring-darwin-arm64

No first-party entry differs — the inventory records no version for @tangle-network/*, so these pin changes cannot move it. The same check fails identically on an unmodified main worktree on this machine, which is how it was established as pre-existing rather than assumed. The committed Linux inventory is therefore left exactly as it is; regenerating it here would swap three rows and turn the Linux CI check red, which is the opposite of the intent.

Baseline

Clean main (74d9fe1) on this machine, same TMPDIR: 780 passed / 1 failed / 2 skipped (783). The single failure is production default state isolates workspaces and config identities across restart, which asserts a relative sqlite path and gets the macOS ~/Library/Application Support/braid/... location. It is pre-existing and platform-specific; CI on Linux is the authority.

Simplification

Simplification: none — six version strings and the version bump. No path added, none removed.
Net: +7 / -7 lines in package.json, plus the lockfile.
Tests: +0, -0. A pin advance earns no test; the typecheck and the lockfile prove resolution, and the existing suite proves behavior.
Not done here: nothing deferred.

@tangletools tangletools left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Auto-approved drewstone PR — 19049835

This PR was opened by the trusted drewstone account.

This approval is provisional and was applied by the local stand-in because the pr-reviewer webhook host is unreachable (2026-08-21). CI on this head is fully green. The full PR reviewer audit re-runs via the resweep when the service returns and will publish findings if it detects issues.

@drewstone
drewstone merged commit ba4160a into main Aug 21, 2026
4 checks passed
@drewstone
drewstone deleted the chore/deps-align branch August 21, 2026 11:37
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.

2 participants