Skip to content

Add homepage enhancements and version management for v2.0.0#124

Merged
bokelley merged 4 commits into
mainfrom
release-1.0.0
Oct 15, 2025
Merged

Add homepage enhancements and version management for v2.0.0#124
bokelley merged 4 commits into
mainfrom
release-1.0.0

Conversation

@bokelley

Copy link
Copy Markdown
Contributor

🎉 AdCP v1.0.0 - First Stable Release

This PR prepares AdCP for the first stable v1.0.0 release, marking the protocol as production-ready.

Version Management Infrastructure

  • Changesets installed for automated version management
  • Simplified version sync script - updates only schema registry (not 80+ files!)
  • npm scripts for version workflow: changeset, version, update-schema-versions, release
  • CHANGELOG.md with comprehensive v1.0.0 release notes
  • RELEASING.md with complete release workflow documentation

Homepage Enhancements

v1.0.0 Release Banner:

  • Prominent green banner announcing stable release
  • Positioned below hero section for maximum visibility
  • Clear call-to-action to documentation

Key Features Section:

  • Comprehensive showcase of all protocol capabilities
  • Media Buy Protocol: 9 tasks for campaign lifecycle management
  • Creative Protocol: 3 tasks for AI-powered creative generation
  • Signals Protocol: 2 tasks for first-party data integration
  • Protocol Infrastructure: MCP, A2A, async workflows, HITL
  • Interactive feature cards with hover effects
  • Code snippets highlighted in descriptions

Technical Details

  • Version: 1.0.0
  • Schema Version: 1.0.0
  • All tests passing: ✅ 7/7 schema validation, ✅ 7/7 examples, ✅ TypeScript
  • Clean commit history: 3 commits

What's Included in v1.0.0

  • 9 Media Buy tasks (get_products, create_media_buy, get_media_buy_delivery, etc.)
  • 3 Creative tasks (build_creative, preview_creative, list_creative_formats)
  • 2 Signals tasks (get_signals, activate_signal)
  • Standard formats library
  • JSON Schema validation for all tasks
  • MCP and A2A protocol support
  • Async workflows with webhooks
  • Human-in-the-loop approval system
  • Comprehensive documentation

Breaking Changes

None - this is the first stable release.

Post-Merge Steps

After merging this PR:

git checkout main
git pull
git tag -a v1.0.0 -m "Release v1.0.0: First stable release"
git push origin v1.0.0

Then create GitHub Release from the tag with CHANGELOG.md content.


🤖 Generated with Claude Code

bokelley and others added 4 commits October 13, 2025 13:59
This commit adds Changesets for automated version management and prepares
the first official release of AdCP v0.5.0.

**Version Management Infrastructure:**
- Installed Changesets for automated version management
- Created simplified version sync script (updates schema registry only)
- Added npm scripts: changeset, version, update-schema-versions, release
- Configured Changesets for public package releases

**Release Documentation:**
- Added CHANGELOG.md with v0.5.0 release notes
- Added RELEASING.md with comprehensive release workflow guide
- Created initial changeset for v0.5.0 release

**Version Updates:**
- Updated package.json to 0.5.0
- Updated schema registry to 0.5.0
- Added dependencies: @changesets/cli, glob

**Benefits:**
- Future version changes update only 2 files (package.json + schema registry)
- Automated version management with clear workflow
- Consistent release documentation
- Follows industry best practices

All tests pass.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit updates the release from 0.5.0 to 1.0.0, marking AdCP as
production-ready and stable.

**Version Updates:**
- Updated package.json to 1.0.0
- Updated schema registry to 1.0.0
- Updated CHANGELOG to reflect stable release
- Updated changeset to major version bump

**Homepage Enhancements:**
- Added prominent v1.0.0 release banner at top of page
- Added comprehensive "Key Features" section showcasing:
  - Media Buy Protocol (9 tasks)
  - Creative Protocol (3 tasks)
  - Signals Protocol (2 tasks)
  - Protocol infrastructure features
- Features displayed in interactive grid with hover effects
- Clear categorization of all capabilities

**Design Improvements:**
- Green gradient banner for release announcement
- Feature cards with consistent styling
- Code snippets highlighted in feature descriptions
- Responsive layout for mobile devices

All tests pass. AdCP is now production-ready! 🎉

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Resolved conflicts from main branch which had v2.0.0 with breaking changes.
Updated all references from v1.0.0 to v2.0.0:
- Package version
- Schema registry version
- Homepage banner
- Features section
- CHANGELOG
- Changeset file

This PR now adds homepage enhancements on top of the v2.0.0 release.
@bokelley bokelley changed the title Release v1.0.0: First stable release Add homepage enhancements and version management for v2.0.0 Oct 15, 2025
@bokelley
bokelley merged commit 78e8a85 into main Oct 15, 2025
4 checks passed
@bokelley
bokelley deleted the release-1.0.0 branch October 15, 2025 14:43
bokelley added a commit that referenced this pull request Mar 18, 2026
DMs with thread_ts were being processed by both the Assistant framework
(handleUserMessage) and the message event handler (handleChannelMessage →
handleDirectMessage), causing the same response to appear twice. Skip
threaded DMs in handleChannelMessage since the Assistant framework
already handles them.

Resolves Escalation #124 (Pia Malovrh / Celtra).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
bokelley added a commit that referenced this pull request Mar 18, 2026
DMs with thread_ts were being processed by both the Assistant framework
(handleUserMessage) and the message event handler (handleChannelMessage →
handleDirectMessage), causing the same response to appear twice. Skip
threaded DMs in handleChannelMessage since the Assistant framework
already handles them.

Resolves Escalation #124 (Pia Malovrh / Celtra).

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
bokelley added a commit that referenced this pull request Apr 26, 2026
Three things in one tidy commit:

1) Empty-response guard. Two redteam-flagged turns produced rating=1
   "Response is empty" responses on short follow-up prompts ("?", "what
   happened?"). The model returned an assistant message with empty text.
   Now substitutes a clarifying fallback ("Sorry, I lost the thread
   there. Could you rephrase or give me a bit more context?") so the
   user gets something rather than nothing.

2) Pipeline factoring. The four assistant-text return sites in
   claude-client.ts each did `stripBannedRituals(...)` →
   `truncateLongResponseToShortQuestion(userMessage, ...)`. Factored the
   chain into a single `applyResponsePipeline(question, rawText)` helper
   in response-postprocess.ts so the pipeline (strip → empty-guard →
   truncate) lives in one place. Future additions slot in there.

3) Tests. 4 new unit tests on the pipeline helper covering empty input,
   ritual-only input (gets stripped to empty → fallback), substantive
   long input (gets stripped + truncated), and substantive short input
   (passes through unchanged). 25/25 tests in the postprocess module pass.

Closes the third item from the cycle followup punch list (empty-message
bug, #124-style). The actual root-cause investigation of *why* Sonnet
returns empty assistant blocks is out of scope — this just turns the
silent-empty into a polite-clarifying-fallback so users aren't left
staring at a blank reply.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
bokelley added a commit that referenced this pull request Apr 26, 2026
…gth cap, empty-response guard (#3306)

* fix(addie): strip banned rituals on the end_turn multi-textblock path

Prod redteam against the deployed Sonnet+stripper combo (PR #3273) showed
3 ritual-phrase leaks ("the honest answer is", "that's a fair question",
"here's the honest answer") despite the stripper being in place. Tracing
showed the strip was applied at three response-emission sites in
claude-client.ts but missed a fourth: the end_turn path at line 763 that
joins multi-text-block responses (used by web-search-returning answers).
That path returned `text` unstripped to the caller.

Now consistent with the other three return points — collect rawText, run
through stripBannedRituals, return the cleaned form. No semantic change
to non-end_turn paths.

Verified: prod redteam categorized the 3 banned-phrase failures on gov-3,
gov-4, cad-1 — all questions where Sonnet's response goes through the
end_turn-with-multiple-text-blocks path. After this fix the four
return-points (line 539 cost-cap-message, 798 end_turn-multitext,
902 toolUseBlocks-empty, 1422/1453 streaming-done) all run the strip.

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

* feat(addie): deterministic length post-processor for short user questions

Prod redteam after PR #3273 (Sonnet bump) and PR #3290 (length-matching
teaching) showed Sonnet still over-explains on short challenges:
- priv-1 ("surveillance capitalism?"): 254 words
- acct-1 ("$500K on garbage inventory"): 304 words
- acct-2 ("AI screws up"): 227 words
- gap-1 ("what AdCP not do"): 173 words
- priv-1 length blow-out: 217 words

Both prompt-engineer and docs-expert reviews of #3290 had converged on
the same conclusion: rule-based teaching reduces mean length but
doesn't enforce a ceiling, and a deterministic post-processor is the
right backstop. This is that backstop.

New `truncateLongResponseToShortQuestion(question, text)` in
`server/src/addie/response-postprocess.ts`:

- Fires when question ≤15 words AND response >160 words.
- Truncates at the nearest sentence boundary at or before 130 words.
- Appends "Happy to go deeper on any of this if useful." (italicized).
- Code blocks are split out and kept whole — never cut mid-fence; if
  including a fence would push over the target, stops before it.
- Always keeps the first sentence even if it alone exceeds the target
  (a one-sentence answer beats no answer).
- Idempotent: running on already-truncated text is a no-op.

Wired at the same four return sites in `claude-client.ts` as the
banned-ritual stripper (lines 770, 901, 1423, 1454). The chain is now
`stripBannedRituals` → `truncateLongResponseToShortQuestion` → return.

10 new unit tests cover question-length gate, response-length gate,
sentence-boundary preservation, single-giant-sentence fallback,
code-block preservation, idempotence, empty-input handling. 21/21
tests pass on the postprocess module.

Expected redteam impact: priv-1 / acct-1 / acct-2 / gap-1 length_cap
failures drop to zero. The single remaining length-related concern is
priv-1's banned_marker on "adcp is more private", but that's a separate
overclaim issue the truncator doesn't address (the marker can appear
within the truncated body).

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

* fix(addie): empty-response fallback + factor pipeline into single helper

Three things in one tidy commit:

1) Empty-response guard. Two redteam-flagged turns produced rating=1
   "Response is empty" responses on short follow-up prompts ("?", "what
   happened?"). The model returned an assistant message with empty text.
   Now substitutes a clarifying fallback ("Sorry, I lost the thread
   there. Could you rephrase or give me a bit more context?") so the
   user gets something rather than nothing.

2) Pipeline factoring. The four assistant-text return sites in
   claude-client.ts each did `stripBannedRituals(...)` →
   `truncateLongResponseToShortQuestion(userMessage, ...)`. Factored the
   chain into a single `applyResponsePipeline(question, rawText)` helper
   in response-postprocess.ts so the pipeline (strip → empty-guard →
   truncate) lives in one place. Future additions slot in there.

3) Tests. 4 new unit tests on the pipeline helper covering empty input,
   ritual-only input (gets stripped to empty → fallback), substantive
   long input (gets stripped + truncated), and substantive short input
   (passes through unchanged). 25/25 tests in the postprocess module pass.

Closes the third item from the cycle followup punch list (empty-message
bug, #124-style). The actual root-cause investigation of *why* Sonnet
returns empty assistant blocks is out of scope — this just turns the
silent-empty into a polite-clarifying-fallback so users aren't left
staring at a blank reply.

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

---------

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