Skip to content

feat(fleet): generalize topology + 'Go Standalone' mode - #339

Merged
jeonghun-jj-lee merged 1 commit into
mainfrom
feat/fleet-generalize-standalone
Aug 11, 2026
Merged

feat(fleet): generalize topology + 'Go Standalone' mode#339
jeonghun-jj-lee merged 1 commit into
mainfrom
feat/fleet-generalize-standalone

Conversation

@jeonghun-jj-lee

@jeonghun-jj-lee jeonghun-jj-lee commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Replace hardcoded Aaron's-Mac-mini hostname with configurable fleet.json. Change 'Local Fallback' from a temporary escape hatch into a permanent 'Go Standalone' mode switch that restores purely-local Amicode.

Key changes

  • ~/.amico/ops/fleet/fleet.json is the single source of truth for fleet role (standalone|server|client) and canonical server coordinates (host, port, sshAlias)
  • No file = standalone (safe zero-config default — pre-fleet behavior)
  • Guard script reads fleet.json instead of scutil hostname comparison
  • 'Go Standalone' command replaces 'Enter Local Fallback' — permanent mode switch, not a temporary escape hatch
  • Drop 'Exit Local Fallback' and 'Rejoin' commands (re-enrollment deferred)
  • fleet_health.ts reads from fleet.json; health checks skip when standalone
  • install.sh reads fleet.json; skips entirely for standalone
  • CI gate verifies guard references fleet.json (not a hardcoded hostname)
  • CONTEXT.md glossary updated: 'Local fallback' → 'Go Standalone'
  • Remove all references to Aarons-Mac-mini, /Users/aaron/, amico-mini
  • Tunnel plist uses FLEET_SSH_ALIAS placeholder (templating deferred to Enroll)
  • Legacy fallback.json migrated to fleet.json on activation

Tests

  • 21 fleet-specific tests pass (rewritten for new API)
  • 931/935 total tests pass (4 failures are pre-existing e2e timeout, unrelated)
  • TypeScript compiles cleanly
  • CI gate (assert_fleet_guard.sh) passes

Deferred (follow-up)

  • 'Enroll' command (join a fleet from command palette)
  • Canonical session pull (merge server sessions into local DB with remote icon)
  • Tunnel plist templating from fleet.json fields

Closes #338

Summary by CodeRabbit

  • New Features

    • Added configurable fleet roles: standalone, server, and client.
    • Added Go Standalone to leave a fleet and run locally.
    • Fleet status now reflects tunnel availability and can reconnect automatically.
    • Fleet configuration uses fleet.json, including configurable tunnel ports.
  • Bug Fixes

    • Improved handling of missing or invalid fleet configuration.
    • Prevented client machines from starting local servers unintentionally.
  • Documentation

    • Updated fleet setup, verification, installation, health checks, and standalone-mode guidance.

Replace hardcoded Aaron's-Mac-mini hostname with configurable fleet.json:
- ~/.amico/ops/fleet/fleet.json is the single source of truth for fleet role
  (standalone|server|client) and canonical server coordinates (host, port, sshAlias)
- No file = standalone (safe zero-config default, pre-fleet behavior)
- Guard script reads fleet.json instead of scutil hostname comparison
- 'Go Standalone' command replaces 'Enter Local Fallback' — permanent mode
  switch, not a temporary escape hatch
- Drop 'Exit Local Fallback' and 'Rejoin' commands (re-enrollment deferred)
- fleet_health.ts reads from fleet.json; health checks skip when standalone
- install.sh reads fleet.json; skips entirely for standalone
- CI gate verifies guard references fleet.json (not a hardcoded hostname)
- CONTEXT.md glossary updated: 'Local fallback' → 'Go Standalone'
- Remove all references to Aarons-Mac-mini, /Users/aaron/, amico-mini
- Tunnel plist uses FLEET_SSH_ALIAS placeholder (templating deferred to Enroll)
- Legacy fallback.json migrated to fleet.json on activation

Closes #338
@jeonghun-jj-lee
jeonghun-jj-lee marked this pull request as ready for review August 11, 2026 15:39
@jeonghun-jj-lee
jeonghun-jj-lee merged commit fc3a403 into main Aug 11, 2026
6 checks passed
@jeonghun-jj-lee
jeonghun-jj-lee deleted the feat/fleet-generalize-standalone branch August 11, 2026 15:39
@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7e13cf99-b3e8-4099-ae66-d26d2c1ed1a5

📥 Commits

Reviewing files that changed from the base of the PR and between 2e5ed2c and f76d31e.

📒 Files selected for processing (17)
  • CONTEXT.md
  • packages/extension/package.json
  • packages/extension/scripts/assert_fleet_guard.sh
  • packages/extension/src/extension.ts
  • packages/extension/src/fleet_fallback.ts
  • packages/extension/src/fleet_health.ts
  • packages/extension/src/terminal.ts
  • packages/extension/test/fleet_fallback.test.ts
  • packages/extension/test/fleet_health.test.ts
  • packages/extension/tools/fleet/README.md
  • packages/extension/tools/fleet/amico-opencode-fleet-guard
  • packages/extension/tools/fleet/co.harmoniqs.amico-tunnel.plist
  • packages/extension/tools/fleet/install.sh
  • tools/fleet/README.md
  • tools/fleet/amico-opencode-fleet-guard
  • tools/fleet/co.harmoniqs.amico-tunnel.plist
  • tools/fleet/install.sh

📝 Walkthrough

Walkthrough

Fleet behavior now uses fleet.json for roles and canonical server settings. The extension replaces fallback and rejoin flows with Go Standalone. Guards, installers, health checks, tunnel wiring, tests, and documentation use the new model.

Changes

Fleet generalization

Layer / File(s) Summary
Fleet configuration model
packages/extension/src/fleet_fallback.ts, packages/extension/src/terminal.ts, packages/extension/test/fleet_fallback.test.ts
FleetConfig replaces fallback state. It supports role detection, canonical port lookup, standalone switching, legacy migration, and configuration cleanup.
Extension fleet and standalone flow
packages/extension/src/extension.ts, packages/extension/package.json
The extension reads fleet roles, probes configurable tunnels, offers Go Standalone, unloads the tunnel, restarts a local server, and reconnects after restart.
Fleet health and CI validation
packages/extension/src/fleet_health.ts, packages/extension/test/fleet_health.test.ts, packages/extension/scripts/assert_fleet_guard.sh
Health checks report fleet roles and validate configured ports and tunnels. CI validates fleet configuration references.
Fleet guard, installer, and tunnel wiring
tools/fleet/*, packages/extension/tools/fleet/*
Guards and installers read fleet.json, client roles prevent local spawning, configured ports replace the fixed port, and tunnels use FLEET_SSH_ALIAS.
Fleet terminology and operations
CONTEXT.md, tools/fleet/README.md, packages/extension/tools/fleet/README.md
Documentation defines fleet roles, installation, verification, health checks, and the Go Standalone procedure.

Estimated code review effort: 4 (Complex) | ~45 minutes

Suggested reviewers: aarontrowbridge

Sequence Diagram(s)

sequenceDiagram
  participant VSCodeExtension
  participant FleetConfig as fleet.json
  participant SSHTunnel
  participant LocalServer
  VSCodeExtension->>FleetConfig: Read role and canonical port
  VSCodeExtension->>SSHTunnel: Probe or unload tunnel
  VSCodeExtension->>FleetConfig: Write standalone role
  VSCodeExtension->>LocalServer: Restart local server
Loading
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/fleet-generalize-standalone

Comment @coderabbitai help to get the list of available commands.

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.

Generalize fleet: configurable topology + "Go Standalone" mode

1 participant