Skip to content

docs(plan,changelog): record updater fix + async-job polling contract#387

Merged
thinmintdev merged 1 commit into
mainfrom
docs/update-button-fix-followup
May 28, 2026
Merged

docs(plan,changelog): record updater fix + async-job polling contract#387
thinmintdev merged 1 commit into
mainfrom
docs/update-button-fix-followup

Conversation

@thinmintdev
Copy link
Copy Markdown
Contributor

Summary

Follow-up to #386. Records the fix in CHANGELOG (Unreleased → Fixed) and codifies the underlying pattern in PLAN §9.

Changes

CHANGELOG.md — new `### Fixed` block under Unreleased explaining the three fixes (UI hook verbs/signatures + job poller, backend extract quarantine, dedupe of duplicate non-empty check).

PLAN.md §9 (Update mechanism):

  • Extract step now documents the quarantine-on-retry behavior (recognises hal0 installs by VERSION/pyproject; foreign dirs still refused).
  • New Async-job API contract subsection. Any 202+job_id endpoint (updater apply, model pull, future jobs) requires the client to poll `GET /status/{id}` until terminal state and toast the verdict. The 202 ack alone says nothing about success — this was the entire root cause of fix(updater,dash): surface apply errors + auto-recover stale install dir #386 and was previously implicit only in route docstrings.

Test plan

  • Markdown renders correctly in GitHub preview
  • No code changes; CI green by default

🤖 Generated with Claude Code

PR #386 fixed the silent Install update bug; this records it in the
CHANGELOG (Unreleased → Fixed) and codifies the underlying pattern
in PLAN §9.

CHANGELOG: new Fixed section under Unreleased explaining the three
fixes (UI hook verbs/signatures + job poller, backend extract
quarantine, dedupe).

PLAN §9 (Update mechanism):
  - Note the new extract-time quarantine behavior for prior hal0
    extractions (no longer blocks retry after a half-failed apply).
  - New "Async-job API contract" subsection: any 202+job_id endpoint
    (updater apply, model pull, future jobs) requires the client to
    poll GET /status/{id} until terminal state and toast the
    verdict. A 202 ack alone is silently wrong — this was the entire
    root cause of #386.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@thinmintdev thinmintdev merged commit 3abdf9c into main May 28, 2026
4 checks passed
@thinmintdev thinmintdev deleted the docs/update-button-fix-followup branch May 28, 2026 15:57
@thinmintdev thinmintdev mentioned this pull request May 29, 2026
4 tasks
thinmintdev added a commit that referenced this pull request May 29, 2026
End-of-stream cut for v0.3. Bundles MCP-completion, memory-map redesign,
Settings → Updates fix (#386), silent-eviction dispatcher recovery (#392),
ADR-0020 OpenRouter callback skeleton (#409), persona spending-cap
primitive (#411), δ-harness Hermes coverage (#410), and the docs/internal
pin + dashboard-v3 walkthrough (#389/#390).

After this tag, active scope rolls to v0.4 (install-mode reconciliation
+ UI polish + fully-implemented Agents/UI/Install bootstrapped) and v0.5
(MCP admin + memory wiring across UI and agents).

CHANGELOG merged from two coexisting Unreleased blocks into a single
[v0.3.2-alpha.1] section; added missing entries for #392 (dispatcher),
#387 (async-job polling contract), and the docs PRs #389/#390.

pyproject 0.3.1-alpha.1 → 0.3.2-alpha.1. uv.lock resynced (was stuck at
0.3.0a1 from prior drift).

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.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