Skip to content

Sprint 10: hardening & release readiness — backlog burn-down, reactive identify, npm rehearsal - #27

Merged
hynding merged 14 commits into
mainfrom
sprint-10-hardening-release
Jul 10, 2026
Merged

Sprint 10: hardening & release readiness — backlog burn-down, reactive identify, npm rehearsal#27
hynding merged 14 commits into
mainfrom
sprint-10-hardening-release

Conversation

@hynding

@hynding hynding commented Jul 10, 2026

Copy link
Copy Markdown
Owner

Summary

Implements the Sprint 10 plan (docs/superpowers/plans/2026-07-09-sprint-10-hardening-release.md) — the consolidation sprint: the entire seven-issue backlog closed, one cross-cutting integrator fix, and the npm release pipeline rehearsed end to end.

The one that mattered

The final whole-branch review caught a live release hazard the rehearsal itself had missed: changeset publish filters only on package.json.private and never consults the changeset ignore list (verified against the CLI source) — the first real release dispatch would have published the GPL-licensed internal packages (core, adapter-db, adapter-strapi, config, api) to the public registry with src/ included. Fixed in f371754: all five are now private: true, RELEASING.md's incorrect safety claim corrected, and an explicit pnpm publish -r warning added. The dry-run now lists exactly the three MIT packages.

Behavior notes for existing consumers

  • Widgets now re-render on identify()/re-identify — apps that remounted via a key prop can remove that workaround (README migration note). Context internals changed but usePromocean() is signature-identical.
  • SDK: exhausted retries ending in a network error now throw a plain Error (previously a PromoceanApiError carrying a stale earlier 5xx status). All-5xx runs are unchanged.
  • GET /v1/stats accepts offset-form ISO datetimes (+02:00); placements GET no longer accepts/documents a userId query param (it was consumed by nothing since Sprint 5).
  • Migration 0009 (composite PK on user_streaks) is additive-safe; migration runs at boot as usual.
  • Packages versioned to 0.1.0; internal packages are now explicitly private: true.

Test plan

  • Full turbo 27–30/30 green throughout (contracts 75, sdk 52, widgets 46, adapter-db 81, api 188, adapter-strapi 53 post-fix-wave)
  • Fresh-volume compose stack: 8/8 Playwright specs green incl. the new switch-user reactivity assertions
  • Live verifications: cms probe suite run against a disposable DB (incl. injected-defect discrimination checks); trimmed images booted with healthchecks + smoke; verdaccio publish → scratch install → import/execute smoke, first-run clean
  • CMS verification script is now a checked-in tool: pnpm --filter cms verify:lifecycles

Review notes

Eight tasks through the full gate cycle (three fix waves: widgets no-op-notify discriminating test, cms script error-type assertions + blast-radius guards, and the final wave above) plus the whole-branch review — verdict ready to merge after f371754, all seven issue closures confirmed warranted. Follow-up filed: #26 (Docker dist-list derivation, turbo typecheck self-build dep). Remaining v1.x after this sprint: config-as-code CLI, React Native SDK.

Closes #5
Closes #15
Closes #18
Closes #20
Closes #21
Closes #23
Closes #24

🤖 Generated with Claude Code

hynding and others added 14 commits July 9, 2026 17:49
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…d stats totals, race coverage; drop dead stores (migration 0009)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…and NULL-recurrence probes

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…anup, remote guard

Fixes reviewer findings on the verify-lifecycles.ts script: probe 1 now
distinguishes the lifecycles' typed ValidationError from any other thrown
error instead of treating any throw as a pass; probe 3's fixture cleanup
runs in a finally and gains a positive-inclusion control row; probe 2 pages
explicitly instead of relying on limit: -1; the script refuses to run
against a non-local DATABASE_URL (unless --allow-remote) and refuses to
guess a fallback connection string.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…d deps

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…G.md

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@hynding
hynding merged commit 2c6487d into main Jul 10, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment