Independent AI systems researchOperated by NeuralArc
All research

Latest decision guides

Search across titles, summaries, evidence status and tags, or narrow the library to one decision desk.

Showing 24 of 158 decision guides
Models24 min

GLM-5.3-Flash: Cheap, Open and Multimodal—Decide From the Artifact

A trial, API-default or self-host decision for Z.ai’s sparse-plus-linear 320B open-weights model

GLM-5.3-Flash is the first GLM-5-series model whose weights actually shipped: a registry-verified MIT release with native multimodality, 320B total and 18B vendor-stated active parameters. Separate the inspectable artifact from the vendor’s benchmark and serving claims before choosing API, Coding Plan or self-hosting.

Published Read analysis →
Agents19 min

A Zero MCP Task TTL Did Not Expire the AI Agent’s Result

SDK 1.30.0 reported zero milliseconds but its demonstration store scheduled no cleanup

Two clean SDK 1.30.0 runs kept ttl: 0 tasks visible after 79–80 ms, expired ttl: -10 tasks in 2.0–2.5 ms, and restarted an 80 ms retention clock when a synthetic agent result completed.

Published Read analysis →
Agents19 min

An MCP Server Can Set Your AI Agent’s Polling Pace

SDK 1.30.0 accepted a zero-millisecond hint and delayed abort behind a server-selected sleep

Two clean SDK 1.30.0 runs turned one synthetic 125 ms inference task into 86–88 tasks/get calls when the server returned pollInterval: 0. A 300 ms hint also kept the client stream pending about 262 ms after its agent budget aborted.

Published Read analysis →
Agents18 min

Stopping an MCP Client Did Not Stop the AI Agent’s Task

SDK 1.30.0 ended local polling and emitted request cancellations, but the synthetic durable job kept running until an explicit tasks/cancel

In two clean SDK 1.30.0 runs, an AbortSignal ended the local task stream without sending tasks/cancel. The synthetic embedding worker advanced for another 75 ms and still reported working; explicit cancellation transitioned it to cancelled and stopped the counter.

Published Read analysis →
Agents18 min

A Failed MCP Task Can Hide the Error an AI Agent Needs

SDK 1.30.0 returned a generic -32603 and skipped tasks/result; the same stored retry detail remained retrievable by a direct request

A clean MCP TypeScript SDK 1.30.0 fixture reached failed status, then automatic streaming stopped without fetching the stored result. A manual tasks/result call recovered isError content and retry-after detail that the agent path never saw.

Published Read analysis →
Agents18 min

MCP URL Elicitation Is Not a Safe-Link Filter for AI Agents

SDK 1.30.0 delivered nine syntactically valid URLs to the client handler—including javascript:, file:, data:, loopback HTTP, embedded credentials and Punycode

The official client enforced URL-mode capability negotiation and rejected malformed syntax, but did not choose which schemes or destinations an AI host may offer to a user. A clean transport fixture shows why consent must come after client-owned URL policy.

Published Read analysis →
Agents19 min

An MCP Task Timeout Is Not an AI Agent Deadline

Fourteen fast polls ran past a 120 ms task TTL and a 40 ms request timeout; only an explicit outer AbortSignal stopped the loop

In MCP TypeScript SDK 1.30.0, timeout bounded each tasks/get request—not the whole task. Prompt working responses kept automatic polling alive until an outer abort, which also emitted cancellation notifications for every completed poll request still attached to that signal.

Published Read analysis →
Agents18 min

A Lost MCP SSE Response Can Hold an AI Agent Until Its Timeout

SDK 1.30.0 noticed one broken response leg in milliseconds, but four requests settled only at their 300 ms or 900 ms protocol deadline

In an official MCP TypeScript SDK 1.30.0 probe, POST-scoped SSE error and clean-EOF responses both left ping pending until its configured timeout. Doubling the deadline tripled the wait. The JSON control resolved immediately; timeout—not response-leg loss—triggered cancellation.

Published Read analysis →
Agents18 min

An Optional MCP Task Schema Can Strand an Agent’s Completed Result

SDK 1.30.0 stored the task output, then rejected getTaskResult when its documented optional schema was omitted

In an official MCP TypeScript SDK 1.30.0 probe, a synthetic agent task completed and stored its output. getTaskResult(taskId) rejected with a Zod TypeError; passing CallToolResultSchema returned the same result. Contrary to the issue’s stronger failure description, the awaited promise was catchable in this run.

Published Read analysis →
Agents19 min

MCP v2 Can Return a Partial Tool List as Complete

A repeated opaque cursor stopped automatic discovery before page three—and the returned aggregate carried no warning

In a three-page @modelcontextprotocol/client 2.0.0 probe, repeating a valid empty-string cursor made listTools return alpha and beta, omit gamma, delete nextCursor and throw no error. Unique cursors completed; a nonconverging unique sequence failed loudly at listMaxPages.

Published Read analysis →
Agents20 min

MCP Pagination Can Evict Earlier Tool Validators

After two tool-list pages, the TypeScript v1 client validated page two—but accepted bad structured output from page one

In a two-page MCP TypeScript SDK 1.30.0 probe, each listTools response replaced the output-validator cache. After complete traversal, the first-page tool accepted a string where its schema required an integer; the second-page tool failed closed.

Published Read analysis →
Agents19 min

MCP Output Validation Depends on Tool Discovery

The TypeScript client rejected a bad structured result after listTools—but accepted it before the schema cache existed

In an official MCP TypeScript SDK 1.30.0 probe, Client.callTool accepted a string where a tool promised an integer until listTools populated the output-validator cache. Discovery order is therefore part of the client’s validation boundary.

Published Read analysis →
Agents18 min

MCP’s readOnlyHint Is Not a Permission Boundary

Tool annotations describe intent; trusted code must still authorize effects

In an official MCP TypeScript SDK 1.30.0 probe, a tool advertised readOnlyHint: true and idempotentHint: true, then wrote a file on both calls. The SDK faithfully transported the hints and faithfully dispatched the mutations.

Published Read analysis →
Agents18 min

npm ci --ignore-scripts Still Installs Runnable Package Binaries

Lifecycle suppression and executable linking are different controls

In npm 11.6.0, a synthetic package installed by npm ci --ignore-scripts did not run its install hook, but npm still created node_modules/.bin/aag-ci-probe. Invoking that link executed the package. --bin-links=false removed the shim, not the underlying executable file.

Published Read analysis →
Agents17 min

npm --ignore-scripts Is Not a Lasting Quarantine

A clean install can become code execution when a later rebuild drops the flag

In npm 11.6.0, I installed a synthetic tarball with --ignore-scripts and observed no hooks. A later ordinary npm rebuild ran its preinstall, install and postinstall scripts. The install flag did not persist as package approval state; script policy must cover every later build command.

Published Read analysis →
Agents16 min

npm pack --dry-run Still Executes Package Scripts

A local reproduction of the difference between “do not write the tarball” and “do not run code”

In npm 11.6.0, a synthetic package’s prepack, prepare and postpack hooks all ran under npm pack --dry-run. The tarball file was not written, but the scripts changed the working tree. Use --ignore-scripts and an isolated builder when inspection must not grant package code authority.

Published Read analysis →
Agents17 min

A pnpm Build Approval Can Outlive the Version You Reviewed

Source-level evidence for pinning lifecycle-script authority to package versions

pnpm 11.24.0 blocks unapproved dependency builds, but its normal approve-builds flow records a bare package name. The pinned implementation treats that name as approval for every registry version. Exact name@version rules are supported and give CI a narrower execution boundary.

Published Read analysis →
Agents18 min

npm 12 Blocks Dependency Scripts—But a Git Dependency Still Ran prepare

A clean-room probe of allowScripts, allow-git and the temporary-clone build path

npm 12.0.2 correctly rejected a git dependency until I enabled git fetching. After that, an unapproved prepare hook still ran twice inside npm’s temporary clone even while npm warned that the package’s prepare script had been blocked. The implementation explains why --ignore-scripts remains the stronger boundary for untrusted git dependencies.

Published Read analysis →
Agents14 min

npm Install Is an Execution Boundary

Lifecycle hooks turn dependency installation into shell execution

A local file dependency with preinstall, install and postinstall hooks ran all three hooks during npm install in my sandbox. Re-running with --ignore-scripts suppressed the hooks entirely, which makes the real question obvious: who gets to execute code during installation?

Published Read analysis →
Agents16 min

MCP Token Passthrough Needs an Audience Boundary

A deployment decision for local servers, relays and downstream resources

If an MCP server can relay the same bearer token it received, the server becomes part of the authorization plane. The safer pattern is audience-bound resource tokens, explicit resource metadata and a refusal to treat localhost as the trust boundary.

Published Read analysis →
Agents19 min

Node’s Permission Model Is a Seat Belt, Not an AI Code Sandbox

Node 26.7.0 adds audit mode, but the security boundary still lives outside the runtime

Node’s stable permission model still catches accidental filesystem and process access, and v26.7.0’s new --permission-audit mode is useful for rollout rehearsals. Our local probe showed the same diagnostics-channel event in both modes; only enforce mode denied the read.

Updated Read analysis →
Agents13 min

Before You Connect an MCP Server to Production

A go/no-go review for tool access, identity and containment

MCP standardizes how an AI application reaches tools; it does not decide which authority the application should receive. Use these gates before a server can touch production data or actions.

Updated Read analysis →
Models26 min

GLM-5.3: Trial the Coding Gains, Contain the Cyber Capability

A migrate, sandbox, self-host or wait decision for Z.ai’s post-trained coding model

GLM-5.3 is a timely coding-agent candidate, not an automatic GLM-5.2 upgrade. Trial the managed model in an isolated repository workflow, migrate thinking settings explicitly, contain network and exploit authority, and wait for the actual weights and safety artifacts before approving self-hosting.

Published Read analysis →
Models14 min

GPT-5.6 Sol Ultrafast: Buy Speed Only Where Latency Changes the Outcome

A build, buy and deploy decision for OpenAI’s limited-preview Ultrafast API mode

GPT-5.6 Sol Ultrafast is an emerging serving option, not a blanket model migration. Trial it only on latency-critical paths where saved time has measured value, quality remains equivalent locally, tier delivery is observable, and fallback to Standard is safe.

Published Read analysis →