Commit 3b30189
Release v0.11.1 - Custom Athena workgroup for standalone deployments (#321)
* feat: conditionally resolve athena workgroup
* docs(spec): comprehensive setup wizard redesign proposal
Add three specification documents analyzing and proposing setup wizard improvements:
1. 03-current-wizard.md - Executive analysis of current 7-phase wizard
- Documents two critical human decisions
- Identifies workgroup discovery issues (legacy vs new stacks)
- Outlines architectural constraints for conditional resource creation
2. 04-setup-pitch.md - High-level refactoring strategy
- Proposes consolidation from 7 phases to 4 phases
- Fold deployment directly into setup (no separate deploy command)
- Single command completes entire workflow with progress visibility
- Three auto-detected paths: enabled/disabled/legacy
3. 05-complete-user-flows.md - Comprehensive user journey design
- Context-first approach: show state before asking questions
- Minimal but complete decision trees for all scenarios
- Escape hatches: disable integration, switch modes, review-only
- Golden paths optimized (hit enter for recommended actions)
- Covers: first-time setup, updates, mode switching, enable/disable
Key insight: Wizard is the only interface - must support all lifecycle
operations (configure, enable, disable, switch modes, update) with clear
context and minimal questions.
Related to workgroup resolution strategy (spec/a09-managed-workgroup/01-02)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
* feat(setup): implement unified setup flow
* feat(setup): improve integrated flow UX
1. Add "Disable integration?" as first prompt when integration is running
- Previously buried after "Update credentials?" and "Review config?"
- Users now have immediate access to disable without declining prompts
2. Show status with webhook URL after setup completes
- Displays after: update-integration-secret, enable-integration, review-only
- Uses default timer (auto-refreshes during updates, exits when stable)
- Gives users immediate confirmation of webhook URL and stack state
3. Simplify status display output
- Remove redundant "Benchling URL" (duplicate of "Webhook URL")
- Compact labels: "Catalog DNS" → "Catalog", "Stack Status" → "Status"
- Inline region with stack name: "Stack: quilt-staging (us-east-1)"
- Shorten secret display: "BenchlingSecret" instead of full ARN suffix
- Compact time format: "1 day ago" → "1d ago"
- Single-line workgroup instead of nested structure
- Remove CloudWatch Logs section (available via 'npm run logs')
Result: Information-dense but scannable status display with critical
info (webhook URL, status, secret freshness) visible at a glance.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
* fix(status): wait for ECS rollout completion before exiting
The status command would prematurely exit when CloudFormation reached a
terminal state (e.g., UPDATE_COMPLETE), even though ECS services were
still rolling out new tasks. This caused confusing "deployment complete"
messages when tasks were still pending or deployments were IN_PROGRESS.
Changes:
- Enhanced isTerminalStatus() to check both CloudFormation stack status
and ECS service rollout states
- Deployment now only exits when:
* CloudFormation stack is in terminal state (COMPLETE/FAILED)
* All ECS services have rolloutState: COMPLETED (not IN_PROGRESS)
* No ECS services have pending tasks
- Updated tests to verify behavior and reduce brittleness by testing
return values instead of console output strings
Also includes integrated mode deployment tracking cleanup from previous
work (clearDeployments() calls in setup-wizard.ts).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
* fix(setup): clear deployment tracking when configuring integrated mode
**Problem:**
The `status` and `logs` commands showed inconsistent webhook URLs after
switching from standalone to integrated mode:
- `status`: Read from CloudFormation (correct)
- `logs`: Read from stale deployment tracking (incorrect)
**Root Cause:**
When switching from standalone to integrated mode, the setup wizard never
cleared the old deployment tracking data, leaving stale standalone webhook
URLs in `~/.config/benchling-webhook/{profile}/deployments.json`.
**Solution:**
Clear all active deployments when configuring integrated mode in the setup
wizard. This ensures that:
1. Stale standalone URLs are removed
2. The `logs` command queries CloudFormation for the correct URL
3. The cached URL matches the actual integrated stack endpoint
**Changes:**
- `bin/commands/setup-wizard.ts`: Clear active deployments in all
integrated mode actions:
- `update-integration-secret`
- `enable-integration`
- `disable-integration`
- `review-only` (when integrated)
**Testing:**
```bash
# Before: logs showed stale standalone URL
npm run setup -- logs --profile default
# Webhook: https://dchv0dj8u4.execute-api.us-east-1.amazonaws.com/prod (wrong)
# Run setup to trigger cleanup
npm run setup -- --profile default --yes
# After: both commands show correct integrated URL
npm run setup -- status --profile default --timer 0
npm run setup -- logs --profile default
# Webhook: https://d9hjzu4vka.execute-api.us-east-1.amazonaws.com/benchling (correct)
```
Fixes inconsistent webhook URL display between status and logs commands.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
* fix(wizard): remove duplicate disable confirmation and clarify impact
- Remove redundant "Stop webhook?" prompt in setup-wizard (user already confirmed in Phase 5)
- Update Phase 5 prompt to clearly state webhook resources will be destroyed
- Clarify that wizard must be re-run to recreate (not just "re-enable")
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
* fix(wizard): remove duplicate standalone deployment prompt
When integration is disabled, automatically proceed to standalone
deployment instead of asking a redundant confirmation question.
Now explicitly states "Switching to standalone deployment..." for clarity.
Also improves status command to show Athena workgroup for both
standalone and integrated deployments.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
* fix(athena): enable AWS-managed query results in workgroup
The fallback Athena workgroup was missing the managedQueryResultsConfiguration,
causing queries to fail with "No output location provided" errors.
This change enables AWS-managed query results, which:
- Eliminates the need for a dedicated S3 results bucket
- Automatically manages storage and cleanup (24-hour retention)
- Simplifies infrastructure (no bucket permissions needed)
- Aligns with v0.11.0 goal of removing Athena results bucket
Also fix trailing comma in wizard phase5 (lint).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
* chore: bump version to 0.11.1
* docs: update CHANGELOG for v0.11.1
* docs: highlight automatic workgroup creation feature in CHANGELOG
* docs: clarify workgroup change - replaces AWS default, not manual setup
---------
Co-authored-by: Claude <[email protected]>1 parent ec2526a commit 3b30189
File tree
24 files changed
+3164
-190
lines changed- bin/commands
- docker
- lib
- wizard
- spec/a09-managed-workgroup
- test
- bin/commands
24 files changed
+3164
-190
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
6 | 26 | | |
7 | 27 | | |
8 | 28 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
| 12 | + | |
12 | 13 | | |
13 | 14 | | |
14 | 15 | | |
| |||
86 | 87 | | |
87 | 88 | | |
88 | 89 | | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
89 | 125 | | |
90 | 126 | | |
91 | 127 | | |
| |||
553 | 589 | | |
554 | 590 | | |
555 | 591 | | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
556 | 606 | | |
557 | 607 | | |
558 | 608 | | |
559 | 609 | | |
560 | 610 | | |
561 | | - | |
| 611 | + | |
562 | 612 | | |
563 | 613 | | |
564 | | - | |
565 | | - | |
566 | 614 | | |
567 | 615 | | |
568 | 616 | | |
| |||
586 | 634 | | |
587 | 635 | | |
588 | 636 | | |
| 637 | + | |
| 638 | + | |
589 | 639 | | |
590 | 640 | | |
591 | 641 | | |
| |||
0 commit comments