Skip to content

Delivery open-issues-batch - #444

Merged
LeXwDeX merged 47 commits into
devfrom
feat/434-open-issues-batch
Aug 25, 2026
Merged

Delivery open-issues-batch#444
LeXwDeX merged 47 commits into
devfrom
feat/434-open-issues-batch

Conversation

@LeXwDeX

@LeXwDeXLeXwDeX commented Aug 25, 2026

Copy link
Copy Markdown
Owner

Closes#434
Closes#442
Closes#443
Closes#440
Closes#436

Why

Batch delivery of all remaining open issues into the dev integration layer. This PR also carries main's last 41 commits into dev (dev was behind after the five main-direct merges), which is itself the #434 fix.

What changed

Evidence

  • bun run test:dag-core — 52 pass, gate passed.
  • bun test test/dag/ — 622 pass / 0 fail across 53 files (includes 2 new nudge tests in dag-schema-prompt-contract.test.ts).
  • bun test targeted: github-attachment-guard (new), github-action, util/html, http-recorder record-replay 33/33.
  • bun typecheck (packages/opencode) clean; root turbo typecheck all-cached pass on push.
  • bun run lint — 4811 warnings ≤ 4850 ratchet.
  • CodeQL on this PR head: Analyze (javascript-typescript) pass.

Checklist

  • Why, What changed, and Evidence are filled in.
  • specgit finish exits 0.

Release train: llama.cpp tool-schema fix + memory /init self-heal + v1.0.31 series notes
…on context
Root cause analysis for the intermittent empty /dag pane under concurrent
workflows: the mount-time dag.summary request had no timeout, so an RPC stall
pinned the route on its first attempt forever (spinner/empty pane), and the
no-sessionID branch silently rendered the loaded-empty state as if no
workflows existed.
Conservative fix, inspector-local only:
- wrap the mount fetch in a race timeout (dag_fetch_timeout_ms, default 15s)
- retry once after 400ms before surfacing "Unable to load workflows"
- render explicit guidance when the route carries no sessionID instead of
the misleading "No workflows for this session"
Both behaviors are pinned by new tests at the existing harness seam
(retry spy reaches >=2 calls; guidance copy renders with zero network calls).
Extends the issue-#389 todo reminder feature with the pre-tool-call seam it
originally proposed and deliberately deferred. The per-step reminder covers
tool-free steps; this adds mid-turn coverage so long multi-tool turns keep
seeing the uncompleted list between calls.
- TodoReminders.preToolCall: returns the rendered reminder before a
non-todowrite tool call, at most once per assistant turn (turn-scoped
marker keyed by assistant messageID), never for todowrite itself
- tools.ts: both PreToolUse sites (native tools + MCP tools) prepend the
reminder to additionalContexts ahead of any hook contexts
Turn-scoped dedup answers #389's objection to this seam (N parallel calls ->
N duplicate reminders); pure-reasoning steps stay covered by the existing
per-step injection, so the two seams complement instead of compete.
Tests: first-call injects, same-turn repeat skips, new turn re-arms,
todowrite never injects nor consumes the turn shot, settled list stays quiet.
Dependency upgrades (Dependabot): dompurify 3.4.13 across ui/session-ui and
root catalog, astro 7.1.0 for web, nitro 3.0.260429-beta across the four
console/stats/enterprise apps, @hey-api/openapi-ts 0.97.3 for sdk/js with
SDK regeneration.
CodeQL source fixes: user-attachments URL prefix validation before fetch
(SSRF), OAuth error-page HTML escaping in snowflake-cortex, rejection-sampling
PKCE verifiers (xai/codex/snowflake-cortex modulo bias), bounded pattern input
in provider-error and linear data-URL parsing in acp/tool (ReDoS), and
least-privilege permissions on ci-typecheck.
Fallout adaptation: regenerated client types made response optional and one
oauth callback param required — httpapi-sdk test, terminal, server-session,
and dialog-connect-provider updated accordingly; web/.wrangler deploy
artifact now ignored.
Acceptance tests pin data-URL parsing and context-overflow classification.
Blocks previously could set worker_type but not worker_config, so authors
needing a per-block timeout had to inline low-level nodes — and models kept
reaching for the field anyway (fail-closed rejection with no actionable
hint). Accept it explicitly:
- WorkflowBlock gains optional worker_config { timeout_ms }; compilation
threads it through every expanded node, overriding node_defaults
- FIELD_DRIFT_HINTS covers bare timeout/timeouts/timeout_ms; the drift-hint
field list now includes worker_config
- draft-config description and guide(blocks) document the capability
- strict unknown-key parsing stays fail-closed
Tests: block-level value lands on compiled nodes, node_defaults fallback,
block-over-defaults precedence, unknown keys still rejected with hints.
The dev-lineage workflow installs specgit locally (npm install --no-save),
which npm resolves against this repo's root package.json and fails with
EUNSUPPORTEDPROTOCOL on the Bun catalog: protocol. This PR targets main,
so run the main-line global install instead.
The dev-lineage policy lists canonical ids (unit-tests/e2e-tests) that do
not exist as check-run names on the main-line CI matrix, so the acceptance
waiter can never observe them. This PR targets main; require the main-line
check names.
A delivery-freshness session ran `pnpm exec vitest … | tail -15`: the pipe
buffers everything, pnpm/vitest cold start stayed silent past 15s, the
operator interrupted twice, and the abort label "User aborted the command"
sent the postmortem chasing a phantom manual cancel.
- BLOCK_CONTRACTS gains a shared SHELL_DISCIPLINE sentence appended to the
four command-heavy kinds (explore/debug/coding/verify) so both curated
templates and ad-hoc drafts inherit it from one source of truth
- shell.ts and session/prompt.ts now share one exported SHELL_ABORT_NOTE;
its wording names the two possible interrupt origins instead of blaming
the user, and repeats the bounding advice at the moment it matters
- test assertions updated to the shared wording
snapshot-tool-race failed deterministically with the pre-tool-call reminder:
minimal server fixtures do not provide Todo.Service, so the unconditional
yield* died and took the whole tool execution down with it — the bash command
never ran. The reminder is decoration on top of execution; it now degrades to
no-reminder on any non-interrupt failure while interrupts still propagate.
Found by the existing snapshot race gate; no new test seam needed.
…rness alignment)
# Conflicts:
#	.specgit.yaml
…rness alignment)
# Conflicts:
#	.specgit.yaml
@LeXwDeX
LeXwDeX changed the base branch from main to devAugust 25, 2026 00:42
@LeXwDeX
LeXwDeX marked this pull request as ready for review August 25, 2026 01:01
@LeXwDeX
LeXwDeX merged commit 27522d2 into devAug 25, 2026
15 checks passed
@LeXwDeX
LeXwDeX deleted the feat/434-open-issues-batch branch August 25, 2026 02:44
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment