Skip to content

chore(release): align changesets and revert tasks/get for 3.0.1 cut#3373

Merged
bokelley merged 4 commits into
mainfrom
bokelley/3-0-1-release-check
Apr 28, 2026
Merged

chore(release): align changesets and revert tasks/get for 3.0.1 cut#3373
bokelley merged 4 commits into
mainfrom
bokelley/3-0-1-release-check

Conversation

@bokelley

Copy link
Copy Markdown
Contributor

Summary

Prepares main for the AdCP 3.0.1 cut. After this lands, npx changeset status reports a single patch bump for adcontextprotocol and 3.0.1 cuts cleanly.

Three commits:

  • f4bce25d5 — Revert feat(schema): add result and include_result to tasks/get #3126 (tasks/get result / include_result schema fields). The original PR was milestoned 3.1.0 by its author but landed on main early, forcing the changeset bundle to a minor. Re-add path: git revert f4bce25d5 on a fresh branch after 3.0.1 ships, milestone 3.1.0.
  • 534f7b3d9 — Five changesets downgraded minorpatch (add-seed-creative-format-pagination, fix-format-asset-oneof-titles, fix-get-signals-max-results-precedence, hoist-duplicate-inline-enums, hoist-inline-enum-duplicates-tranche-2); envelope-prohibition overlap on protocol-envelope.json resolved by removing the redundant per-property not: {} markers and keeping the top-level not: { anyOf: [{ required: [task_status] }, { required: [response_status] }] } from envelope-forbid-legacy-status-fields; v3-envelope-integrity-conformance.md rewritten as patch scoped to the storyboard contribution.
  • 9818fd81e — Align force_task_completion (patch: force_task_completion + create_media_buy_async submitted -> completed roundtrip #3138) and the comply-test-controller schema/docs with 3.0 webhook delivery, since the include_result: true polling path the original framing referenced was reverted.

Closes #2681 (already closed via comment; ships in 3.0.1).

Pre-PR expert review

  • ad-tech-protocol-expert: ship it. No semver violations. All five minor→patch downgrades defensible: comply_test_controller is conformance-harness scaffolding (not core protocol), JSON Schema title is annotation-only per draft-07 §10.1, get_signals precedence is a clarification of underspecified collision behavior, and the enum-hoist refactors produce byte-identical bundled subgraphs. Envelope overlap fix is semantically equivalent — top-level not: { anyOf: [{ required: [...] }] } blocks the fields by key presence regardless of value (JSON Schema draft-07 §6.5.3). Revert is clean; the post-revert task-lifecycle.mdx reinstates the correct shipped-3.0.0 webhook-first guidance.
  • code-reviewer: no CI blockers. Flagged downstream coupling — force_task_completion (patch: force_task_completion + create_media_buy_async submitted -> completed roundtrip #3138) and the comply-test-controller schema/docs referenced include_result: true from feat(schema): add result and include_result to tasks/get #3126. Fixed in 9818fd81e.

Re-add path for tasks/get result fields

After this PR + the 3.0.1 cut land:

git checkout -b bokelley/readd-tasks-get-result-3-1-0 main
git revert f4bce25d5      # restores everything from #3126 verbatim
git push -u origin bokelley/readd-tasks-get-result-3-1-0
gh pr create --base main --milestone 3.1.0 \
  --title "feat(schema): re-add result and include_result to tasks/get for 3.1.0" \
  --body "Re-adds #3126, reverted in <THIS-PR-NUMBER> to allow 3.0.1 to cut as a clean patch. Closes #3123. Unblocks adcp-client#967."

Test plan

  • npx changeset status reports a single patch bump for adcontextprotocol
  • Pre-commit hooks passed on all three commits (test:unit, test:test-dynamic-imports, typecheck)
  • No remaining include_result references in non-dist/ paths outside the explicit "tracked for 3.1" pointers in task-lifecycle.mdx:195, revert-tasks-get-result-for-3-0-1.md, and tasks-get-include-result-docs-fix.md
  • CI green on PR
  • After merge: create 3.0.x branch from main, run npx changeset version on it to produce 3.0.1
  • Verify dist/protocol/3.0.1.tgz serves end-to-end per the cut-major runbook

🤖 Generated with Claude Code

bokelley and others added 3 commits April 28, 2026 02:35
Five changesets downgraded minor → patch where the underlying change is
annotation-only, source-schema refactor, conformance-harness only, or a
clarification of underspecified behavior:
add-seed-creative-format-pagination, fix-format-asset-oneof-titles,
fix-get-signals-max-results-precedence, hoist-duplicate-inline-enums,
hoist-inline-enum-duplicates-tranche-2.

Resolve the envelope-prohibition overlap on protocol-envelope.json: keep
the top-level not: { anyOf: [{ required: [task_status] }, { required:
[response_status] }] } constraint from envelope-forbid-legacy-status-fields,
remove the redundant per-property not: {} markers from the v3 envelope
integrity PR, update the storyboard narrative to reference the remaining
constraint, and rewrite v3-envelope-integrity-conformance.md as patch
scoped to the storyboard contribution.

After the prior tasks/get revert, npx changeset status reports a single
patch bump for adcontextprotocol.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Reframe the buyer-side observation from include_result polling to
push_notification_config webhook delivery, matching the 3.0 canonical
path for completion payload retrieval. The tasks/get polling response
returns terminal status only in 3.0; the typed result projection is
tracked for 3.1 (#3123).

- comply-test-controller.mdx: three call sites — overview, push-
  notification cross-protocol obligation, buyer-side observation —
  reworded to webhook-first with tasks/get reporting status only.
- comply-test-controller-request.json: result param description
  reframed to webhook delivery as the canonical path.
- force-task-completion-roundtrip.md changeset: remove the
  "(formalized in #3126)" reference, since #3126 is reverted to
  hold for 3.1.0.

The scenario itself is unchanged: the seller still stamps the
registered result against the task_id and surfaces it via webhook;
this commit only realigns the documentation surface to the 3.0
delivery path.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@bokelley

Copy link
Copy Markdown
Contributor Author

CI failure is pre-existing main breakage, not caused by this PR.

The two failing checks (`Storyboards (framework dispatch)` and `Storyboards (legacy dispatch)`) both fail in `signed_requests` with the same 28-vector 401 pattern that's been red on main HEAD since #3351 merged ~20 hours ago. Filed as #3376.

Evidence:

This PR's diff: changeset frontmatter, one schema cleanup on `protocol-envelope.json`, comply-test-controller doc realignment, and a revert of `tasks/get` schema fields. Zero touch on `training-agent/`, signed-requests verifier code, RFC 9421 docs, or replay-store paths.

Recommend merging on green of all other 21 checks once #3376 is resolved on main and a re-run of these two jobs goes green. Or merge anyway if maintainers agree the failure is unrelated infrastructure noise — every other check is passing, including `Server integration tests`, `TypeScript Build`, `check-snippets`, and `check-schema-links`.

@bokelley

Copy link
Copy Markdown
Contributor Author

Acknowledged. The CI failure isolation evidence is clear — signed_requests 401 pattern predates this PR's diff and tracks to #3351 / #3376. No action needed on this PR's side.


Generated by Claude Code

@bokelley

Copy link
Copy Markdown
Contributor Author

Got it — no action needed on this PR's side.


Generated by Claude Code

bokelley added a commit that referenced this pull request Apr 28, 2026
…ol (#3379)

#3351 swapped to PostgresReplayStore to close the cross-instance replay
gap (#3338). Worked in production but broke the storyboard runner:
CI runs the full server in-process without initializing a Postgres
pool, and getReplayStore() was unconditionally calling getPool() which
throws "Database not initialized."

Symptom (#3373 storyboards CI):
  signed_requests  ✗ 3P / 28F / 9S  (every positive vector returned
                                     401 because PostgresReplayStore
                                     .insert rejected on the
                                     unavailable pool, verifier failed
                                     closed)

Fix:
- getReplayStore() falls back to InMemoryReplayStore when getPool()
  throws — gated on NODE_ENV !== 'production' so a misconfigured prod
  still fails loudly (preserves the multi-instance protection).
- startReplayCacheSweeper() is a silent no-op when no pool is
  initialized.
- resetRequestSigning() now also clears the cached _replayStore so
  test suites that swap process state stay coherent.

Verified locally:
  signed_requests  ✓ 31P / 9S / 0N/A  (recovered)

Production unaffected — prod always has a pool, so PostgresReplayStore
is used and cross-instance replay protection holds. Confirmed via
adcp grade --only 016-replayed-nonce → still PASS.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@bokelley bokelley merged commit 904eb1a into main Apr 28, 2026
21 checks passed
@bokelley bokelley deleted the bokelley/3-0-1-release-check branch April 28, 2026 10:53
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.

acquire_rights: expired-campaign-dates rejection is sensible but unspecified

1 participant