Skip to content

Commit 37b0e44

Browse files
feat(web): generate provider provisioning packets
1 parent cebf721 commit 37b0e44

7 files changed

Lines changed: 624 additions & 10 deletions

File tree

.beads/issues.jsonl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,7 @@
496496
{"id":"bd-85l","title":"Wizard: setCompletedSteps should notify same-tab listeners","description":"apps/web/lib/wizardSteps.ts setCompletedSteps writes localStorage but does not emit same-tab change events; pages like launch-onboarding call setCompletedSteps directly, so Stepper/useCompletedSteps can be stale until reload. Make setCompletedSteps emitStepsChange and avoid double-emission in markStepComplete.","status":"closed","priority":2,"issue_type":"bug","assignee":"FuchsiaCreek","created_at":"2025-12-20T18:52:49.486053Z","updated_at":"2025-12-20T18:53:19.718399Z","closed_at":"2025-12-20T18:53:19.718399Z","close_reason":"Made setCompletedSteps emit same-tab change events so useCompletedSteps/Stepper update immediately; removed redundant emit in markStepComplete to avoid double notifications.","source_repo":".","compaction_level":0,"original_size":0}
497497
{"id":"bd-88b","title":"security.sh: avoid printing hash on fetch failure","description":"scripts/lib/security.sh fetch_checksum currently can emit the SHA of empty input when curl fails (because sha256sum still runs). Change it to only emit a hash when fetch succeeds (preserve exact bytes with sentinel).","status":"closed","priority":2,"issue_type":"bug","assignee":"FuchsiaCreek","created_at":"2025-12-20T18:35:36.175460Z","updated_at":"2025-12-20T18:36:44.037785Z","closed_at":"2025-12-20T18:36:44.037785Z","close_reason":"Updated scripts/lib/security.sh fetch_checksum to only emit a checksum when curl fetch succeeds (preserves trailing newlines via sentinel), avoiding accidental empty-input hashes on network failure.","source_repo":".","compaction_level":0,"original_size":0}
498498
{"id":"bd-89y7h","title":"Implement read-only first-run rescue advisor","description":"## What\nAdd a read-only `acfs rescue` or equivalent doctor subcommand that explains the most likely recovery path from current ACFS state, recent installer checkpoints, doctor failures, and support-bundle availability.\n\n## Why\nBeginners do not know whether to rerun the installer, reconnect over SSH, inspect a support bundle, or stop and ask for help. The existing doctor is diagnostic; this task makes remediation explicit and safe.\n\n## How\n- Reuse existing logging, doctor, support, and checkpoint data.\n- Emit JSON and human output with severity, evidence, next command, and non-actions.\n- Include fail-closed behavior for unreadable, missing, or malformed state.\n\n## Risks\nDo not suggest deletion, reset, clean, or overwrite operations. If a repair is ambiguous, instruct the user to gather evidence rather than mutate state.\n\n## Acceptance Criteria\n- Fixture tests cover no ACFS state, failed phase, stale checkpoint, malformed checkpoint, already healthy, and support-bundle generation hint.\n- ShellCheck passes for all touched Bash.","status":"closed","priority":1,"issue_type":"feature","created_at":"2026-05-08T13:50:53.056880390Z","created_by":"ubuntu","updated_at":"2026-05-08T15:41:18.628833771Z","closed_at":"2026-05-08T15:41:18.628598220Z","close_reason":"Completed","source_repo":".","compaction_level":0,"original_size":0,"labels":["doctor","idea-wizard","installer","next-wave","rescue","support","tests"],"dependencies":[{"issue_id":"bd-89y7h","depends_on_id":"bd-li8yw","type":"blocks","created_at":"2026-05-08T13:53:06.338922758Z","created_by":"ubuntu","metadata":"{}","thread_id":""}]}
499-
{"id":"bd-8b19n","title":"Generate provider handoff packets from wizard readiness data","description":"## What\nGenerate provider-specific handoff packets from wizard state and provider readiness data.\n\n## Why\nBeginners currently translate provider docs, wizard choices, SSH commands, and installer commands manually. A packet reduces transcription errors and creates a single artifact for support.\n\n## Approach\n- Generate cloud-init where supported and explicit manual steps where not supported.\n- Include SSH command, install command, ref pinning, module profile, expected username, and verification checklist.\n- Mark provider-specific unknowns and required manual confirmations.\n- Keep secrets out of the packet.\n\n## Tests\nUnit fixtures for Hetzner, Contabo, OVH, unknown provider, unsupported OS, and plan-size mismatch.\n\n## Success Criteria\nPackets are deterministic, redacted, and provider-aware.\n\n## Acceptance Criteria\n- Scope in this bead is implemented or documented without hidden compatibility shims.\n- Unit, script, Playwright, VM, or fixture tests are added according to the affected surface; skipped live/provider tests name the required environment.\n- Logs and artifacts are detailed enough for support or CI triage and redact credentials, tokens, IPs, and provider-sensitive values where applicable.\n- Website, installer, generated-manifest, onboarding, support-bundle, and docs surfaces stay consistent when the change touches more than one of them.\n- Required quality gates for touched surfaces pass, including shellcheck for Bash, Bun type-check/lint/build for web work, `br lint`, dependency-cycle checks, and `ubs` before commit.","acceptance_criteria":"- Scope in the description is implemented or documented with no hidden compatibility shim.\n- Unit, script, Playwright, VM, or fixture tests are added according to the affected surface; skipped live/provider tests must name the required environment.\n- Logs and artifacts are detailed enough for support or CI triage and redact credentials, tokens, IPs, and provider-sensitive values where applicable.\n- Website, installer, generated-manifest, onboarding, support-bundle, and docs surfaces stay consistent when the change touches more than one of them.\n- Required quality gates for touched surfaces pass, including shellcheck for Bash, Bun type-check/lint/build for web work, `br lint`, dependency-cycle checks, and `ubs` before commit.","status":"open","priority":1,"issue_type":"feature","created_at":"2026-05-08T19:52:16.944976289Z","created_by":"ubuntu","updated_at":"2026-05-08T20:06:39.008091745Z","source_repo":".","compaction_level":0,"original_size":0,"labels":["cloud","providers","tests","web"],"dependencies":[{"issue_id":"bd-8b19n","depends_on_id":"bd-eyx13","type":"blocks","created_at":"2026-05-08T19:52:22.868647149Z","created_by":"ubuntu","metadata":"{}","thread_id":""}]}
499+
{"id":"bd-8b19n","title":"Generate provider handoff packets from wizard readiness data","description":"## What\nGenerate provider-specific handoff packets from wizard state and provider readiness data.\n\n## Why\nBeginners currently translate provider docs, wizard choices, SSH commands, and installer commands manually. A packet reduces transcription errors and creates a single artifact for support.\n\n## Approach\n- Generate cloud-init where supported and explicit manual steps where not supported.\n- Include SSH command, install command, ref pinning, module profile, expected username, and verification checklist.\n- Mark provider-specific unknowns and required manual confirmations.\n- Keep secrets out of the packet.\n\n## Tests\nUnit fixtures for Hetzner, Contabo, OVH, unknown provider, unsupported OS, and plan-size mismatch.\n\n## Success Criteria\nPackets are deterministic, redacted, and provider-aware.\n\n## Acceptance Criteria\n- Scope in this bead is implemented or documented without hidden compatibility shims.\n- Unit, script, Playwright, VM, or fixture tests are added according to the affected surface; skipped live/provider tests name the required environment.\n- Logs and artifacts are detailed enough for support or CI triage and redact credentials, tokens, IPs, and provider-sensitive values where applicable.\n- Website, installer, generated-manifest, onboarding, support-bundle, and docs surfaces stay consistent when the change touches more than one of them.\n- Required quality gates for touched surfaces pass, including shellcheck for Bash, Bun type-check/lint/build for web work, `br lint`, dependency-cycle checks, and `ubs` before commit.","acceptance_criteria":"- Scope in the description is implemented or documented with no hidden compatibility shim.\n- Unit, script, Playwright, VM, or fixture tests are added according to the affected surface; skipped live/provider tests must name the required environment.\n- Logs and artifacts are detailed enough for support or CI triage and redact credentials, tokens, IPs, and provider-sensitive values where applicable.\n- Website, installer, generated-manifest, onboarding, support-bundle, and docs surfaces stay consistent when the change touches more than one of them.\n- Required quality gates for touched surfaces pass, including shellcheck for Bash, Bun type-check/lint/build for web work, `br lint`, dependency-cycle checks, and `ubs` before commit.","status":"closed","priority":1,"issue_type":"feature","created_at":"2026-05-08T19:52:16.944976289Z","created_by":"ubuntu","updated_at":"2026-05-08T21:07:29.265977297Z","closed_at":"2026-05-08T21:07:29.265689057Z","close_reason":"Completed provider provisioning packet generation from wizard readiness data.","source_repo":".","compaction_level":0,"original_size":0,"labels":["cloud","providers","tests","web"],"dependencies":[{"issue_id":"bd-8b19n","depends_on_id":"bd-eyx13","type":"blocks","created_at":"2026-05-08T19:52:22.868647149Z","created_by":"ubuntu","metadata":"{}","thread_id":""}]}
500500
{"id":"bd-8b90","title":"E2E Logging Overhaul","status":"closed","priority":1,"issue_type":"task","owner":"jeff141421@gmail.com","created_at":"2026-01-15T18:13:02.335081876Z","created_by":"Dicklesworthstone","updated_at":"2026-01-15T18:15:28.119996212Z","closed_at":"2026-01-15T18:15:28.119996212Z","close_reason":"Added log capture, state extraction, and report generation to test_install_ubuntu.sh","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-8b90","depends_on_id":"bd-hu3x","type":"parent","created_at":"2026-01-15T18:13:02.421319460Z","created_by":"Dicklesworthstone","metadata":"","thread_id":""}]}
501501
{"id":"bd-8c4oe","title":"pt: Add installation logic to install.sh","description":"Add process_triage installation to install.sh in the Dicklesworthstone Stack phase.\n\nPT installs TWO binaries: pt (Bash wrapper) and pt-core (Rust engine).\nFollow the pattern of other stack tools. Steps:\n\n1. Pre-check: command -v pt && command -v pt-core (skip if both exist)\n2. Install using verified_installer mechanism:\n - PT's installer uses ENVIRONMENT VARIABLES, not CLI flags\n - Use: DEST=~/.local/bin VERIFY=1 to install with checksum verification\n - Do NOT pass --easy-mode (PT doesn't support it)\n3. Verify installation:\n - command -v pt (wrapper exists)\n - command -v pt-core (Rust engine exists)\n - pt --version (returns version string)\n4. Post-install:\n - pt check (quick self-diagnosis — don't fail if warnings)\n - Log installed version and binary locations\n5. Error handling:\n - If install fails, log warning but don't fail the overall installer\n - PT is important but the system works without it\n\nKey considerations:\n- PT needs /proc access for process scanning (always available on Linux)\n- PT's protected process list is empty by default — users configure later\n- Shadow mode can be enabled later for calibration\n\nIMPORTANT: Edit install.sh directly, NOT scripts/generated/.","status":"closed","priority":1,"issue_type":"task","created_at":"2026-03-12T02:45:42.665767176Z","created_by":"ubuntu","updated_at":"2026-03-12T18:53:23.609575Z","closed_at":"2026-03-12T18:53:23.609575Z","close_reason":"done","closed_by_session":"SandyCitadel","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-8c4oe","depends_on_id":"bd-5g6zb","type":"blocks","created_at":"2026-03-12T02:46:23.675637192Z","created_by":"ubuntu","metadata":"{}","thread_id":""},{"issue_id":"bd-8c4oe","depends_on_id":"bd-cadzg","type":"blocks","created_at":"2026-03-12T02:47:00.596935383Z","created_by":"ubuntu","metadata":"{}","thread_id":""},{"issue_id":"bd-8c4oe","depends_on_id":"bd-ho19b","type":"blocks","created_at":"2026-03-12T02:46:18.451162545Z","created_by":"ubuntu","metadata":"{}","thread_id":""}]}
502502
{"id":"bd-8gax","title":"EPIC: meta_skill (ms) Full ACFS Integration","description":"# EPIC: meta_skill (ms) Full ACFS Integration\n\n## Background & Context\nmeta_skill (ms) is a Rust-based local-first skill management system for Claude Code and other AI agents. It provides hybrid search (BM25 + hash embeddings), Thompson sampling for skill suggestions, and integrates with ACIP security protocol and DCG.\n\n## Technical Specifications\n- **Binary**: `ms`\n- **Language**: Rust\n- **Install**: `cargo install --path .` or curl one-liner\n- **Config**: `~/.config/ms/config.toml` or `.ms/config.toml`\n- **Verify**: `ms --version && ms doctor`\n- **Update**: `ms self-update`\n- **MCP Server**: `ms mcp serve`\n- **Robot Mode**: `ms --robot <cmd>`\n\n## Classification\n**CORE STACK MEMBER** - Fundamental tool for skill management.\n\n## Integration Scope\n1. Manifest entry (phase: stack, category: agents)\n2. Checksums.yaml for verified install\n3. Doctor health checks\n4. Update command support\n5. Webapp/wizard content\n6. Learning Hub lesson\n7. Onboarding TUI lesson\n8. TLDR/Command Reference\n\n## Success Criteria\n- `acfs doctor` shows ms status\n- `acfs update` updates ms\n- Webapp has ms content\n- Learning Hub has ms lesson","status":"closed","priority":1,"issue_type":"epic","owner":"jeff141421@gmail.com","created_at":"2026-01-15T18:39:46.923442424Z","created_by":"Dicklesworthstone","updated_at":"2026-01-21T09:54:29.450219610Z","closed_at":"2026-01-21T09:54:29.450127266Z","close_reason":"Verified complete: manifest, checksums, KNOWN_INSTALLERS, all webapp entries present","source_repo":".","compaction_level":0,"original_size":0,"labels":["epic","meta_skill","stack-tool"]}

apps/web/app/wizard/rent-vps/page.tsx

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use client";
22

3-
import { useCallback, useState } from "react";
3+
import { useCallback, useEffect, useState } from "react";
44
import { useRouter } from "next/navigation";
55
import Image from "next/image";
66
import {
@@ -35,6 +35,7 @@ import {
3535
import { markStepComplete } from "@/lib/wizardSteps";
3636
import { useWizardAnalytics } from "@/lib/hooks/useWizardAnalytics";
3737
import { withCurrentSearch } from "@/lib/utils";
38+
import { useVPSReadinessSelection } from "@/lib/userPreferences";
3839
import {
3940
SimplerGuide,
4041
GuideSection,
@@ -265,6 +266,7 @@ function readinessCopy(status: VPSReadinessStatus): { label: string; className:
265266
}
266267

267268
function CapacityPlanner() {
269+
const [, setVPSReadinessSelection, vpsReadinessSelectionLoaded] = useVPSReadinessSelection();
268270
const [agentCount, setAgentCount] = useState(10);
269271
const [workloadId, setWorkloadId] = useState<WorkloadId>("standard");
270272
const [readinessProviderId, setReadinessProviderId] = useState(VPS_PROVIDERS[0].id);
@@ -294,6 +296,27 @@ function CapacityPlanner() {
294296
});
295297
const readinessStatusCopy = readinessCopy(readiness.status);
296298

299+
useEffect(() => {
300+
if (!vpsReadinessSelectionLoaded) return;
301+
setVPSReadinessSelection({
302+
providerId: readinessProviderId,
303+
planName: readinessPlanName,
304+
ubuntuVersion,
305+
region: readinessRegion,
306+
targetAgents: agentCount,
307+
workloadId,
308+
});
309+
}, [
310+
agentCount,
311+
readinessPlanName,
312+
readinessProviderId,
313+
readinessRegion,
314+
setVPSReadinessSelection,
315+
ubuntuVersion,
316+
vpsReadinessSelectionLoaded,
317+
workloadId,
318+
]);
319+
297320
const handleReadinessProviderChange = (providerId: string) => {
298321
setReadinessProviderId(providerId);
299322
const provider = VPS_PROVIDERS.find((entry) => entry.id === providerId);

0 commit comments

Comments
 (0)